redis
文章平均质量分 75
巡了南山巡北山
这个作者很懒,什么都没留下…
展开
-
缓存穿透、缓存击穿、缓存雪崩
某一个热点 key,在缓存过期的一瞬间,同时有大量的请求打进来集中对这一个点进行访问,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞,造成瞬时数据库请求量大、压力骤增,甚至可能打垮数据库。该方式和缓存击穿一样,按 key 维度加锁,对于同一个 key,只允许一个线程去计算,其他线程原地阻塞等待第一个线程的计算结果,然后直接走缓存即可。布隆过滤器(推荐)。如果不进行预热, 那么 Redis 初始状态数据为空,系统上线初期,对于高并发的流量,都会访问到数据库中, 对数据库造成流量的压力。原创 2022-10-19 10:53:44 · 132 阅读 · 0 评论 -
使用redis实现简单的QPS限流
使用redis实现简单的QPS限流。原创 2022-10-19 10:51:30 · 698 阅读 · 0 评论 -
spring boot集成redis缓存
因为@Cacheable 是使用AOP 代理实现的 ,通过创建内部类来代理缓存方法,这样就会导致一个问题,类内部的方法调用类内部的缓存方法不会走代理(因为方法之间的调用直接使用的是原始对象this,而非代理对象,因而内部调用不会产生代理),不会走代理,就不能正常创建缓存,所以每次都需要去调用数据库。② 把方法A和方法B放到两个不同的类里面,例如:如果两个方法都在同一个service接口里,把方法B放到另一个service里面,这样在A方法里调B方法,就可以使用B方法的缓存。1、为什么缓存没有被正常创建?原创 2022-10-19 10:50:38 · 384 阅读 · 0 评论 -
Redis热key和大key问题
Redis 服务端收集:Redis 提供了 monitor 命令(也有现成的分析工具,比如redis-faina),可以统计出一段时间内的某 Redis 节点上的所有命令,分析热点 key,在高并发条件下,会存在内存暴涨和 Redis 性能的隐患,所以此种方法适合在短时间内使用;在redis数据库中有些访问量特别大的数据,比如热门商品信息、热门话题等,大量的请求去访问redis上的某个特定key,会造成流量过于集中,达到物理网卡或者内存上限,从而导致服务器宕机。数据分片,比如后面加序号,进行多实例的拆分。原创 2022-10-19 10:49:16 · 1540 阅读 · 0 评论 -
Redis数据结构_1.字典
redis字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。原创 2022-10-19 10:46:56 · 291 阅读 · 0 评论 -
Redis数据结构_对象
Redis用到的所有主要数据结构,简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合、跳跃表。Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,而每种对象又通过不同地编码映射到不同的底层数据结构。原创 2022-10-19 10:45:39 · 382 阅读 · 0 评论 -
Redis 与 MySQL 数据一致性问题
如果要保证强一致性,势必要引入分布式锁或实现其他分布式协议,不仅在实现上是有难度的,而且一定会对性能有影响。如果对数据的一致性要求这么高,那引入缓存就没有必要了。缓存系统适用的场景就是非强一致性的场景,所以它属于 CAP 中的 AP。如果T2线程在(1)处添加缓存,T1线程会在延时过后重新删除缓存,脏数据只会存在极短时间。Redis应用用在缓存场景时,能为数据库抵挡了高并发的流量请求,提高业务系统的性能。最佳实践是删除缓存,删除缓存操作简单,副作用只是增加了一次 chache miss。原创 2022-10-19 10:40:21 · 230 阅读 · 0 评论 -
使用Redis实现简单的分布式锁
redis的set命令可以将键key设置为指定的值,如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。当set命令执行成功之后,之前设置的过期时间都将失效。从2.6.12版本开始,redis为SET命令增加了一系列选项:EX seconds – 设置键key的过期时间,单位时秒PX milliseconds – 设置键key的过期时间,单位时毫秒NX – 只有键key不存在的时候才会设置key的值XX – 只有键key存在的时候才会设置key的值...原创 2021-11-17 14:30:27 · 951 阅读 · 0 评论 -
Redis过期策略和内存淘汰策略
Redis keys过期有两种方式:被动和主动方式。当客户端尝试访问过期keys时,会检查keys是否过期,过期则删除。但是有些过期的keys,客户端永远不会去访问他们。所以,应该定时随机检查keys的过期时间具体就是Redis每秒10次做的事情:随机检查20个keys的过期时间。 删除所有已经过期的keys。 如果有多于25%的keys过期,重复步奏1.不断重复过期检测,直到过期的keys的百分比低于25%,这意味着,在任何给定的时刻,最多会清除1/4的过期keys........原创 2021-11-20 10:46:45 · 163 阅读 · 0 评论 -
redis持久化
redis持久化redis提供了两种不同的持久化方式:RDB(redis database)和AOF(append only file)RDBRDB是redis默认采用支持持久化的方式,通过快照(snapshotting)实现持久化触发条件当满足一定条件时,RDB将对内存中的所有数据生成快照,并存放到硬盘中,默认存放在当前执行redis服务的根目录的dump.rdb中。1.配置文件RDB相关的配置通常在redis.conf中标识有SNAPSHOTTING注释的模块下,我们可以在该配置文件中设置原创 2021-11-30 14:11:25 · 730 阅读 · 0 评论 -
Redis数据结构_2.简单动态字符串SDS
Redis数据结构_简单动态字符串SDSRedis提供了一个逻辑上的对象系统构建了一个键值对数据库以供客户端用户使用。这个对象系统包括字符串对象,哈希对象,列表对象,集合对象,有序集合对象等。但是Redis面向内存并没有直接使用这些对象。而是使用了简单动态字符串,链表,字典(散列表),跳跃表,整数集合,压缩列表这些数据结构来操作内存。简单动态字符串SDSredis的底层使用C语言实现的,但在字符串方面确没有使用以空字符结尾的字符数组的C字符串,而是特别构建了一种叫简单动态字符串(simple dyna原创 2021-12-01 14:08:38 · 577 阅读 · 0 评论