# Redis

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言 (opens new window)编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库 (opens new window),并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal (opens new window)赞助。

# 定义

redis是一个key-value存储系统 (opens new window)。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表 (opens new window))、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型 (opens new window)都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached (opens new window)这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 [1]

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

redis的官网地址,非常好记,是redis.io。(域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地),Vmware在资助着redis项目的开发和维护。

# 作者

redis [2] 的作者,叫Salvatore Sanfilippo,来自意大利的西西里岛,居住在卡塔尼亚。目前供职于Pivotal公司。他使用的网名是antirez。

# 性能

下面是官方的bench-mark数据: [1]

测试完成了50个并发执行100000个请求。

设置和获取的值是一个256字节字符串。

Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。

文本执行使用loopback接口(127.0.0.1)。

结果:读的速度是110000次/s,写的速度是81000次/s 。

# 支持语言

许多语言都包含Redis支持,包括: [1]

ActionScript (opens new window)C (opens new window)C++ (opens new window)C# (opens new window)Clojure (opens new window) Common Lisp (opens new window)Dart (opens new window)Erlang (opens new window)Go (opens new window)Haskell (opens new window) Haxe (opens new window)Io (opens new window)Java (opens new window)Node.js (opens new window)Lua (opens new window) Objective-C (opens new window)Perl (opens new window)PHP (opens new window)Pure DataPython (opens new window) R (opens new window)Ruby (opens new window)Scala (opens new window)Smalltalk (opens new window)Tcl (opens new window)

# 常用命令

就DB来说,Redis成绩已经很惊人了,且不说memcachedb (opens new window)和[Tokyo Cabinet](https://baike.baidu.com/item/Tokyo Cabinet)之流,就说原版的memcached,速度似乎也只能达到这个级别。Redis根本是使用内存存储 (opens new window),持久化的关键是这三条指令:SAVE BGSAVE LASTSAVE …

当接收到SAVE指令的时候,Redis就会dump数据到一个文件里面。

值得一说的是它的独家功能:存储列表和集合,这是它与mc之流相比更有竞争力的地方。

不介绍mc里面已经有的内容,只列出特殊的:

TYPE key — 用来获取某key的类型

KEYS pattern — 匹配所有符合模式的key,比如KEYS * 就列出所有的key了,当然,复杂度O(n)

RANDOMKEY - 返回随机的一个key

RENAME oldkeynewkey (opens new window)— key也可以改名

列表操作,精华

RPUSH key string — 将某个值加入到一个key列表末尾

LPUSH key string — 将某个值加入到一个key列表头部

LLEN key — 列表长度

LRANGE key start end — 返回列表中某个范围的值,相当于mysql里面的分页 (opens new window)查询那样

LTRIM key start end — 只保留列表中某个范围的值

LINDEX key index — 获取列表中特定索引号的值,要注意是O(n)复杂度

LSET key index value — 设置列表中某个位置的值

LPOP key

RPOP key — 和上面的LPOP一样,就是类似栈或队列的那种取头取尾指令,可以当成消息队列 (opens new window)来使用了

集合操作

SADD key member — 增加元素

SREM key member — 删除元素

SCARD key — 返回集合大小

SISMEMBER key member — 判断某个值是否在集合中

SINTER key1 key2 ... keyN — 获取多个集合的交集元素

SMEMBERS key — 列出集合的所有元素

还有Multiple DB的命令,可以更换db,数据可以隔离开,默认是存放在DB 0。

Last Updated: 1/12/2021, 6:01:21 PM