Redis(https://redis.io/),既不像 SQLite 以表的形式存储数据,也不像 MongoDB 允许
以嵌套结构存储和查询,它是一种内存数据库结构,即将数据缓存在内存中。它将键—值
(key-value)缓存于内存中,以此获得极高的键值检索性能。然而,它并不支持 SQL 数据
库或 MongoDB 中所使用的查询语句。

Redis 通常被用作高速缓冲存储器。我们可以用它存储和操作一系列基本的数据结构。
安装 Redis,请访问 https://redis.io/download。 遗憾的是,官方版本不支持 Windows 操作系
统,但 Microsoft Open Tech 小组仍开发并维护着一种 Win64 接口的 Redis,详情请访
问 https://github.com/MSOpenTech/redis。
SQL 数据库存储表格、MongoDB 存储文档,而 Redis 存储键—值对,如下所示:
name: Something
type: 1
grade: A
该值不是简单数值,它可以具有更复杂的数据结构(例如,哈希映射、集合、有序集合)。
Redis 提供了一个处理这些数据结构的简单界面,并且同时具有高性能和低延迟的优点。
1.用 R 访问 Redis
用 R 访问 Redis 实例,需要使用 rredis 扩展包,它提供了一些操作 Redis 的简单函
数。运行下列代码安装此扩展包:
install.packages("rredis")
一旦扩展包准备就绪,我们就可连接至 Redis 实例:
library(rredis)
redisConnect( )
在不设置参数的情况下,默认连接至本地 Redis 实例,也可以连接至远程实例。
2.设置 Redis 服务器和获取数据
Redis 最基本的用法就是调用 redisSet(key, value)。在 R 中,这个值默认序列
化,因此我们可以在 Redis 中存储所有 R 对象:
redisSet("num1", 100)
## [1] "OK"
现在,该命令生效了,我们可以取出该键中的值:
redisGet("num1")
## [1] 100
也可以存储一个整数向量:
redisSet("vec1", 1:5)
## [1] "OK"
redisGet("vec1")
## [1] 1 2 3 4 5
甚至可以存储一个数据框:
redisSet("mtcars_head", head(mtcars, 3))
## [1] "OK"
redisGet("mtcars_head")
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
实际上,如果其他计算机有权限访问你的 Redis 实例,他们在 R 中使用 redisGet( )
会得到相同的数据。
然而,如果这个键根本不存在,我们只能得到 NULL:
redisGet("something")
## NULL
可以用 redisExists( ) 检验某个键是否存在,而不是得到 NULL:
redisExists("something")
## [1] FALSE
redisExists("num1")
## [1] TRUE
如果不再用到某个键,可以用 redisDelete( ) 删除它:
redisDelete("num1")
## [1] "1"
## attr(,"redis string value")
## [1] TRUE
redisExists("num1")
## [1] FALSE
除了普通的键—值对,Redis 也支持一些更高级的数据结构。例如,我们可以
用 redisHset( ) 对水果创建一个哈希映射,其中不同水果的数量不同:
redisHSet("fruits", "apple", 5)
## [1] "0"
## attr(,"redis string value")
## [1] TRUE
redisHSet("fruits", "pear", 2)
## [1] "0"
## attr(,"redis string value")
## [1] TRUE
redisHSet("fruits", "banana", 9)
## [1] "0"
## attr(,"redis string value")
## [1] TRUE
调用 redisHGet( ) 获取哈希映射中某个字段的值:
redisHGet("fruits", "banana")
## [1] 9
也可以得到这个哈希映射结构的列表表示:
redisHGetAll("fruits")
## $apple
## [1] 5
##
## $pear
## [1] 2
##
## $banana
## [1] 9
此外,还可以得到哈希映射的键:
redisHKeys("fruits")
## [[1]]
## [1] "apple"
## attr(,"redis string value")
## [1] TRUE
##
## [[2]]
## [1] "pear"
## attr(,"redis string value")
## [1] TRUE
##
## [[3]]
## [1] "banana"
## attr(,"redis string value")
## [1] TRUE
也可以只取出哈希映射中的所有值(不包括键):
redisHVals("fruits")
## [[1]]
## [1] 5
##
## [[2]]
## [1] 2
##
## [[3]]
## [1] 9
获取哈希映射中的字段数量:
redisHLen("fruits")
## [1] "3"
## attr(,"redis string value")
## [1] TRUE
一次性取出多个字段的值:
redisHMGet("fruits", c("apple", "banana"))
## $apple
## [1] 5
##
## $banana
## [1] 9
通过提供一个列表来设置多个字段的值:
redisHMSet("fruits", list(apple = 4, pear = 1))
## [1] "OK"
现在,字段中的值被更改了:
redisHGetAll("fruits")
## $apple
## [1] 4
##
## $pear
## [1] 1
##
## $banana
## [1] 9
除了哈希映射,Redis 也支持队列。我们可以从队列的左端或右端推送(push)值。例
如,从右端依次输入整数 1、2、3:
for (qi in 1:3) {
redisRPush("queue", qi)
}
调用 redisLLen( ) 获取当前队列的长度:
redisLLen("queue")
## [1] "3"
## attr(,"redis string value")
## [1] TRUE
现在,这个队列有 3 个元素。值得注意的是,这里的值是一个字符向量,而不是一个
整数。因此,如果在其他地方需要使用数值形式,就必须进行转换。
然后,我们可以保持队列的值一直从左端弹出(pop):
redisLPop("queue")
## [1] 1
redisLPop("queue")
## [1] 2
redisLPop("queue")
## [1] 3
redisLPop("queue")
## NULL
注意,队列中只有 3 个元素可供取出,所以第 4 次试图提取的动作返回了 NULL,这
可以用来检查队列当前是否为空。
最后,应关闭 Redis 连接,释放占用的资源。
redisClose()
Redis 具有更高级的特性,但超出了本章的范围。它不仅支持数据结构的存储,还可用
于消息代理,也就是说,我们可以利用它在不同程序间传送消息。更多高级用法,请访问
官方文档 http://redis.io/documentation。

使用 Redis的更多相关文章

  1. 使用redis构建可靠分布式锁

    关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...

  2. Ignite性能测试以及对redis的对比

    测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...

  3. mac osx 安装redis扩展

    1 php -v查看php版本 2 brew search php|grep redis 搜索对应的redis   ps:如果没有brew 就根据http://brew.sh安装 3 brew ins ...

  4. Redis/HBase/Tair比较

    KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式    支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...

  5. Redis数据库

    Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...

  6. redis 学习笔记(2)

    redis-cluster 简介 redis-cluster是一个分布式.容错的redis实现,redis-cluster通过将各个单独的redis实例通过特定的协议连接到一起实现了分布式.集群化的目 ...

  7. redis 学习笔记(1)

    redis持久化 snapshot数据快照(rdb) 这是一种定时将redis内存中的数据写入磁盘文件的一种方案,这样保留这一时刻redis中的数据镜像,用于意外回滚.redis的snapshot的格 ...

  8. python+uwsgi导致redis无法长链接引起性能下降问题记录

    今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...

  9. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  10. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

随机推荐

  1. wampserver3 集成环境 启动Apache失败

    前提:安装完成后,原先是能够启动服务,但是按照网上教程修改conf文件后就不能启动Apache, 方法: 1.查看Apache错误日志(无奈的是看不懂) 2.在cmd命令行中查看,(打开cmd,输入: ...

  2. vue视频: 自定义指令 && 拖拽 && 自定义键盘信息

    v-textv-forv-html 指令: 扩展html语法 自定义指令:1. 自定义属性指令: Vue.directive(指令名称,function(参数){ this.el -> 原生DO ...

  3. 170719、springboot编程之异步调用@Async

    1.在pom.xml中增加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  4. Oracle下Update语句

    Update更新 格式: update table _name(表名) set col_name(列名) =expr(表达式) where  conti(条件) 案例1: update 语法可以用新值 ...

  5. CH5E02 花店橱窗【线性DP】

    5E02 花店橱窗 0x5E「动态规划」练习 背景 xq和他的老婆xz最近开了一家花店,他们准备把店里最好看的花都摆在橱窗里.但是他们有很多花瓶,每个花瓶都具有各自的特点,因此,当各个花瓶中放入不同的 ...

  6. android 第三方框架

    1.视频:jcvideoplayer 2.圆角:cardview 3.圆形头像:circleimageview 4.加载网络图片:universalimageloader 5.网络请求:xutils ...

  7. Mybatis 创建Configuration对象

    Mybatis  创建Configuration对象是在项目启动时就创建了. 具体创建流程为: https://blog.csdn.net/wolfcode_cn/article/details/80 ...

  8. SVN Checkout 不包括源文件夹根目录

    SVN Checkout 不包括源文件夹根目录,比如我要checkout   trunk/ 下面的所有文件,但是不包括trunk 文件夹 我们可以在svn文件夹后面打个空格,在加个“.”就行了 eg: ...

  9. Linux下编译安装Nginx1.12

    [准备工作] 所有操作需要在root用户下 本机测试案例系统信息:centos7.3 安装路径:/usr/local/nginx [安装Nginx] 先安装如下依赖包 $ yum install gc ...

  10. Spark中ml和mllib的区别

    转载自:https://vimsky.com/article/3403.html Spark中ml和mllib的主要区别和联系如下: ml和mllib都是Spark中的机器学习库,目前常用的机器学习功 ...