Redis 实战
《红丸出品》 http://weibo.com/u/2446082491
第一章 Redis 快速入门 7
1.1 Key-Value 存储系统简介 ................................................................................................ 7
1.1.1 Voldemort ................................................................................................................. 8
1.1.2 Dynamo .................................................................................................................... 8
1.1.3 memcachedb ............................................................................................................ 9
1.1.4 Cassandra ................................................................................................................. 9
1.1.5 memcached ............................................................................................................ 10
1.1.6 Hypertable .............................................................................................................. 10
1.2 为什么选择 Key-Value Store ....................................................................................... 11
1.2.1 大规模的互联网应用 ........................................................................................... 11
1.2.2 云存储 ................................................................................................................... 11
1.2.3 Redis 实际应用案例 .............................................................................................. 12
1.3 初识 Redis .................................................................................................................... 14
1.3.1 数据类型 ............................................................................................................... 14
1.3.2 持久化 ................................................................................................................... 14
1.3.3 主从同步 ............................................................................................................... 14
1.3.4 性能 ....................................................................................................................... 15
1.3.5 提供 API 的语言 .................................................................................................... 15
1.3.6 适用场合 ............................................................................................................... 15
1.4 快速入门 ...................................................................................................................... 17
1.4.1 安装 Redis ............................................................................................................. 17
1.4.2 配置 Redis ............................................................................................................. 18
1.4.3 操作数据库 ........................................................................................................... 21
第二章 Redis 数据类型及操作 ............................................................................................. 22
2.1 前言 .............................................................................................................................. 22
2.2
strings 类型及操作 .................................................................................................. 23
2.2.1 set ........................................................................................................................... 23
2.2.2 setnx ....................................................................................................................... 23
2.2.3 setex ....................................................................................................................... 24
2.2.4 setrange .................................................................................................................. 24
2 / 71
《红丸出品》 http://weibo.com/u/2446082491
2.2.5 mset ........................................................................................................................ 24
2.2.6 msetnx .................................................................................................................... 25
2.2.7 get ........................................................................................................................... 25
2.2.8 getset ...................................................................................................................... 25
2.2.9 getrange.................................................................................................................. 26
2.2.10 mget ...................................................................................................................... 26
2.2.11 incr ........................................................................................................................ 27
2.2.12 incrby .................................................................................................................... 27
2.2.13 decr ....................................................................................................................... 27
2.2.14 decrby ................................................................................................................... 27
2.2.15 append .................................................................................................................. 28
2.2.16 strlen ..................................................................................................................... 28
2.3
hashes 类型及操作 .................................................................................................. 29
2.3.1 hset ......................................................................................................................... 29
2.3.2 hsetnx ..................................................................................................................... 29
2.3.3 hmset ...................................................................................................................... 29
2.3.4 hget ......................................................................................................................... 30
2.3.5 hmget...................................................................................................................... 30
2.3.6 hincrby .................................................................................................................... 30
2.3.7 hexists ..................................................................................................................... 30
2.3.8 hlen ......................................................................................................................... 31
2.3.9 hdel ......................................................................................................................... 31
2.3.10 hkeys ..................................................................................................................... 31
2.3.11 hvals ...................................................................................................................... 31
2.3.12 hgetall ................................................................................................................... 32
2.4
lists 类型及操作 ...................................................................................................... 32
2.4.1 lpush ....................................................................................................................... 32
2.4.2 rpush ....................................................................................................................... 33
2.4.3 linsert ...................................................................................................................... 33
2.4.4 lset .......................................................................................................................... 33
3 / 71
《红丸出品》 http://weibo.com/u/2446082491
2.5.5 lrem......................................................................................................................... 34
2.4.6 ltrim ........................................................................................................................ 35
2.4.7 lpop ......................................................................................................................... 36
2.4.8 rpop ........................................................................................................................ 36
2.4.9 rpoplpush ................................................................................................................ 36
2.4.10 lindex .................................................................................................................... 37
2.4.11 llen ........................................................................................................................ 37
2.5
sets 类型及操作 ...................................................................................................... 37
2.5.1 sadd ........................................................................................................................ 37
2.5.2 srem ........................................................................................................................ 38
2.5.3 spop ........................................................................................................................ 38
2.5.4 sdiff ......................................................................................................................... 39
2.5.5 sdiffstore ................................................................................................................. 39
2.5.6 sinter ....................................................................................................................... 40
2.5.7 sinterstore .............................................................................................................. 40
2.5.8 sunion ..................................................................................................................... 40
2.5.9 sunionstore ............................................................................................................. 41
2.5.10 smove ................................................................................................................... 41
2.5.11 scard ..................................................................................................................... 42
2.5.12 sismember ............................................................................................................ 42
2.5.13 srandmember ....................................................................................................... 42
2.6
sorted sets 类型及操作 ........................................................................................... 42
2.6.1 zadd ........................................................................................................................ 43
2.6.2 zrem ........................................................................................................................ 43
2.6.3 zincrby .................................................................................................................... 44
2.6.4 zrank ....................................................................................................................... 44
2.6.5 zrevrank .................................................................................................................. 44
2.6.6 zrevrange ................................................................................................................ 45
2.6.7 zrangebyscore......................................................................................................... 45
2.6.8 zcount ..................................................................................................................... 46
4 / 71
《红丸出品》 http://weibo.com/u/2446082491
2.6.9 zcard ....................................................................................................................... 46
2.6.10 zscore .................................................................................................................... 46
2.6.11 zremrangebyrank ................................................................................................. 47
2.6.12 zremrangebyscore ................................................................................................ 47
第三章、Redis 常用命令 ....................................................................................................... 48
3.1 键值相关命令 .......................................................................................................... 48
3.1.1 keys ......................................................................................................................... 48
3.1.2 exists ....................................................................................................................... 49
3.1.3 del ........................................................................................................................... 49
3.1.4 expire ...................................................................................................................... 49
3.1.5 move ....................................................................................................................... 50
3.1.6 persist ..................................................................................................................... 50
3.1.7 randomkey .............................................................................................................. 51
3.1.8 rename ................................................................................................................... 51
3.1.9 type ......................................................................................................................... 51
3.2 服务器相关命令 ........................................................................................................... 52
3.2.1 ping ......................................................................................................................... 52
3.2.2 echo ........................................................................................................................ 52
3.2.3 select....................................................................................................................... 52
3.2.4 quit .......................................................................................................................... 52
3.2.5 dbsize ...................................................................................................................... 53
3.2.6 info .......................................................................................................................... 53
3.2.7 monitor ................................................................................................................... 53
3.2.8 config get ................................................................................................................ 53
3.2.9 flushdb .................................................................................................................... 54
3.2.10 flushall .................................................................................................................. 54
第四章 Redis 高级实用特性 ................................................................................................. 54
4.1 安全性 .......................................................................................................................... 54
4.2 主从复制 ...................................................................................................................... 55
4.2.1 redis 主从复制特点: .............................................................................................. 55
5 / 71
《红丸出品》 http://weibo.com/u/2446082491
4.2.2 redis 主从复制过程: .............................................................................................. 55
4.2.3 如何配置 ............................................................................................................... 56
4.3 事务控制 ...................................................................................................................... 58
4.3.1 简单事务控制 ....................................................................................................... 58
4.3.2 如何取消一个事务 ............................................................................................... 58
4.3.3 乐观锁复杂事务控制 ........................................................................................... 59
4.4 持久化机制 .................................................................................................................. 61
4.4.1 snapshotting 方式 .................................................................................................. 61
4.4.2 aof 方式 .................................................................................................................. 63
4.5 发布及订阅消息 ........................................................................................................... 66
4.6 Pipeline 批量发送请求 ................................................................................................. 67
4.7 虚拟内存的使用 .......................................................................................................... 70
6 / 71
《红丸出品》 http://weibo.com/u/2446082491
第一章 Redis 快速入门
Redis 是一个 Key-Value 存储系统。和 Memcached 类似,它支持存储的 value 类型相对更多,
包括 string(字符串)、list(链表)、set(集合)和 zset(有序集合)。这些数据类型都支持 push/pop、
add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础
上,Redis 支持各种不同方式的排序。与 memcached 一样,为了保证效率,数据都是缓存在
内存中。区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录
文件,并且在此基础上实现了 master-slave(主从)同步。
1.1 Key-Value 存储系统简介
Key-Value Store 是当下比较流行的话题,尤其在构建诸如搜索引擎、IM、P2P、游戏服务器、
SNS 等大型互联网应用以及提供云计算服务的时候,怎样保证系统在海量数据环境下的高性
能、高可靠性、高扩展性、高可用性、低成本成为所有系统架构们挖苦心思考虑的重点,而
怎样解决数据库服务器的性能瓶颈是最大的挑战。
按照分布式领域的 CAP 理论(Consistency、 Availability、Tolerance to network Partitions 这三
部分在任何系统架构实现时只可能同时满足其中二点,没法三者兼顾)来衡量,传统的关系
数据库的 ACID 只满足了 Consistency、Availability,因此在 Partition tolerance 上就很难做得好。
另外传统 的关系数据库处理海量 数据、分布式架构时候 在 Performance、 Scalability 、
Availability 等方面也存在很大的局限性。
而 Key-Value Store 更加注重对海量数据存取的性能、分布式、扩展性支持上,并不需要传统
关系数据库的一些特征,例如:Schema、事务、完整 SQL 查询支持等等,因此在分布式环
境下的性能相对于传统的关系数据库有较大的提升。
Key-Value 数据库分为很多种类,具体如下图:
7 / 71
《红丸出品》 http://weibo.com/u/2446082491
这些 Key-Value 数据库,有的是用 C/C++编写的,有的是用 Java 编写的,还有的是用 Erlang
编写的,每个都有自己的独到之处,我们从中挑选一些比较有特色且应用广泛的产品学习和
了解一下。
1.1.1 Voldemort
Voldemort 是一个分布式 Key/Value 存储系统,它具有以下特点:
数据自动在多个服务器之间复制;
数据自动分区,因此每个服务器只包括整体数据的一个子集;
服务器故障处理是透明的;
支持插入式序列化,允许丰富的 Key 和 Value 类型,包括列表和元组,也可以集成常见
的序列化框架,如 Protocol Buffers,Thrift,Avro 和 Java Serialization
数据项支持版本化,即使在故障情况下,数据完整性也可以得到保障;
每个节点都是独立的,无需其他节点协调,因此也没有中央节点;
单节点性能优秀:根据机器配置、网络、磁盘系统和数据复制因素的不同,每秒可以执
行 10-20k 操作;
支持地理分散式部署。
1.1.2 Dynamo
Dynamo 是亚马逊的 key-value 模式的存储平台,可用性和扩展性都很好,性能也不错:读写
访问中 99.9%的响应时间都在 300ms 内。
8 / 71