ssdb是一款類似於redis的nosql數據庫,不過redis是基於內存的,服務器比較昂貴,ssdb則是基於硬盤存儲的,很容易擴展,對於一些對速度要求不是太高的應用,還是不錯的選擇。
先記錄一個比較坑的東西,具體的用法以后補充。
ssdb刪除數據的時候有很多中方法:
flushdb 刪除整個數據庫中的所有數據
qclear 刪除列表類型的數據
hclear 刪除hash類型的數據
zclear 刪除有序集合類型的梳理
del 刪除字符串類型的數據
不過,ssdb在刪除數據的時候並不會立刻釋放磁盤的空間,用作者的話說就是ssdb會在合適的時候去釋放,這就會造成不知不覺中ssdb占用的磁盤空間越來越大,還不知道什么時候才會被釋放,如果不及時處理的話,服務器卡死是很正常的事情,經過不斷的尋找,終於被我發現了一個命令 compact , 這個命令會自動去釋放應該被釋放的磁盤空間,不過在使用的時候會造成ssdb卡慢,並且 compact 命令的執行速度也不快,但總算是可以立刻釋放了,不用再擔心服務器被撐爆。
需要注意的是如果服務器已經快被撐爆了,那么你在執行 compact 的時候ssdb是有可能崩潰的,而且執行一次 compact 並不會釋放所有應該釋放的空間,可能需要多次執行才行。
還有一個比較坑的東西就是在刪除數據的時候,會造成服務阻塞,其他任何寫命令都執行不了,可讀不可寫。。。而且刪除的超級慢。。。
下面簡單介紹一下ssdb的用法。
一、服務器搭建
環境為Mac
首先到 https://github.com/ideawu/ssdb 查看官方文檔,下載安裝包
wget https://github.com/ideawu/ssdb/archive/master.zip unzip master.zip cd ssdb-master make
make的時候報了個錯:ERROR! autoconf required! install autoconf first
於是安裝 autoconf
brew install autoconf
安裝完成后繼續編譯
make && make install
沒有報錯,繼續,下面啟動ssdb服務,加-d參數為deamon模式 服務后台運行 推薦使用
./ssdb-server -d ./ssdb.conf
或者
./ssdb-server ./ssdb.conf
然后可以使用下面的命令連接到ssdb數據庫,進行操作
./tools/ssdb-cli -h localhost -p 8888
使用在命令行客戶端中執行info命令結果如下:
關閉數據庫
./ssdb-server ./ssdb.conf -s stop
PS: ssdb服務在啟動的時候會在 var 目錄下生成一個ssdb.pid文件,當ssdb由於意外關閉的時候這個文件不會被刪除,因此當重新啟動ssdb服務的時候,會報下面的錯誤:
Fatal error!
Pidfile ./var/ssdb.pid already exists!
Kill the running process before you run this command,
or use '-s restart' option to restart the server.
此時你可以手動刪除var/ssdb.pid文件,然后啟動ssdb服務,或者在啟動ssdb服務的時候使用如下命令
./ssdb-server -d ./ssdb.conf -s restart
-s 參數支持三個選項 stop, start , restart, 默認情況下可不加 -s 參數,此時默認為start選項
!!! PS 當ssdb由於某個特別耗時操作卡死的時候,如果想停止命令的執行,目前我只知道重啟這個辦法。但是ssdb重啟使用 restart 特別慢,所以可以使用kill -9 殺掉進程,然后再啟動。。 不知道會有啥不良影響,我試了一次,還沒發現問題。
二、數據庫操作
ssdb中的數據類型分為4中,字符串類型、列表類型、哈希類型、有序集合類型。
這四種數據類型的操作命令一般都以固定的字母開頭:
s 字符串類型
q 列表類型
h 哈希類型
z 有序集合類型
(1)首先,我們最關心的一般是數據庫中存在着哪些鍵,在redis中,使用keys命令可以查看當前數據庫中的所有鍵,但ssdb中卻沒有這樣功能的命令,這可能會讓讓用慣了redis的同學感覺有點別扭。
在ssdb中查看存在的鍵是分類型用不同的命令的:
keys 字符串類型
qlist 列表類型
hlist 哈希類型
zlist 有序集合類型
這四個命令的參數和用法都一樣,例如
前兩個參數用於確定鍵的范圍,a、z 即篩選鍵名首字母在a-z之間的鍵,若為''、'' 則不限制范圍,最后一個參數用來限制返回的鍵的最大個數,為必需參數。
可以轉載,但請注明出處,做人要厚道一點,謝謝