Redis使用介绍
Redis 是一個高性能的key-value數(shù)據(jù)庫。 redis的出現(xiàn),很大程度補(bǔ)償了memcached這類keyvalue存儲的不足,在部 分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補(bǔ)充作用。它提供了Python,Ruby,Erlang,PHP,Java客戶端,使用很方便。
Redis使用單線程的IO復(fù)用模型,自己封裝了一個簡單的AeEvent事件處理框架,主要實現(xiàn)了epoll、kqueue和select,對于單純只有IO操作來說,單線程可以將速度優(yōu)勢發(fā)揮到最大,但是Redis也提供了一些簡單的計算功能,比如排序、聚合等,對于這些操作,單線程模型實際會嚴(yán)重影響整體吞吐量,CPU計算過程中,整個IO調(diào)度都是被阻塞住的。
?
?
Redis除了作為存儲之外還提供了一些其它方面的功能,比如聚合計算、pubsub、scripting等,對于此類功能需要了解其實現(xiàn)原理,清楚地了解到它的局限性后,才能正確的使用,比如pubsub功能,這個實際是沒有任何持久化支持的,消費(fèi)方連接閃斷或重連之間過來的消息是會全部丟失的,又比如聚合計算和scripting等功能受Redis單線程模型所限,是不可能達(dá)到很高的吞吐量的,需要謹(jǐn)慎使用。
?
本例子Linux采用的centOs5.4
下面來介紹一下redis的安裝
[java]?view plain?copy?print??
make完后 redis-2.0.4目錄下會出現(xiàn)編譯后的redis服務(wù)程序redis-server,還有用于測試的客戶端程序redis-cli
安裝成功
啟動服務(wù)
./redis-server
也可以通過啟動參數(shù)告訴redis使用指定配置文件使用下面命令啟動
./redis-server redis.conf
redis.conf是一個默認(rèn)的配置文件。我們可以根據(jù)需要使用自己的配置文件。
啟動redis服務(wù)進(jìn)程后,就可以使用測試客戶端程序redis-cli和redis服務(wù)交互了
注意啟動的時候,會出現(xiàn)
WARNING overcommit_memory is set to 0!Background save may fail under
low memory condition. To fix this issue add'vm.overcommit_memory = 1' to /etc/sysctl.conf and??
[6020] 10 Aug 20:58:21 * The server is nowready to accept connections on port 6379
[6020] 10 Aug 20:58:21 - 0 clientsconnected (0 slaves), 533432 bytes in use
[6020] 10 Aug 20:58:30 - 0 clientsconnected (0 slaves), 533432 bytes in use
還有就是執(zhí)行:sysctl vm.overcommit_memory=1
關(guān)于redis一些資料的學(xué)習(xí)可以到http://www.cnblogs.com/xhan/archive/2011/02/08/1949867.html?去學(xué)習(xí) ,很全面
下面介紹一個簡單java客戶端Jedis,大家可以到https://github.com/xetorthio/jedis?這網(wǎng)址下載
redis作為NoSQL數(shù)據(jù)庫的一種應(yīng)用,響應(yīng)速度和命中率上還是比較高效的。項目中需要用集中式可橫向擴(kuò)展的緩存框架,做了一點調(diào)研,即便redis、memcached存在效率上的差異(具體比較參考http://timyang.net/data/mcdb-tt-redis/),但其實都能滿足目前項目的需求;但是redis還是比較風(fēng)騷的,支持鏈表和集合操作,支持正則表達(dá)式查找key,目前項目緩存的結(jié)果大多是鏈表,如果鏈表新增或者修改數(shù)據(jù)的話,redis就體現(xiàn)出了極大的優(yōu)勢(memcached只能重新加載鏈表,redis可以對鏈表新增或者修改)
1:下載redis
下載地址 http://code.google.com/p/redis/downloads/list
推薦下載redis-1.2.6.tar.gz,之前這個版本同事已經(jīng)有成功安裝運(yùn)行的經(jīng)驗,redis-2.0.4.tar.gz 這個版本我安裝后無法操作緩存數(shù)據(jù),具體原因后續(xù)再說
2:安裝redis
下載后解壓 tar zxvf redis-1.2.6.tar.gz 到任意目錄,例如/usr/local/redis-1.2.6
解壓后,進(jìn)入redis目錄
??? cd /usr/local/redis-1.2.6?
??? make?
拷貝文件
cp redis.conf /etc/ 這個文件時redis啟動的配置文件
cp redis-benchmark redis-cli redis-server /usr/bin/ #這個倒是很有用,這樣就不用再執(zhí)行時加上./了,而且可以在任何地方執(zhí)行
設(shè)置內(nèi)存分配策略(可選,根據(jù)服務(wù)器的實際情況進(jìn)行設(shè)置)
/proc/sys/vm/overcommit_memory
可選值:0、1、2。
0, 表示內(nèi)核將檢查是否有足夠的可用內(nèi)存供應(yīng)用進(jìn)程使用;如果有足夠的可用內(nèi)存,內(nèi)存申請允許;否則,內(nèi)存申請失敗,并把錯誤返回給應(yīng)用進(jìn)程。
1, 表示內(nèi)核允許分配所有的物理內(nèi)存,而不管當(dāng)前的內(nèi)存狀態(tài)如何。
2, 表示內(nèi)核允許分配超過所有物理內(nèi)存和交換空間總和的內(nèi)存
值得注意的一點是,redis在dump數(shù)據(jù)的時候,會fork出一個子進(jìn)程,理論上child進(jìn)程所占用的內(nèi)存和parent是一樣的,比如parent占用的內(nèi)存為8G,這個時候也要同樣分配8G的內(nèi)存給child,如果內(nèi)存無法負(fù)擔(dān),往往會造成redis服務(wù)器的down機(jī)或者IO負(fù)載過高,效率下降。所以這里比較優(yōu)化的內(nèi)存分配策略應(yīng)該設(shè)置為 1(表示內(nèi)核允許分配所有的物理內(nèi)存,而不管當(dāng)前的內(nèi)存狀態(tài)如何)
開啟redis端口,修改防火墻配置文件
??? vi /etc/sysconfig/iptables?
加入端口配置
??? -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT?
重新加載規(guī)則
??? service iptables restart??
3:啟動redis服務(wù)
??? [root@Architect redis-1.2.6]# pwd?
??? /usr/local/redis-1.2.6?
??? [root@Architect redis-1.2.6]# redis-server /etc/redis.conf?
查看進(jìn)程,確認(rèn)redis已經(jīng)啟動
??? [root@Architect redis-1.2.6]# ps -ef | grep redis?
??? root?????? 401 29222? 0 18:06 pts/3??? 00:00:00 grep redis?
??? root???? 29258???? 1? 0 16:23 ???????? 00:00:00 redis-server /etc/redis.conf?
如果這里啟動redis服務(wù)失敗,一般情況下是因為redis.conf文件有問題,建議檢查或找個可用的配置文件進(jìn)行覆蓋,避免少走彎路,這里建議,修改redis.conf,設(shè)置redis進(jìn)程為后臺守護(hù)進(jìn)程
??? # By default Redis does not run as a daemon. Use 'yes' if you need it.?
??? # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.?
??? daemonize yes?
4:測試redis
??? [root@Architect redis-1.2.6]# redis-cli?
??? redis> set name songbin?
??? OK?
??? redis> get name??
??? "songbin"?
5:關(guān)閉redis服務(wù)
??? redis-cli shutdown?
redis服務(wù)關(guān)閉后,緩存數(shù)據(jù)會自動dump到硬盤上,硬盤地址為redis.conf中的配置項dbfilename dump.rdb所設(shè)定
強(qiáng)制備份數(shù)據(jù)到磁盤,使用如下命令
??? redis-cli save 或者 redis-cli -p 6380 save(指定端口)
安裝的時候,make完了之后再make install 就自動安裝到/usr/local/bin下了,不用手動cp的
?
?
?redis函數(shù)操作
http://www.runoob.com/redis/sorted-sets-zscore.html
出自http://blog.csdn.net/ajun_studio/article/details/6698147 和http://www.oschina.net/question/12_18065?sort=time
?
Welcome to redis-py’s documentation!
Indices and tables
- Index
- Module Index
- Search Page
?
http://redis-py.readthedocs.org/en/latest/
轉(zhuǎn)載于:https://www.cnblogs.com/wicub/p/5368490.html
總結(jié)
- 上一篇: hdu 6086 -- Rikka w
- 下一篇: linux cmake编译源码,linu