目录
5,master-slave 机制&Redis Sentinel
0,本文主要涉及
Redis简介,基础数据结构以及API,扩展功能(自动过期、pipeline和事务、Lua脚本支持,发布订阅等等),持久化配置以及分布式集群实现,使用经验整理
1,Redis简介
Redis(REmote DIctionary Server) 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API,可以看作是数据结构服务器( Data Structures Server)
Redis(集群)本质:一套分布式抽象结构化内存数据读写系统
Redis的特性:
高性能高并发,单机10wOPS
实现代码简洁,2万多行C语言实现,原生实现了IO多路复用
API客户端支持多种语言平台
多种数据结构,字符串值,列表,集合,哈希等等,详见第二小节
丰富扩展功能,自动过期、pipeline和事务、Lua脚本支持,发布订阅等,详见第三小节
支持数据持久化,支持主从复制,支持实现高可用、分布式,详见第四小节
使用场景:
缓存,分布式锁,分部式id生成器,消息队列等等
好友关系、自动补全、摇一摇、网址缩短器、唯一计数器、排行榜、登录会话记录等等
2,基础数据结构以及API
Redis最核心功能就是提供了这些基础数据结构以及相应的提供操作的API,这些API设计是都源自于每种数据结构最原生的操作逻辑。
1,字符串(String)
二进制安全,可以存储字符串,也可以存储数值,也可以是任意的二进制数据(byte[]),限定的最大长度(512M)
内部实现为简单动态字符串 sds (Simple Dynamic String),一种记录长度和字符数组的结构
详细API http://www.redis.cn/commands.html#string,常用的有:
最基础的获取和添加:get key,set key value(多种参数支持:XX 已存在则设置,NX不存在则设置,EX 设置过期时间单秒,PX设置过期时间时毫秒)
追加 APPEND key str123
获取并更新getset key1 1232
批量操作 mget key1 key2 ,mset key1 value1 key2 value2 ,msetnx key1 value1 key2 value2(都不存在则添加)
原子化的数值操作:incr, incrby,incrbyfloat,decr,decrby
2,列表(List)
列表类型 key elements 有序 可重复
内部通过quicklist实现,节点是ziplist(一种节省内存的双向链表结构)的双端列表结构。(数据较少时直接使用ziplist)
详细API http://www.redis.cn/commands.html#list,常用的有:
添加元素 从尾部rpush key value1 value2,从头插入lpush key value1 value2
删除元素 从头取出 lpop key 从尾取出 rpop key; 阻塞版:blpop或brpop key timeout
修剪 ltrim key start end(start 和 end 也可以用负数来表示与表尾的偏移量)
查询长度 llen key
索引查询元素 lindex key index
获取元素 lrange key start end
修改元素 lset key index newValue
移动元素 RPOPLPUSH mylist1 mylist2,阻塞版BRPOPLPUSHmylist1 mylist2
3,集合(Set)
集合类型 key values 无序 不重复 支持集合操作 最大可以包含(2的 32 次方-1)个元素
内部通过intset或dict实现,数据较少时intset
详细API http://www.redis.cn/commands.html#set,常用的有:
增加元素 sadd key element
删除元素 srem key element
查询集合大小 scard key
判断是否包含元素 SISMEMBER key member
随机获取count个元素srandmember key [count]
随机获取并删除count个元素 spop key [count]
集合操作sinter(交)sdiff(差) sunion(并)
4,有序集合(Sorted Set)
有序集合类型 key scores values 根据score有序 无重复
内部通过skiplist和dict实现,(数据较少时直接使用ziplist)
详细API http://www.redis.cn/commands.html#sorted_set,常用的有:
增加元素 zadd key score1 element1 score2 element2
删除元素 zrem key elements
删除分值排行一定范围的元素 zremrangebyrank key start end
删除一定分值范围元素 zremrangebyscore key minSxore maxScore
查询集合大小 zcard key
查询元素分值 zscore key element
增加元素分值 zincrby key increScore element
查询一定分值范围元素数量 zcount key minSxore maxScore
获取分值排行一定范围的元素 zrange key start end,倒序版 zrevrange
获取一定分值范围元素 zrangebyscore key minSxore maxScore
查询元素分值排名 zrank ,倒序版 zrevrank,一定分值范围版zrevrangebyscore
集合操作:zinterstore,zunionstore
5,散列(Hash)
哈希类型 key field value
内部通过dict实现,(数据较少时直接使用ziplist)
详细API http://www.redis.cn/commands.html#hash,常用的有:
添加获取