Redis
文章平均质量分 75
大将黄猿
一只业余爱好广泛的程序猿!
展开
-
LRU算法在Redis中的应用
LRU算法LRU(Least Recently Used),即最近最少使用,是一种缓存置换算法。在使用内存作为缓存的时候,缓存的大小一般是固定的。当缓存被占满,这个时候继续往缓存里面添加数据,就需要淘汰一部分老的数据,释放内存空间用来存储新的数据。这个时候就可以使用LRU算法了。其核心思想是:如果一个数据在最近一段时间没有被用到,那么将来被使用到的可能性也很小,所以就可以被淘汰掉。LRU在Redis中的实现Redis使用的是近似LRU算法,它跟常规的LRU算法还不太一样。近似LRU算法通过随机采原创 2021-06-07 10:49:26 · 685 阅读 · 0 评论 -
Redis双写一致性
先更新数据库,再更新缓存场景-不推荐当有两个线程A、B,同时对一条数据进行操作,一开始数据库和redis的数据都为1,当线程A去修改数据库,将1改为2,然后线程A在修改缓存中的数据,可能因为网络原因出现延迟,这个时候线程B,将数据修改成了3、然后将数据库中的1也改成了3,然后线程A恢复正常,将redis中的缓存改成了2,此时就出现了缓存数据和数据库数据不一致情况。不推荐先更新缓存,再更新数据库场景-不推荐当有两个线程A、B,同时对一条数据进行操作,线程A先将redis中的数据修改为了2,然后原创 2021-06-07 10:48:52 · 3211 阅读 · 0 评论 -
Redis主从,哨兵,集群
Redis主从哨兵与集群Redis主从关系主从存在的意义通过持久化功能,Redis保证了即使服务器重启的情况下也不会损失数据。因为持久化会将数据保存到硬盘中。重启时会从硬盘中加载数据。但假设服务器一直宕机下去,那是不是整个业务线程都无法继续进行了呢?为了避免单点故障,通常的做法是将数据库复制多个副本,部署在不同的服务器上。这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。为此,Redis提供了复制(replication)功能。可以实现当一台数据库中的数据更新后,自动将更新的数据原创 2021-06-07 10:50:29 · 430 阅读 · 0 评论 -
Redis如何保证持久化
持久化的话是Redis高可用中比较重要的一个环节,因为Redis数据在内存的特性,持久化必须得有,我了解到的持久化是有两种方式的。redis持久化的两种方式RDB:RDB 持久化机制,是对 Redis 中的数据执行周期性的全量持久化。 AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,因为这个模式是只追加的方式,所以没有任何磁盘寻址的开销,所以很快,有点像Mysql中的binlog。两种方式都可以把Redis内存中的数据持久化到磁盘上,然后再将这些原创 2021-06-07 10:47:39 · 326 阅读 · 0 评论 -
Redis的内存淘汰与key值过期策略
key值过期策略为什么Redis要设置key值过期策略Redis提供了过期策略,就是某个时刻Redis就会将某些key值清除。这个操作甚至导致了我们redis可能发生击穿与雪崩的后果。那么为什么redis一定要设置这种危险的策略呢?我们知道Redis是基于内存的非关系型数据库。既然基于内存,所以可知受到内存容量的限制,Redis中能够存储的数据量不会太大,所以可以为redis中的数据设置过期时间,到期后就可以按照设置的机制对这些过期的数据进行删除,从而腾出空间来存放接下来需要存储的新的数据。原创 2021-06-07 10:47:04 · 174 阅读 · 0 评论 -
Redis为什么这么快?
Redis快的原因多线程不一定都不比单线程快!多线程不一定都不比单线程快!多线程不一定都不比单线程快!重要的事情说三遍。这也就是为什么我们在配置线程池的时候,要尽量配置成CPU密集型的原因。(避免频繁的上下文切换)。我们知道,在从硬件的角度来看,CPU的速度>内存速度>硬盘速度。redis的操作都是基于内存的,绝大部分请求是纯粹的内存操作,非常迅速,使用单线程可以省去多线程时CPU上下文会切换的时间,也不用去考虑各种锁的问题,不存在加锁释放锁操作,没有死锁问题导致的性能消耗。因此,Red原创 2021-06-07 10:45:11 · 117 阅读 · 0 评论 -
秒懂redis五大常用指令
String类型是redis中最基本的数据类型,一个key对应一个value。String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。缓存功能经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。<span style="color:#595959"><span style="color:#595959原创 2021-06-04 11:11:42 · 1460 阅读 · 0 评论 -
Redis缓存穿透,缓存击穿,缓存血崩的解决方案
缓存正常的情况正常来说,如果我们一个需求是访问redis查询,那么如果redis中存在数据,则直接放回结果。假设 redis中不存在此结果,则从mysql数据库中获取数据并加载进redis,之后再直接对redis进行访问即可从缓存中获取数据。知道了正常的原理,我们来分析一下缓存穿透,缓存击穿,缓存雪崩的发生条件以及解决方案吧。缓存穿透(强调单个数据重复获取不到)缓存穿透的概念缓存穿透是指查询一个一不存在的数据。例如:从缓存redis没有命中,需要从mysql数据库查询。查不到数据则不写入原创 2021-06-05 00:32:04 · 355 阅读 · 0 评论