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. jvm原理之内存机制

    转自:https://www.cnblogs.com/dreamowneryong/p/6381633.html JVM栈由堆.方法区,栈.本地方法栈.程序计数器等部分组成,结构图如下所示: 还有一张 ...

  2. 微信小程序 --- page.js文件

    page.js文件是写当前 page.wxml 页面的 JS 脚本文件: 示例: //获取应用实例 const app = getApp() Page({ data: { navComOneOnOff ...

  3. T-SQL数据库备份

    /*1.--得到数据库的文件目录 @dbname 指定要取得目录的数据库名 如果指定的数据不存在,返回安装SQL时设置的默认数据目录 如果指定NULL,则返回默认的SQL备份目录名 */ /*--调用 ...

  4. linux 下创建虚拟环境 python

    virtualenv是一个可以在同一计算机中隔离多个python版本的工具.有时,两个不同的项目可能需要不同版本的python,如 python2.7 / python3.6 ,但是如果都装到一起,经 ...

  5. 【Linux学习 】Linux使用Script命令来记录并回放终端会话

    一背景 二script命令简介 1 什么script命令 2 script命令操作 21 file选项 22 options选项 23 退出script 三Script命令结合实际使用场景 1 先在终 ...

  6. 解决MySQL报错:1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'informat

    解决MySQL报错:1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'informat ...

  7. blockchain 区块链的开发,基于python或node js

    现在很多人用node js做区块链的开发,因为点对点并发是区块链中的难点技术之一,而node js天然的对并发支持比较好,因此比较有优势. http://ecomunsing.com/build-yo ...

  8. (转)SpringBoot非官方教程 | 第三篇:SpringBoot用JdbcTemplates访问Mysql

    本文介绍springboot通过jdbc访问关系型MySQL,通过spring的JdbcTemplate去访问. 准备工作 jdk 1.8 maven 3.0 idea mysql 初始化mysql: ...

  9. (2)R中的数据类型和数据结构

    R中的数据结构主要面向<线性代数>中的一些概念,如向量.矩阵等.值得注意的是,R中其实没有简单数据(数值型.逻辑型.字符型等),对于简单类型会自动看做长度为1的向量.比如: > b= ...

  10. Visual Studio Code常用设置

    Visual Studio Code常用设置 • 自动保存设置 ▶ 文件(F) -> 首选项(P) -> 用户设置(U) ▶ 将"files.autoSave": &q ...