欢迎投稿

今日深度:

R语言利剑之NoSQL系列:Redis(1)(2)

list类型操作

  1. #从数组左边插入数据 
  2. redisLPush('a',1) 
  3. redisLPush('a',2) 
  4. redisLPush('a',3) 
  5.  
  6. #显示从数组左边0-2的数据 
  7. redisLRange('a',0,2) 
  8.     [[1]] 
  9.     [1] 3 
  10.     [[2]] 
  11.     [1] 2 
  12.     [[3]] 
  13.     [1] 1 
  14.  
  15. #从数据左边弹出一个数据 
  16. redisLPop('a') 
  17.     [1] 3 
  18.  
  19. #显示从数组左边0-(-1)的数据    
  20. redisLRange('a',0,-1) 
  21.     [[1]] 
  22.     [1] 2 
  23.  
  24.     [[2]] 
  25.     [1] 1 
  26.  
  27. #从数组右边插入数据 
  28. redisRPush('a','A') 
  29. redisRPush('a','B') 
  30.  
  31. #显示从数组左边0-(-1)的数据 
  32. redisLRange('a',0,-1) 
  33.     [[1]] 
  34.     [1] 2 
  35.     [[2]] 
  36.     [1] 1 
  37.     [[3]] 
  38.     [1] "A" 
  39.     [[4]] 
  40.     [1] "B" 
  41.  
  42. #从数据右边弹出一个数据 
  43. redisRPop('a') 

set类型操作

  1. redisSAdd('A',runif(2)) 
  2. redisSAdd('A',55) 
  3.  
  4. #显示对象有几个元素 
  5. redisSCard('A') 
  6.     [1] 2 
  7.  
  8. #列表显示set对象元素 
  9. redisSMembers('A') 
  10.     [[1]] 
  11.     [1] 55 
  12.  
  13.     [[2]] 
  14.     [1] 0.6494041 0.3181108 
  15.  
  16. redisSAdd('B',55) 
  17. redisSAdd('B',rnorm(3)) 
  18.  
  19. #显示对象有几个元素 
  20. redisSCard('B') 
  21.     [1] 2 
  22.  
  23. #列表显示set对象元素     
  24. redisSMembers('B') 
  25.     [[1]] 
  26.     [1] 55 
  27.  
  28.     [[2]] 
  29.     [1] 0.1074787 1.3111006 0.8223434 
  30.  
  31. #差集 
  32. redisSDiff(c('A','B')) 
  33.     [[1]] 
  34.     [1] 0.6494041 0.3181108 
  35.  
  36. #交集 
  37. redisSInter(c('A','B')) 
  38.     [[1]] 
  39.     [1] 55 
  40.  
  41. #并集 
  42. redisSUnion(c('A','B')) 
  43.     [[1]] 
  44.     [1] 55 
  45.  
  46.     [[2]] 
  47.     [1] 0.1074787 1.3111006 0.8223434 
  48.  
  49.     [[3]] 
  50.     [1] 0.6494041 0.3181108 

rredis与redis-cli交互

redis客户端插入数据,rredis读取数据

  1. #打开redis客户端 
  2. ~ redis-cli 
  3. redis 127.0.0.1:6379> set shell "Greetings, R client!" 
  4.     OK 
  5.  
  6. redisGet('shell') 
  7.     [1] "Greetings, R client!" 

rredis插入数据,redis客户端读取数据

  1. #插入数据 
  2. redisSet('R', 'Greetings, shell client!') 
  3.     [1] "OK" 
  4.  
  5. #读取数据(有乱码) 
  6. redis 127.0.0.1:6379> get R 
  7.     "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)

  1. redisSet('R', charToRaw('Greetings, shell client!')) 
  2.     [1] TRUE 
  3.  
  4. #正常读取数据 
  5. redis 127.0.0.1:6379> get R 
  6.     "Greetings, shell client!" 

第四章 rredis测试案例

测试案例的需求:

读入一个数据文件,从左到右分别是用户id,口令,邮箱,在redis里建立合适的数据模型,并将这些数据导入到redis。

文字说明部分:

首先,定义数据模型:

KEY:

users:用户id

VALUE:

id:用户id

pw:口令

email:邮箱

R语言读入数据文件。

