redis
文章平均质量分 72
牛八里昂
这个作者很懒,什么都没留下…
展开
-
redis 分布式锁
redis的分布式锁,可以按以下步骤进行完善1、使用redis.setnx(key,value)弊端:加锁后,后续业务代码发生异常,所以要加try{}catch{}finally{redis.delete(key)}2、第一种方法,如果加锁后,服务宕机,则finally执行不到该key就无法释放,所以要加过期时间使用redis.setnx(key,value,expire)3、第二种方法存在的问题现象:如果某一线程在加锁后的业务逻辑执行时间超过上锁时间;异常发生:就会导致第一个线原创 2021-12-27 22:10:53 · 421 阅读 · 0 评论 -
redis过期删除策略
Redis对于过期键有三种清除策略1、被动删除key到过期时间后,不会里面从内存中删除,而是等到下次这个key被查询的时候,通过判断是否过期来删除。缺点:如果key之后永不使用,就会造成内存泄漏。2、主动删除由于被动删除,无法删除一些冷数据,所以会触发主动删除,主动删除又包含:定时删除:在设置键的过期时间的同时,创建一个定时器( timer ). 让定时器在键的过期时间来临时,立即执行对键的删除操作。 定期删除: 每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删原创 2021-12-27 17:51:15 · 291 阅读 · 0 评论 -
Redis常见问题
一、缓存穿透现象:一些请求,在redis中没有缓存,同时数据库中也没有内容,导致redis和DB都没有查到数据,相当于这两层被请求打穿了。黑客会利用此漏洞,大量发送无效的请求,从而导致redis或db宕机。解决:接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截; 从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力原创 2021-12-27 17:39:29 · 775 阅读 · 0 评论 -
Redis中跳跃表浅析
一、前言 跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。 在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树要来得更为简单,所以有不少程序都使用跳跃表来代替平衡树。 Redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员(m...原创 2021-12-26 20:00:09 · 140 阅读 · 0 评论 -
redis集群三种架构模式
主从模式可以实现读写分离,数据备份。但是并不是「高可用」的哨兵模式可以看做是主从模式的「高可用」版本,其引入了Sentinel对整个Redis服务集群进行监控。但是由于只有一个主节点,因此仍然有写入瓶颈。Cluster模式不仅提供了高可用的手段,同时数据是分片保存在各个节点中的,可以支持高并发的写入与读取。当然实现也是其中最复杂的。原创 2021-12-25 20:29:24 · 874 阅读 · 0 评论 -
redis数据同步
salve节点启动同步数据slave断点续传原创 2021-12-24 22:50:37 · 238 阅读 · 0 评论 -
redis持久化
RDB在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。可以手动执行命令生成RDB快照,进入redis客户端执行命令save或bgsave可以生成dump.rdb文件Save是同步的,会阻塞bgSave是异步的Rdb缺陷:在执行rdb前,宕机会丢数据AOF修改配置文件来打开 AOF 功能:# appendonly yes原创 2021-12-24 22:48:21 · 341 阅读 · 0 评论 -
redis底层数据结构-List
列表对象有两种底层实现结构 压缩列表(zipList)实现的列表对象 压缩列表(zipList)是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值,如图压缩列表的每个节点Entry构成如下previous_entry_ength:以字节为单位,记录了压缩列表中前一个字节的长度。利用此原理即当前节点位...原创 2021-12-23 19:56:53 · 2632 阅读 · 0 评论 -
redis底层数据结构 -String
redis包含5种常用数据结构String 、List、Hash、Set 、ZsetString字符串不同的外在形式以set为例redis其实可以理解为 K-V数据库,因此对每个键值对都会有一个 dictEntry,里面存储了指向 Key 和 Value 的指针;next 指向下一个 dictEntry,与本 Key-Value 无关key可以看出 key不是直接存的字符串,而是一个SDS结构valuevalue既然不是存的String,也不...原创 2021-12-22 22:04:00 · 3558 阅读 · 0 评论 -
Redis MGET性能衰减分析
MGET是redis中较为常用的命令,用来批量获取给定key对应的value。因为redis使用基于RESP (REdis Serialization Protocol)协议的rpc接口,而redis本身的数据结构非常高效,因此在日常使用中,IO和协议解析是个不容忽略的资源消耗。通过mget将多个get请求汇聚成一条命令,可以大大降低网络、rpc协议解析的开销,从而大幅提升缓存效率。mget的定义如下(来自REDIS命令参考):MGET key [key ...]返回所有(一个或多个)给定 ke转载 2021-07-16 22:44:11 · 3608 阅读 · 0 评论