redis
文章平均质量分 87
redis是一个key-value存储系统。Redis是基于内存的操作,极高性能的NoSql的数据库;
CodingAnHour
明日复明日,明日何其多。我生待明日,万事成蹉跎。
展开
-
Redis 缓存回收的7种策略volatile设置过期时间及allkeys所有数据范围内
8 种数据淘汰策略:它们分别是noeviction、volatile-random、volatile-ttl、volatile-lru、volatile-lfu、allkeys-lru、allkeys-random 和 allkeys-lfu 策略。LRU 策略更加关注数据的时效性,而 LFU 策略更加关注数据的访问频次。当缓存污染不严重时,只有少量数据占据缓存空间,此时,对缓存系统的影响不大。如果这时数据占满了缓存空间,我们再往缓存中写入新数据时,原创 2022-10-16 15:17:16 · 2538 阅读 · 0 评论 -
Redis 先写数据库及先写缓存一致性问题
从图中可以看到,Tomcat 上运行的应用,无论是新增(Insert 操作)、修改(Update 操作)、还是删除(Delete 操作)数据 X,都会直接在数据库中增改删。当然,如果应用执行的是修改或删除操作,还会删除缓存的数据 X。如果是新增数据,数据会直接写到数据库中,不用对缓存做任何操作,此时,缓存中本身就没有新增据,而数据库中是最新值,此时,缓存和数据库的数据是一致的。如果发生删改操作,应用既要更新数据库,也要在缓存中删除数据。这两个操作如果无法保证原子性。假设线程 A 删除缓存值后,还没有来得及更原创 2022-10-16 14:19:53 · 968 阅读 · 0 评论 -
redis 缓存雪崩、穿透、击穿、脑裂问题
缓存雪崩是指大量的应用请求无法在 Redis 缓存中进行处理,紧接着,应用将大量请求发送到数据库层,导致数据库层的压力激增,造成存储层也可能会级联宕机的情况。一般来说,一个 Redis 实例可以支持数万级别的请求处理吞吐量,而单个数据库可能只能支持数千级别的请求处理吞吐量,它们两个的处理能力可能相差了近十倍。由于缓存雪崩,Redis 缓存失效,所以,数据库就可能要承受近十倍的请求压力,从而因为压力过大而崩溃。预防和解决缓存雪崩问题:保证缓存层服务高可用性,比如使用Redis Sentinel或Redis C原创 2022-06-08 23:22:12 · 1364 阅读 · 3 评论 -
reids 缓存与数据库数据不一致、缓存过期删除问题
假设线程 A 删除缓存值后,还没有来得及更新数据库(比如说有网络延迟),线程 B 就开始读取数据了,那么这个时候,线程 B 会发现缓存缺失,就只能去数据库读取。这会带来两个问题:解决方案:有一些公共数据修改的机会比较少,而读的机会却是非常多的,此公共数据的操作基本都是读,如果每次操作都给此段代码加锁,太浪费时间了而且也很浪费资源,降低程序的效率。因为读操作不会修改数据,只是做一些查询,所以在读的时候不用给此段代码加锁,可以共享的访问,只有涉及到写的时候,互斥的访问就行......原创 2022-06-07 23:43:54 · 583 阅读 · 0 评论 -
redis 分布式锁的几种实现方式
Jedis、RedisTemplate一般情况下分布式锁足够了;高并发情况下Redission锁的逻辑更加安全,采用lua脚本语言的方式一次性获取或释放锁原创 2022-06-06 19:05:48 · 636 阅读 · 0 评论 -
redis docker 搭建哨兵模式
哨兵是什么?sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。哨兵模式架构中,client端在首次访问Redis服务时,实际上访问的是哨兵(sentinel),sentinel会将自己监控Redis实例的master节点信息返回给client端,client后续就会直接访问Redis的master节点,并不是每次都从哨兵处获取master节点的信息。sentinel会实时监控所有的Redis实例是否可用,当监控到Redis的master节点发生故障后,会从剩余原创 2022-05-27 00:18:10 · 776 阅读 · 0 评论 -
redis docker搭建主从复制
docker run -p 6381:6379 --name redisMaster -v /home/tools/redis/masterSlave/master/redis.conf:/etc/redis/redis.conf -v /home/tools/redis/masterSlave/master/data:/data -d redis:6.0 redis-server /etc/redis/redis.confdocker run -p 6382:6379 --name redisSl.原创 2022-05-24 23:17:21 · 277 阅读 · 0 评论 -
redis 持久化AOF、RDB、混合持久化
为什么要持久化数据???Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失即使只考虑缓存场景,如果未持久化,redis一旦服务宕机,内存中的数据将全部丢失。虽然可以从后端数据库恢复这些数据,但这种方式存在两个问题:一是,需要频繁访问数据库把缓存加载回来,会给数据库带来巨大的压力;二是,这些数据是从慢速数据库中读取出来的,性能肯定比不上从 Redis 中读取,导致使用这些数据的应用程序响应变慢。所以,对 Redis 来说,实现数据的持久化,避免从后端数据库中进行恢复,是至关重要的。Red原创 2022-05-24 17:01:56 · 1299 阅读 · 4 评论 -
reids 数据类型String(字符串)、 List ( 列表)、 Hash ( 哈希)、 Set ( 集合)、 zset(有序集合)
为什么redis能以微秒级别的速度找到对应key的value呢?redis所有操作都在内存上完成的,内存的访问速度是非常快的高效的数据结构1、redis的数据结构redis底层数据结构一共有 6 种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。1.1、简单动态字符串(simple dynamic string ,SDS)在Redis内部, 任何包含字符串的键值对都是由SDS(是可以修改的字符串)实现的。SDS的实现方式采用预分配冗余空间的方式来减少内存分配。内部结构实现原创 2022-05-21 22:39:27 · 701 阅读 · 0 评论