分爲4個章節。redis
Redis環境準備 rredis函數庫 rredis基本使用操做 rredis使用案例
每一章節,都會分爲」文字說明部分」和」代碼部分」,保持文字說明與代碼的連貫性。shell
首先環境準備,這裏我選擇了Linux Ubuntu操做系統12.04的64位服務器版本,你們能夠根據本身的使用習慣選擇順手的Linux。
Redis安裝過程跳過。數據庫
sudo apt-get install redis-server
查看Redis服務器環境
使用/etc/init.d/redis-server命令,啓動redis-server, 默認端口:port=6379數組
在服務器端,用telnet鏈接redis-server服務器
用telnet插入數據,讀取數據。dom
R語言環境2.15.0,WinXP經過遠程鏈接,訪問Redis server。函數
查看操做系統測試
~ uname -a Linux AY121111030241cda8003 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux ~ cat /etc/issue Ubuntu 12.04.1 LTS \n \l
啓動redisthis
~ /etc/init.d/redis-server start Starting redis-server: redis-server.
查看系統進程spa
~ ps -aux|grep redis redis 20128 0.0 0.0 10676 1428 ? Ss 16:39 0:00 /usr/bin/redis-server /etc/redis/redis.conf
查看啓日誌
~ cat /var/log/redis/redis-server.log [20128] 14 Apr 16:39:43 * Server started, Redis version 2.2.12 [20128] 14 Apr 16:39:43 # 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 then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. [20128] 14 Apr 16:39:43 * The server is now ready to accept connections on port 6379
telnet鏈接redis-server
~ telnet localhost 6379 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.
插入數據
rpush data 1 :1 rpush data 2 :2
查詢數據
lrange data 0 -1 *2 $1 1 $1 2
R語言開發環境2.15.0,WinXP
~ R R version 2.15.0 (2012-03-30) Copyright (C) 2012 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: i386-pc-mingw32/i386 (32-bit)
rredis提供了100函數,對應用redis的操做。雖然函數也很多,可是用法都是比較簡單的,對R語言支持足夠靈活,代碼也比較簡潔。
下面列出了全部rredis函數庫,我只挑選一些經常使用的介紹。
創建鏈接,關閉鏈接
redisConnect() , redisClose()
清空當前/全部數據庫數據
redisFlushDB() , redisFlushAll()
列出全部KEY值,KEY的數量
redisKeys(), redisDBSize()
選擇切換數據庫:0是默認數據庫
redisSelect(0)
插入string對象,批量插入
redisSet('x',runif(5)), redisMSet(list(x=pi,y=runif(5),z=sqrt(2)))
讀取string對象,批量讀取
redisGet('x'), redisMGet(c('x','y','z'))
刪除對象
redisDelete('x')
左邊插入數組對象,右邊插入數組對象
redisLPush('a',1), redisRPush('a','A')
左邊彈出一個數組對象, 右邊彈出一個數組對象,
redisLPop('a'), redisRPop('a')
從左邊顯示數組對象列表
redisLRange('a',0,-1)
插入set類型對象
redisSAdd('A',runif(2))
顯示set對象有幾個元素,列表顯示set對象元素
redisSCard('A'), redisSMembers('A')
顯示兩個set對象的差集,交集,並集
redisSDiff(c('A','B')),redisSInter(c('A','B')),redisSUnion(c('A','B'))
共有100個函數
redisAuth redisBgRewriteAOF redisBgSave redisBLPop redisBRPop redisBRPopLPush redisClose redisCmd redisConnect redisDBSize redisDecr redisDecrBy redisDelete redisDiscard redisEval redisExec redisExists redisExpire redisExpireAt redisFlushAll redisFlushDB redisGet redisGetContext redisGetResponse redisGetSet redisHDel redisHExists redisHFields redisHGet redisHGetAll redisHIncrBy redisHKeys redisHLen redisHMGet redisHMSet redisHSet redisHVals redisIncr redisIncrBy redisInfo redisKeys redisLIndex redisLLen redisLPop redisLPush redisLRange redisLRem redisLSet redisLTrim redisMGet redisMonitorChannels redisMove redisMSet redisMulti redisPublish redisRandomKey redisRename redisRPop redisRPopLPush redisRPush redisSAdd redisSave redisSCard redisSDiff redisSDiffStore redisSelect redisSet redisSetBlocking redisSetContext redisShutdown redisSInter redisSInterStore redisSIsMember redisSlaveOf redisSMembers redisSMove redisSort redisSPop redisSRandMember redisSRem redisSubscribe redisSUnion redisSUnionStore redisTTL redisType redisUnsubscribe redisUnwatch redisWatch redisZAdd redisZCard redisZIncrBy redisZInterStore redisZRange redisZRangeByScore redisZRank redisZRem redisZRemRangeByRank redisZRemRangeByScore redisZScore redisZUnionStore
首先,要安裝rredis類庫,加載類庫。
redisConnect(host=「192.168.1.101」,port=6379)
而後,經過redisConnect()函數,創建與Redis Server的鏈接。若是是本地鏈接redisConnect()不要參數,下面例子使用遠程鏈接,增長host參數配置IP地址。 redisConnect(host=「192.168.1.101」,port=6379)
redis的基本操做:建議連接,切換數據庫,列表顯示全部KEY值,清空當前數據庫數據,清空全部數據庫數據,關閉連接,
string類型操做:插入,讀取,刪除,插入並設置過時時間,批量操做
list類型操做:插入,讀取,彈出
set類型操做:插入,讀取,交集,差集,並集
rredis與redis-cli的交互操做
#安裝rredis install.packages(rredis) #加載rredis類庫 library(rredis) #遠程鏈接redis server redisConnect(host="192.168.1.101",port=6379) #列出全部的keys redisKeys() [1] "x" "data" #顯示有多少個key redisDBSize() [1] 2 #切換數據庫1 redisSelect(1) [1] "OK" redisKeys() NULL #切換數據庫0 redisSelect(0) [1] "OK" redisKeys() [1] "x" "data" #清空當前數據庫數據 redisFlushDB() [1] "OK" #清空全部數據庫數據 redisFlushAll() [1] "OK" #關閉連接 redisClose()
#插入對象 redisSet('x',runif(5)) 1] "OK" #讀取對象 redisGet('x') [1] 0.67616159 0.06358643 0.07478021 0.32129140 0.16264615 #設置數據過時時間 redisExpire('x',1) Sys.sleep(1) redisGet('x') NULL #批量插入 redisMSet(list(x=pi,y=runif(5),z=sqrt(2))) [1] TRUE #批量讀取 redisMGet(c('x','y','z')) $x [1] 3.141593 $y [1] 0.9249501 0.3444994 0.6477250 0.1681421 0.2646853 $z [1] 1.414214 #刪除數據 redisDelete('x') [1] 1 redisGet('x') NULL
#從數組左邊插入數據 redisLPush('a',1) redisLPush('a',2) redisLPush('a',3) #顯示從數組左邊0-2的數據 redisLRange('a',0,2) [[1]] [1] 3 [[2]] [1] 2 [[3]] [1] 1 #從數據左邊彈出一個數據 redisLPop('a') [1] 3 #顯示從數組左邊0-(-1)的數據 redisLRange('a',0,-1) [[1]] [1] 2 [[2]] [1] 1 #從數組右邊插入數據 redisRPush('a','A') redisRPush('a','B') #顯示從數組左邊0-(-1)的數據 redisLRange('a',0,-1) [[1]] [1] 2 [[2]] [1] 1 [[3]] [1] "A" [[4]] [1] "B" #從數據右邊彈出一個數據 redisRPop('a')
redisSAdd('A',runif(2)) redisSAdd('A',55) #顯示對象有幾個元素 redisSCard('A') [1] 2 #列表顯示set對象元素 redisSMembers('A') [[1]] [1] 55 [[2]] [1] 0.6494041 0.3181108 redisSAdd('B',55) redisSAdd('B',rnorm(3)) #顯示對象有幾個元素 redisSCard('B') [1] 2 #列表顯示set對象元素 redisSMembers('B') [[1]] [1] 55 [[2]] [1] 0.1074787 1.3111006 0.8223434 #差集 redisSDiff(c('A','B')) [[1]] [1] 0.6494041 0.3181108 #交集 redisSInter(c('A','B')) [[1]] [1] 55 #並集 redisSUnion(c('A','B')) [[1]] [1] 55 [[2]] [1] 0.1074787 1.3111006 0.8223434 [[3]] [1] 0.6494041 0.3181108
redis客戶端插入數據,rredis讀取數據
#打開redis客戶端 ~ redis-cli redis 127.0.0.1:6379> set shell "Greetings, R client!" OK redisGet('shell') [1] "Greetings, R client!"
rredis插入數據,redis客戶端讀取數據
#插入數據 redisSet('R', 'Greetings, shell client!') [1] "OK" #讀取數據(有亂碼) redis 127.0.0.1:6379> get R "X\\x00\x00\x00\x02\x00\x02\x0f\x00\x00\x02\x03\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x04\x00\\x00\x00\x00\x18Greetings, shell client!"
轉型以數組方式存儲(charToRaw)
redisSet('R', charToRaw('Greetings, shell client!')) [1] TRUE #正常讀取數據 redis 127.0.0.1:6379> get R "Greetings, shell client!"
測試案例的需求:
讀入一個數據文件,從左到右分別是用戶id,口令,郵箱,在redis裏創建合適的數據模型,並將這些數據導入到redis。
首先,定義數據模型:
KEY:
users:用戶id
VALUE:
id:用戶id
pw:口令
email:郵箱
R語言讀入數據文件。
而後,創建redis鏈接,以循環方式插入數據。
以users:wolys爲KEY,輸出對應用的VALVE值。
#讀入數據 data<-scan(file="data5.txt",what=character(),sep=" ") data<-data[which(data!='#')] > data [1] "wolys" "wolysopen111" "wolys@21cn.com" [4] "coralshanshan" "601601601" "zss1984@126.com" [7] "pengfeihuchao" "woaidami" "294522652@qq.com" [10] "simulategirl" "@#$9608125" "simulateboy@163.com" [13] "daisypp" "12345678" "zhoushigang_123@163.com" [16] "sirenxing424" "tfiloveyou" "sirenxing424@126.com" [19] "raininglxy" "1901061139" "lixinyu23@qq.com" [22] "leochenlei" "leichenlei" "chenlei1201@gmail.com" [25] "z370433835" "lkp145566" "370433835@qq.com" [28] "cxx0409" "12345678" "cxx0409@126.com" [31] "xldq_l" "061222ll" "viv093@sina.com" #鏈接redis鏈接 redisConnect(host="192.168.1.101",port=6379) redisFlushAll() redisKeys() #循環插入數據 id<-NULL for(i in 1:length(data)){ if(i %% 3 == 1) { id<-data[i] redisSAdd(paste("users:",id,sep=""),paste("id:",id,sep="")) } else if(i %% 3 == 2) { redisSAdd(paste("users:",id,sep=""),paste("pw:",data[i],sep="")) } else { redisSAdd(paste("users:",id,sep=""),paste("email:",data[i],sep="")) } } #列出全部的KEY redisKeys() [1] "users:cxx0409" "users:sirenxing424" "users:simulategirl" "users:xldq_l" [5] "users:coralshanshan" "users:raininglxy" "users:pengfeihuchao" "users:leochenlei" [9] "users:daisypp" "users:wolys" "users:z370433835" #經過KEY查詢VALUE redisSMembers("users:wolys") [[1]] [1] "pw:wolysopen111" [[2]] [1] "email:wolys@21cn.com" [[3]] [1] "id:wolys" #關閉redis鏈接 redisClose()
完成測試案例。
wolys # wolysopen111 # wolys@21cn.com coralshanshan # 601601601 # zss1984@126.com pengfeihuchao # woaidami # 294522652@qq.com simulategirl # @#$9608125 # simulateboy@163.com daisypp # 12345678 # zhoushigang_123@163.com sirenxing424 # tfiloveyou # sirenxing424@126.com raininglxy # 1901061139 # lixinyu23@qq.com leochenlei # leichenlei # chenlei1201@gmail.com z370433835 # lkp145566 # 370433835@qq.com cxx0409 # 12345678 # cxx0409@126.com xldq_l # 061222ll # viv093@sina.com