一、Redis数据结构及应用场景
1.字符串string
键值对:key-value
字符串常用操作
SET key value //存入字符串键值对
MSET key value [key value …] //批量存储字符串键值对
SETNX key value //存入一个不存在的字符串键值对
GET key //获取一个字符串键值
MGET key [key …] //批量获取字符串键值
DEL key [key …] //删除一个键
EXPIRE key seconds //设置一个键的过期时间(秒)原子加减
INCR key //将key中储存的数字值加1
DECR key //将key中储存的数字值减1
INCRBY key increment //将key所储存的值加上increment
DECRBY key decrement //将key所储存的值减去decrement
2.哈希hash
对象缓存
HMSET user 1:name zhangsan 1:balance 1888
HMGET user 1:name 1:balance
HMSET food 1:apple 20 1:banana 18
优点
1)同类数据归类整合储存,方便数据管理
3.list集合
List常用操作
LPUSH key value [value …] //将一个或多个值value插入到key列表的表头(最左边)
RPUSH key value [value …] //将一个或多个值value插入到key列表的表尾(最右边)
LPOP key //移除并返回key列表的头元素
RPOP key //移除并返回key列表的尾元素
应用场景
队列、栈
4.set集合
Set常用操作
SADD key member [member …] //往集合key中存入元素,元素存在则忽略,若key不存在则新建
SREM key member [member …] //从集合key中删除元素
SMEMBERS key //获取集合key中所有元素
SCARD key //获取集合key的元素个数
集合算法
交集、差集、合集
应用场景
抽奖、微博、微信关注模型
5.有序集合Zset
ZSet常用操作
ZADD key score member [[score member]…] //往有序集合key中加入带分值元素
ZREM key member [member …] //从有序集合key中删除元素
ZSCORE key member //返回有序集合key中元素member的分值
ZINCRBY key increment member //为有序集合key中元素member的分值加上increment
ZCARD key //返回有序集合key中元素个数
ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素
ZREVRANGE key start stop [WITHSCORES] //倒序获取有序集合key从start下标到stop下标的元素
Zset集合操作
ZUNIONSTORE destkey numkeys key [key …] //并集计算
ZINTERSTORE destkey numkeys key [key …] //交集计算
二、Redis持久化
因为Redis是将数据保存在内存中,为了防止Redis宕机后,恢复数据,则需要对数据的持久化。
1.RDB快照
将Redis某个时刻的数据以二进制文件的形式进行保存。
在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。
而进行保存的方式又分为两种:
1.save
save的方式是由主线程来执行,所以会阻塞Redis的其他命令
2.bgsave
bgsave的方式是由主线程fork的子线程执行,因此不会阻塞Redis的其他命令
2.AOF
AOF持久化:将Redis上执行的每条修改数据的指令记录进文件appendonly.aof中,需要恢复数据时,按照文件中记录的命令执行一遍,就能恢复数据。
3.混合持久化
RDB快照持久化方式:因为是每段时间进行一次快照,因此会丢失部分数据
AOF持久化:会将Redis中数据的修改指令全部记录,再全部执行。导致记录文件大,恢复数据耗时长的缺点。
针对上面的问题,再Redis4.0提出了混合持久化方式。具体方案如下:
如果开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一 起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。 于是在 Redis 重启的时候,可以先加载 RDB 的内容,然后再重放增量 AOF 日志就可以完全替代之前的 AOF 全量文件重放,因此重启效率大幅得到提升。