R语言与Redis的联合使用

分为4个章节。

Redis环境准备
rredis函数库
rredis基本使用操作
rredis使用案例

每一章节,都会分为”文字说明部分”和”代码部分”,保持文字说明与代码的连贯性。

第一章 Redis环境准备

文字说明部分:

首先环境准备,这里我选择了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插入数据,读取数据。
  • 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

启动redis

~ /etc/init.d/redis-server start

    Starting redis-server: redis-server.

查看系统进程

~ 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函数库

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基本使用操作

文字说明部分:

首先,要安装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的交互操作

代码部分:

redis的基本操作:

#安装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()

string类型操作:

#插入对象
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

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

#从数据左边弹出一个数据
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‘)

set类型操作

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

rredis与redis-cli交互

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!"

第四章 rredis测试案例

测试案例的需求:
读入一个数据文件,从左到右分别是用户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"            "[email protected]"         
     [4] "coralshanshan"           "601601601"               "[email protected]"        
     [7] "pengfeihuchao"           "woaidami"                "[email protected]"       
    [10] "simulategirl"            "@#$9608125"              "[email protected]"    
    [13] "daisypp"                 "12345678"                "[email protected]"
    [16] "sirenxing424"            "tfiloveyou"              "[email protected]"   
    [19] "raininglxy"              "1901061139"              "[email protected]"       
    [22] "leochenlei"              "leichenlei"              "[email protected]"  
    [25] "z370433835"              "lkp145566"               "[email protected]"       
    [28] "cxx0409"                 "12345678"                "[email protected]"        
    [31] "xldq_l"                  "061222ll"                "[email protected]"  

#连接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:[email protected]"

    [[3]]
    [1] "id:wolys"

#关闭redis连接
redisClose()

完成测试案例。

数据文件:data5.txt

wolys # wolysopen111 # [email protected]
coralshanshan # 601601601 # [email protected]
pengfeihuchao # woaidami # [email protected]
simulategirl # @#$9608125 # [email protected]
daisypp # 12345678 # [email protected]
sirenxing424 # tfiloveyou # [email protected]
raininglxy # 1901061139 # [email protected]
leochenlei # leichenlei # [email protected]
z370433835 # lkp145566 # [email protected]
cxx0409 # 12345678 # [email protected]
xldq_l # 061222ll # [email protected]
时间: 2024-11-11 08:43:49

R语言与Redis的联合使用的相关文章

基于redis和R语言构建并行计算平台(yiyou)

最近研究gearman时发现不少问题,关于队列持久化的问题搞了半个月还是没能解决,并且国内可以参考的资料太少,所以考虑换一种方案试试.如下贴出gearman集群的架构: 可以看到该架构存在的问题,当持久化不起作用时,只能通过多台JobServer同时运行的方式保证集群的正常运作.另外client和worker这间的数据传输需要通过JobServer,不能一步到位.这个在数据量大时不能突显优势. 本人搞R语言有些时间了,并且该语言近几年比较火,用于统计.分析.建模.可视化,效率很高.为了承接前期研

R语言基因组数据分析可能会用到的data.table函数整理

R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部处理的步骤进行了程序上的优化,使用多线程,甚至很多函数是使用C写的,大大加快数据运行速度.因此,在对大数据处理上,使用data.table无疑具有极高的效率.这里主要介绍在基因组数据分析中可能会用到的函数. fread 做基因组数据分析时,常常需要读入处理大文件,这个时候我们就可以舍弃read.ta

R语言学习笔记

參考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R -- Notes on R: A Programming Environment for Data Analysis and Graphics,2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html 前言:关于R 在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data

R 语言爬虫 之 cnblog博文爬取

Cnbolg Crawl a). 加载用到的R包 ##library packages needed in this case library(proto) library(gsubfn) ## Warning in doTryCatch(return(expr), name, parentenv, handler): 无法载入共享目标对象‘/Library/Frameworks/R.framework/Resources/modules//R_X11.so’:: ## dlopen(/Libr

机器学习 视频教程 数据挖掘 实战 开发 应用 算法 案例 R语言

视频资料都逐个核对,清晰高质量,而且包含各种文档.软件安装包和源码!永久免费更新! 技术团队永久免费解答各种技术问题:Hadoop.Redis.Memcached.MongoDB.Spark.Storm.云计算.R语言.机器学习.Nginx.Linux.MySQL.Java EE..NET.PHP,节省您的时间! 获取视频资料和技术支持地址 ------------------------------------------------------------------------------

R语言统计分析应用与SAS、SPSS的比较

能够用来做统计分析的软件和程序很多,目前应用比较广泛的包括:SPSS, SAS.R语言,Matlab,S-PLUS,S-Miner等.下面我们来看一下各应用的特点: SPSS: 最简单的,都是菜单操作,不过不利于二次程序开发. SAS: 需要购买,该软件录入语言要非常精确,不能出错,难操作. R语言:免费软件,可以菜单操作,不过一般要编程的,二次程序开发. Matlab:基本是程序操作,和R语言差不多,不过功能比较强大. S-PLUS: 需要购买,基本也是菜单操作,和SPSS差不多. R与SPS

R语言空间分析功能简介

大家知道,R语言的软件包都是各领域专家贡献而来,通过一个统一的开放的语言环境神奇地组装到了一起,然后开始产生化学反应,为大数据分析立下汗马功劳. R中已经有一个Spatial软件包.通过library(sp)即可加载,如果提示没有安装,使用install.packages("sp")进行安装即可,安装过程中需要选择一个软件分发站的镜像. 然后使用getClass("Spatial")即可查看类的信息.返回信息如下: > getClass("Spati

R语言并行化基础与提高

本文将介绍R中的并行计算,并给出了一些常见的陷进以及避免它们的小技巧. 使用并行计算的原因就是因为程序运行时间太长.大部分程序都是可以并行化的,它们大部分都是Embarrassingly parallel.这里介绍几种可以并行化的方法: Bootstrapping 交叉验证(Cross-validation) (Multivariate Imputation by Chained Equations ,MICE)相关介绍:R语言中的缺失值处理 拟合多元回归方程 学习lapply是关键 没有早点学

R语言数据分析系列之九 - 逻辑回归

R语言数据分析系列之九 -- by comaple.zhang 本节将一下逻辑回归和R语言实现,逻辑回归(LR,LogisticRegression)其实属于广义回归模型,根据因变量的类型和服从的分布可以分为,普通多元线性回归模型,和逻辑回归,逻辑回归是指因变量是离散并且取值范围为{0,1}两类,如果离散变量取值是多项即变为 multi-class classification,所以LR模型是一个二分类模型,可以用来做CTR预测等.那么我们现在来引出逻辑回归如何做二分类问题. 问题引入 在多元线