![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 80
java&ly
在路上
展开
-
Redis解决缓存雪崩和缓存穿透
缓存穿透,一般是访问的数据在缓存和数据库中都不存在。原创 2022-09-20 16:09:53 · 1873 阅读 · 0 评论 -
Redis缓存Key过期原理和内存淘汰策略
Redis通过(Redis字典通过哈希表来实现)来存储键的过期时间,字典的键是指向RedisDb的指针(使用指针可以避免浪费),字典的值是一个毫秒的时间戳,所以当前时间大于字典值的时候这个键就过期了,就可以对这个键进行删除(删除一个键不仅要删除redisDb数据库中的键,也要删除过期字典中的键)。通过pexpireat命令来设置过期时间的命令,其他命令最终也会转换成pexpireat。给一个键设置过期时间,就是将这个键的指针及给定的到期时间戳加到过期字典中。原创 2022-09-15 22:14:14 · 590 阅读 · 0 评论 -
Redis解决数据一致性方案
先更新数据库,再删除缓存;先删除缓存,再更新数据库;目标就是通过重试机制来解决后删除缓存失败的情况,直到删除成功。无论是重试还是异步删除,都是最终一致性的思想。我们在使用Redis缓存时,优先选择先更新数据库,再删除缓存并且同步设置key的过期时间。在一些对数据一致性要求比较强的业务中,适当的借助MQ或者Canel来做重试。原创 2022-09-15 13:55:14 · 2730 阅读 · 0 评论 -
Redis存储结构之zskiplist
zskiplist是一个有序的集合,为了解决其他链表的插入、删除效率低、查询元素需要循环遍历等缺点,redis就采用了一个特殊的数据结构zskiplist(跳跃表)。它在性能上跟红黑树差不多, 同时又比红黑树的实现简单。在插入、删除、查询等操作上的时间复杂度为o(logn)。原创 2022-09-13 14:40:41 · 326 阅读 · 0 评论 -
Redis数据类型-zSet基本使用
- 有序且不可重复的集合- 每个元素都会关联一个 double 类型的分数。正是通过分数来为集合中的成员进行从小到大的排序 - 类似Java中的数据结构Map,其中Double类型就是给每个value元素赋予一个score(权重)- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)- 一个集合可以存储 2 ^ 32 - 1 个元素(4,294,967,295);原创 2022-09-09 10:24:56 · 1380 阅读 · 0 评论 -
Redis数据类型-List-基本使用
list存储有序且可重复的集合;一个集合可以存储 2 ^ 32 - 1 个元素(4,294,967,295);由于List是一个连表结构,从头部或者尾部新增、删除贼快所以时间复杂度为,中间相对慢一点因为要先找到中间某个元素。查询需要从头开始查所以相对较慢(快速列表,详细介绍:https://blog.csdn.net/u011077966/article/details/126769333)原创 2022-09-08 17:56:25 · 432 阅读 · 0 评论 -
Redis存储结构之QuickList
快速列表(quicklist)是以压缩列表(ziplist)为节点的链表(linkedlist),将链表按段切分,每一段使用压缩列表进行内存的连续存储,多个压缩列表通过prev和next指针组成的双向链表。它结合了压缩列表和链表的优势,进一步压缩了内存的使用量,进一步提高了效率。原创 2022-09-08 17:52:38 · 308 阅读 · 0 评论 -
Redis数据类型-String-基本使用和原理
Redis是由C语言编写,在C语言中没有String的类型,所以用自定义的数据类型SDS(simple dynamic string),并将SDS作为Redis的字符串表示。SDS在旧版本中使用方式跟新版本不同,如果你看到如下描述都是旧版本:根据不同的长度的字符串定义了不同的结构,分别为:sdshdr5、sdshdr8、sdshdr16、sdshdr32、sdshdr64说明:redis在做初始化时,如果长度小于3的使用sdshdr5,小于2^8的长度使用sdshdr8,以此类推原理:数据在进行扩容的时候原创 2022-09-07 13:45:25 · 210 阅读 · 0 评论 -
Redis存储结构之dictht字典
属性是个数组, 数组的每个元素都是个指向dictEntry结构的指针。每个dictEntry都保存着一个键值对, 以及一个指向另一个dictEntry属性指向另一个dictEntry结构, 多个dictEntry可以通过next指针串连成链表, 从这里可以看出,dictht使用链式寻址法来解决hash冲突: 当多个不同的键拥有相同的哈希值时,哈希表用一个链表将这些键连接起来。原创 2022-09-06 13:45:19 · 494 阅读 · 0 评论 -
Redis存储结构之ziplist
ziplist是为了尽可能的节省存储空间,将数据进行紧凑的存储修改操作耗费性能:ziplist在内存中是高度紧凑的连续存储,这意味着它对修改并不友好,如果要对ziplist做修改类的操作,那就需重新分配新的内存来存储新的ziplist,代价很大添加和删除 ziplist 节点有可能会引起连锁更新,因此,添加和删除操作的最坏复杂度为 O(N^2),不过,因为连锁更新的出现概率并不高,所以一般可以将添加和删除操作的复杂度视为 O(N)。原创 2022-09-06 13:42:49 · 733 阅读 · 0 评论 -
Redis数据类型-Hash-基本使用
为哈希表 中的域 的值加上增量 。增量也可以为负数,相当于对给定域进行减法操作。如果 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果域 不存在,那么在执行命令前,域的值被初始化为 。对一个储存字符串值的域 执行 HINCRBY 命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。如果哈希表中没有域 ,那么 HINCRBYFLOAT 会先将域 的值设为 ,然后再执行加法操作。如果键 不存在,那么HINCRBYFLOAT 会先创建一个哈希表,再创建原创 2022-09-06 13:37:37 · 1784 阅读 · 0 评论 -
Redis数据类型-Hash-基本使用
为哈希表 中的域 的值加上增量 。增量也可以为负数,相当于对给定域进行减法操作。如果 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果域 不存在,那么在执行命令前,域的值被初始化为 。对一个储存字符串值的域 执行 HINCRBY 命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。如果哈希表中没有域 ,那么 HINCRBYFLOAT 会先将域 的值设为 ,然后再执行加法操作。如果键 不存在,那么HINCRBYFLOAT 会先创建一个哈希表,再创建原创 2022-09-05 15:24:33 · 714 阅读 · 0 评论 -
Redis数据类型-Set-基本使用
没有获取到交集元素时,注意:若指定集合destKey存在,它的值将会被覆盖。key与otherKeys没有获取到差值,destKey如果存在,会被删除。key与otherKey没有获取到差值,destKey如果存在,会被删除。destKey存在,它原本集合中的所有值会被清空并且替换为获取的差值。destKey存在,它原本集合中的所有值会被清空并且替换为获取的差值。例如:总计10个数,指定11个,最多返回10个。1、个数不受集合中已有数量限制。destKey不存在,直接新增。destKey不存在,直接新增。原创 2022-09-05 13:33:24 · 722 阅读 · 0 评论 -
Redis数据类型-Set-原理
intset的核心是一个字节数组,按照从小到大存放着set元素encoding:每个元素的编码方式,编码方式指定了一个整数元素占用多少个contents数组位int16_t 2个字节,16位的整数,范围相当于java 的 short 类型int32_t 4个字节,32位的整数,范围相当于java 的 int 类型int64_t 8个字节,64位的整数,范围相当于java 的 Long 类型length:元素数量contents:存储具体的元素,元素按照从小到大排序原创 2022-09-05 11:47:02 · 819 阅读 · 0 评论 -
Redis-集群
复制(master、slave)配置过程修改11.140和11.141的redis.conf文件,增加slaveof masterip masterportslaveof 192.168.11.138 6379实现原理 slave第一次或者重连到master上以后,会向master发送一个SYNC的命令 master收到SYNC的时候,会做两件事 a) 执行bgs...原创 2019-07-23 10:20:43 · 143 阅读 · 0 评论 -
Redis-持久化机制
RDBRDB的持久化策略: 按照规则定时间内从的数据同步到磁盘 snapshotredis在指定的情况下会触发快照 自己配置的快照规则 save <seconds> <changes> save 900 1 当在900秒内被更改的key的数量大于1的时候,就执行快照 save 300 10 save 60 10000 save或者bg...原创 2019-07-23 10:19:26 · 158 阅读 · 0 评论 -
Redis-安装部署
redis安装安装 下载安装包 redis-xxx.tar.gz tar -zxvf redis-xxx.tar.gz cd redis-xxx/ 进入解压后的redis目录下执行make 可以通过make test 测试编译状态 mkdir redis make install [prefix=/path]完成安装 make insta...原创 2019-07-23 10:18:17 · 144 阅读 · 0 评论 -
Redis-简介
存储结构 字符类型 散列类型 列表类型 集合类型 有序类型 功能 可以为每个key设置超时时间; 可以通过列表类型来实现分布式队列的操作; 支持发布订阅的消息模式; redis的应用场景 数据缓存(商品数据、新闻、热点数据); 单点登录; 秒杀、抢购; 网站访问排名... ...原创 2019-07-23 10:17:21 · 125 阅读 · 0 评论