1 redis 数据结构
key定义注意点:
- 1不宜过长(不宜超过1024字节) 原因:过长key 会消耗内存和降低查找效率
- 2.不宜过短 原因:不便于理解key作用,最好做到见名知意
- 3.统一命名规范
1.字符串(String)
- (1)字符串value最大容纳数据量是512M
- (2)二进制安全,储入和获取的数据相同 常用命令: set(设值) get(获取值) getset(先获取后设置) del(删除) incr(加数计数器) decr(减数计数器) 扩充命令:incrby decrby append(追加)
set 例子:set key value get 例子: get key getset 例子: getset key newValue del 例子: del key incr 例子:incy key
2.字符串列表(list)
ArrayList使用数组方式 LinkedList使用双向链接方式 双向链表中增加数据 双向链表中删除数据
常用命令:lpush(从首部插入) rpush(从尾部插入) lpop(从头部弹出) rpop(从尾部弹出) lset(通过索引修改value) lrange(查看list数据) llen(获取list数据长度) lrem(删除list里数据) linsert(在某个元素前或后面添加元素) 扩展命令:lpushx(判断key是否存在,如果存在,就从头部插入数据) rpushx(判断key是否存在,如果存在,就从尾部插入数据) rpoplpush(A list的尾部弹出,B list首部添加元素)
3.有序字符串集合(sorted set)
sorted-set的成员在集合中的位置是有序的 常用命令:zadd(添加元素) zscore(获取元素) zcard(查看集合元素) zrem(删除元素) zrange(查看元素排序)
zadd zadd set名称 分数 元素 例子:zadd myset 10 qi zscore zscore set名称 元素 例子:zscore myset qi
扩展命令:
4.哈希(hash)
常用命令: hset(设值) hget(获取值) hgetall(获取hash里面全部数值) hdel(删除) hincr(hash加数计数器) 命令 : hexists(判断hash是否存在) hlen(判断hash里面key的长度) hkeys(返回hash里面全部key) hvals(返回hash里面全部value)
5.字符串集合(set)
set集合中不允许出现重复的元素
set最大value数量4294967295
常用命令:sadd(添加元素) srem(删除元素) smembers(查看集合元素)
sismember(查看元素是否存在) scard(查看集合元素数量) sinert(查看集合间并集)
sdiff(两个集合间,第一个集合独有元素 ) sunion(把两个集合合并)
扩展命令: sdiffstore(把两个集合相差的元素存储到一个集合中) sintertstore(把两个集合的并集存放在一个集合中) sunionstore(把两个集合合并在起)
如何退出redis?
- 1.通过kill -9 redis 进程号
- 2.通过redis-cli进入客户端 shutdown命令
redis的value最大支持大小? redis的value最大支持512M内存.
redis过期策略
1.懒惰删除
原理:在客户端访问该key的时候,redis会对key做一个过期时间检查,如果过期,就立即删除并返回null给客户端
2.定期删除
原理:redis将所有设置过期时间的key放入一张字典里面,然后定期的随机抽取一些key做过期检查,如果key过期就删除。 redis默认每秒进行10次过期扫描 (1) 从过期字典中随机20个key (2)删除这20个key中过期的key (3)如果过期key的比例超过25%,重复第一步 同时为了保证不会出现循环过度的情况,redis还设置了扫描的时间上限,默认不会超过25ms
redis持久化rdb和aof
rdb原理:快照形式,把内存的状态直接保存在rdb中,保存策略是隔一段时间保存一次
rdb 两种方式:
- 1 修改配置文件,生产同步策略
- 2 使用命令 save flushall shutdown 等命令,都会rdb同步 aof原理: 命令行形式,执行一条命令,直接把命令存在aof文件中,保存策略是默认一秒保存一下命令,对数据安全性就好,性能就差点。
默认开启RDB,AOF是不开启
redis 事务
redis 通道
redis 内存淘汰策略
redis 主从复制原理
(1) 1.slave服务想master发送psycn命令,告诉master,我需要同步数据,master执行bgsava命令生成 RDB文件(内存快照), 2.master就把RDB文件发给slave,slave载入RDB文件,就完成全量同步 3.mater会把所有写命令放在缓冲区内,告诉slave,可以进行同步了, 4.slave执行写命令
断开连接后处理 slave把同步命令偏移量发给master,如果偏移量还在缓存区内,就同步执行偏移量后的命令,达到数据一致性 如果偏移量不在缓存区内,slave 就向master发送psycn命令,执行全量同步操作
redis哨兵原理
redis 集群的3种模式 1.主从 缺点:master节点发生故障,需要人工干预
2.哨兵 哨兵模式主要通过哨兵向master发送心跳检测,如果mater不回复心跳,哨兵就会主动认为master下线,就会重新选择最合适的 slave成为master
缺点: (1)单节点写,性能的瓶颈就在master节点的写。 (2)value值为复制副本,所以就限制了redis的可用大小 3.集群 整个集群库会变成哈希槽,client端向任意一个节点写入数据,通过hash运算,看看key是否是写入当前节点的哈希槽,如果是就直接执行写操作,如果不是,就向客户端(client)返回写入失败,并返回可以的节点位置和 哈希槽,客户端重新向返回的节点写入数据
工作中问题 1.redis内存不够用 redis动态增加内存,使用config set maxmemory . xxxxx
注意:本文归作者所有,未经作者允许,不得转载