使用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
数据类型及操作
操作:不管什么类型数据存储,都有一个名字。比如字符串:set name1 12; hset mapName1 key1 value1等。没名字怎么获取呢对不白
字符串:C语言中的char[],结束\0。操作:增删改 exist length判断。
1. 如果value是整数,可以递增,递减操作(incr,decr )
2. 向尾部追加(append)
3. 命令类似:set get del strlen
Hash:
字符值只能是string,结构如下,操作:可以用“键 字段名称” 来对值进行操作(类似String)
1. 命令在string类型命令前面添加:h,如:hset hget hdel hexists hincrinby
List类型:有序双向链表
操作:双向列表的操作,添加(左边添加lpush,右边添加rpush);弹出(获取并删除的意思,左边弹出lpop,右边弹出rpop) 获取一定区间下标元素(lrange list1 0 2) ; 长度(string命令的基础上加l,llen);
SET类型:没有重复数据,无序
命令:在string命令基础上加了s,如:sadd。增加,删除,所有元素,判断元素存在不,元素个数,随机弹出一个数据
集合操作:集合操作如:差集,并集,交集。 如一个url访问需要的权限和一个人有的权限做交集,如果交集有值说明,有权限,否则没有权限。
Sorted Set类型:在Set基础上给每个元素增加一个权重,并根据这个权重排序
同List区别:
1. List 两头操作快,比较长后中间的查起来需要废点时间,SortedSet 操作哪都一样
2. SortedSet更废内存,且比较容易调整顺序,设置不同分数就行。List 则只是排序不清楚具体位置
3. 都是有序的,且可以获取一定区间内的数据
时间设定
EXPIRE key seconds 设置key的生存时间(单位:秒)key在多少秒后会自动删除
TTL key 查看key生于的生存时间
PERSIST key 清除生存时间
PEXPIRE key milliseconds 生存时间设置单位为:毫秒
持久化
1. redis数据都在内存中存储,问题:宕机怎么办。
2. 持久化,然后重启的时候加载(大概时间:1G需要30s时间),问题:什么时候持久化
3. 两种持久化方式,A:AOF(append only file)在redis中插入一条,就持久化一条。 B:RDB,默认方式,满足一定条件后(时间维度,修改条数)进行持久化。
4. AOF当然可靠,效率低喽。RDB可能会损失一次的数据。 可以一种或者两种结合使用。问题:无论咋样 该机器磁盘损坏就没法恢复了
5. 主从,设置一个或者多个从slave机器,可以从主master中每次全部,或者增量复制。问题:这样数据是丢不了了,但master宕机后服务可能中断,或者应付不了那么多请求
6. 集群cluster,三台以上,如果半数master宕机,或者有master没有从slave(这个可以设置) 整个集群就不可用了。问题:这么多机器怎么分工存储呢
7. 根据对key使用hash算法crc16然后对 16384 求余数,当然16384每个数字对于一个槽位,每台master分这些槽位。
8. 如果不小心删除有槽位的master怎么办? 回答: 删除不了,除非宕机。
9. 如果新添加一个主master咋办?回答:重新分配reshard槽位,可以手动分配,也可以自动分配。