然后,建立redis连接,以循环方式插入数据。

以users:wolys为KEY,输出对应用的VALVE值。

代码部分

  1. #读入数据 
  2. data<-scan(file="data5.txt",what=character(),sep=" "
  3. data<-data[which(data!='#')] 
  4.  
  5. > data 
  6.  
  7.      [1] "wolys"                   "wolysopen111"            "wolys@21cn.com"          
  8.      [4] "coralshanshan"           "601601601"               "zss1984@126.com"         
  9.      [7] "pengfeihuchao"           "woaidami"                "294522652@qq.com"        
  10.     [10] "simulategirl"            "@#$9608125"              "simulateboy@163.com"     
  11.     [13] "daisypp"                 "12345678"                "zhoushigang_123@163.com" 
  12.     [16] "sirenxing424"            "tfiloveyou"              "sirenxing424@126.com"    
  13.     [19] "raininglxy"              "1901061139"              "lixinyu23@qq.com"        
  14.     [22] "leochenlei"              "leichenlei"              "chenlei1201@gmail.com"   
  15.     [25] "z370433835"              "lkp145566"               "370433835@qq.com"        
  16.     [28] "cxx0409"                 "12345678"                "cxx0409@126.com"         
  17.     [31] "xldq_l"                  "061222ll"                "viv093@sina.com"   
  18.  
  19. #连接redis连接 
  20. redisConnect(host="192.168.1.101",port=6379
  21. redisFlushAll() 
  22. redisKeys() 
  23.  
  24. #循环插入数据 
  25. id<-NULL 
  26. for(i in 1:length(data)){ 
  27.   if(i %% 3 == 1) { 
  28.     id<-data[i] 
  29.     redisSAdd(paste("users:",id,sep=""),paste("id:",id,sep="")) 
  30.   } else if(i %% 3 == 2) { 
  31.     redisSAdd(paste("users:",id,sep=""),paste("pw:",data[i],sep="")) 
  32.   } else { 
  33.     redisSAdd(paste("users:",id,sep=""),paste("email:",data[i],sep="")) 
  34.   } 
  35.  
  36. #列出所有的KEY 
  37. redisKeys() 
  38.  
  39.      [1] "users:cxx0409"       "users:sirenxing424"  "users:simulategirl"  "users:xldq_l"        
  40.      [5] "users:coralshanshan" "users:raininglxy"    "users:pengfeihuchao" "users:leochenlei"    
  41.      [9] "users:daisypp"       "users:wolys"         "users:z370433835"    
  42.  
  43. #通过KEY查询VALUE 
  44. redisSMembers("users:wolys") 
  45.  
  46.     [[1]] 
  47.     [1] "pw:wolysopen111" 
  48.  
  49.     [[2]] 
  50.     [1] "email:wolys@21cn.com" 
  51.  
  52.     [[3]] 
  53.     [1] "id:wolys" 
  54.  
  55. #关闭redis连接 
  56. redisClose() 

完成测试案例。

数据文件:data5.txt

  1. wolys # wolysopen111 # wolys@21cn.com 
  2. coralshanshan # 601601601 # zss1984@126.com 
  3. pengfeihuchao # woaidami # 294522652@qq.com 
  4. simulategirl # @#$9608125 # simulateboy@163.com 
  5. daisypp # 12345678 # zhoushigang_123@163.com 
  6. sirenxing424 # tfiloveyou # sirenxing424@126.com 
  7. raininglxy # 1901061139 # lixinyu23@qq.com 
  8. leochenlei # leichenlei # chenlei1201@gmail.com 
  9. z370433835 # lkp145566 # 370433835@qq.com 
  10. cxx0409 # 12345678 # cxx0409@126.com 
  11. xldq_l # 061222ll # viv093@sina.com 

原文链接:http://cos.name/2013/04/nosql-r-redis/ 


www.htsjk.Com true http://www.htsjk.com/shujukujc/19372.html NewsArticle list类型操作 #从数组左边插入数据 redisLPush('a',1) redisLPush('a',2) redisLPush('a',3) #显示从数组左边0-2的数据 redisLRange('a',0,2) [[1]] [1]3 [[2]] [1]2 [[3]] [1]1 #从数据左...
评论暂时关闭