一. redis介绍
redis是一个key-value类型的内存数据库,整个数据库加载在内存中进行操作,定期通过异步操作把数据flush到硬盘上保存。
redis是纯内存操作,性能出色,每秒可处理超10万次读写操作。而且支持多种数据结构。
redis的缺点是受物理内存限制,不能作海量数据高性能读写。
redis官网地址:https://redis.io
二. redis存储结构
1.string
string是redis的基础数据类型,redis没有int、float、boolean等数据结构,所有基本类型在redis中都以string体现。
- SET Key Value [EX seconds] [PX milliseconds] [NX|XX]
EX/PX:设置key有效期
NX:key不存在时set
XX:key存在时set - GET Key
key不存在,返回nil - GETSET Key Value
为key设置新value,并返回原value - MSET Key Value [Key value]
批量设置,并覆盖旧值 - MGET Key [Key]
返回一个包含所有给定key的值的列表 - INCR Key
将key中的value值自增1,返回自增后的值
若key不存在,value会初始化为0,再INCR
若类型错误,返回错误 - INCRBY Key increment
将key中的value值增加increment
2.List
redis的List是链表型数据结构,可以在List两端插入删除元素
-
LPUSH Key Value [value]
将value从左到右依次插入到表头 -
RPUSH Key Value [value]
将value从左到右依次插入到表尾 -
LPOP Key
移除并返回左侧头部第一个元素 -
RPOP Key
移除并返回右侧尾部第一个元素 -
LRANGE Key start stop
返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定
start和stop下标从0开始 -
LINDEX Key index
返回指定index下标的元素 -
LSET Key index value
将key下标为index的元素设置为value -
LINSERT Key BEFORE|AFTER pivot value
将新value插入指定pivot值前或后,返回列表长度
3.Hash
哈希表,是一种field-value型数据结构,和传统hash一样。
- HSET key field value
将哈希表key中的域field值设为value - HGET key field
返回哈希表key中指定域field的值 - HMSET Key field value [field value]
同时将多个域值对设置到哈希表key中 - HMGET Key field [field]
返回哈希表key中多个给定域的值 - HDEL key field [field]
删除哈希表key中多个指定域 - HINCRBY key field increment
为哈希表 key 中的域 field 的值加上增量 increment - HGETALL key
返回哈希表key所有域值对 - HKEYS key
返回哈希表key所有域 - HVALS key
返回哈希表key所有值
4.Set
redis Set是无序,不可重复的string集合
- SADD key member [member]
将多个member加入集合key中 - SREM key member [member]
移除集合key中的多个member元素 - SCARD key
返回集合key的member数量 - SMOVE source destination member
将member从source集合移动到destination集合 - SMEMBERS key
返回集合key中所有member
5.Sorted Set
Sorted Set是有序的、不可重复的string集合。Sorted
Set中每个元素都需要指派一个分数score,根据score进行排序。
- ZADD key score member [score member]
将多个member元素及score值加入到有序集key中 - ZREM key member [member]
移除有序集key中成员 - ZCOUNT key min max
返回score在min和max之间的成员数量 - ZCARD key
返回有序集key中成员数量 - ZSCORE key member
返回有序集key中成员member的score值 - ZRANK key member
返回有序集key中member的score排名,从小到大
ZREVRANK从大到小 - ZINCRBY key increment member
有序集key的成员member的score增加increment - ZRANGE key start stop [WITHSCORES]
返回指定排名区间内的成员,按从小到大排序
ZREVRANGE从大到小 - ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
返回score值介于min和max之间的成员,从小到大
ZREVRANGEBYSCORE从大到小 - ZREMRANGEBYRANK key start stop
移除指定排名区间的所有成员
ZREMRANGEBYSCORE指定score范围
三.Redis持久化
有两种持久化方式,RDB(Redis DataBase) 和AOF(Append Only File)。
RDB是将redis某一时刻存储的数据生成快照并存储到磁盘上。首先会将数据写入到一个临时文件中,等持久化过程结束后,用临时文件替换上次持久化好的文件。对于RDB,redis会单独创建一个子进程来进行持久化。若对数据恢复的完整性不是非常敏感,新快照生成期间的数据可忽略时,可使用RDB。dump.rdb
AOF是将执行过的所有写指令记录下来,在数据恢复时重新执行所有指令。每当有写操作,redis指令会被追加到AOF文件末尾。若AOF文件过大,会提供重写机制,将AOF内容压缩。redis-check-aof
–fix命令可以修复损坏的AOF文件。appendonly.aof
AOF相比RDB生成的文件大,修复速度慢,但恢复数据完整度更高。
四.Redis主从同步
master主 slave从
主redis数据和从redis数据保持同步。主服务器宕机,从服务器继续提供服务。
redis2.8之前,slave建立和master的连接,发送sync命令。master将产生RDB快照,生成快照期间的写命令也会被缓存起来,然后将RDB文件发送给slave。salve将RDB文件保存到磁盘,加载到内存。master将缓存命令转发给slave执行。
redis2.8之后,slave建立和master的连接,发送psync命令。master在内存缓冲区中存储将要发送的内容。slave与master断开重连时,会把master服务器Id和请求偏移位置offset发送出去。master匹配到id后会检查offset是否在缓冲区,在的话就向slave发送增量内容。
五.Redis集群
redis3.0后支持redis cluster。
redis cluster采取虚拟槽分区,所有的key根据哈希函数CRC16[key]&16383映射到0-16383槽内,每个redis节点维护部分槽。集群节点需要slave以保证高可用。
cluster slots 返回槽和节点的映射关系 cluster keyslot key 返回key分配到的槽位置