您的位置:首页 > 数据库 > Redis

redis深入了解(一)

2018-03-27 20:50 597 查看
redis的常见问题:1.redis是内存版数据库,如果内存满了怎么办?
方案一.. redis集群1)一定程度可以解决内存不够用的情况

2)但是随着网站用户不断增多,用户所产生的数据将会愈来愈多,3)服务器越多,并不代表性能越高方案二。内存淘汰策略----最近不使用的数据从内存淘汰redis.conf 配置内存淘汰策略1)maxmemory 0 //表示淘汰所有内存2)maxmenory-poliy allkeys-lru//有限移除最近不使用的key

2.redis是否是线程安全的数据库 redis 是线程安全  Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案,是线程安全的。  Redis三个主要特点:       Redis是一个单线程数据库(单通道)  Redis数据库完全在内存中,使用磁盘仅用于持久性。  相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。  Redis可以将数据复制到任意数量的从服务器。3.redis的hash槽,你是怎么理解的?(redis如何存储的)redis共有16384个hash槽,时固定的不能改变,无论集群节点多少。hash槽将会动态的分配给每个服务器hash槽存满了怎么办?注意:hash槽不是用来存储数据的,时用来计算该把数据存储在哪个服务器里。相当于仓库的门,

4.redis缓存穿透,缓存击穿,缓存雪崩?
设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。

缓存穿透

缓存穿透是指查询一个在缓存和数据库中不存在的数据,问题:这个数据库访问量瞬间增大,数据库可能发生io阻塞,雪崩。解决:如果发现数据库没有数据,放一个空字符,并且设置过期时间

解决方案

有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

缓存击穿

缓存中有个key过期了,恰好此时这个key面临一个高并发查询,此时缓存中没有数据,并发压力瞬间被转移到数据库,造成数据库雪崩。。

解决方案

redis缓存之前加锁进行控制,当第一次访问没有值,查询数据库放入

缓存雪崩

缓存中很多key同时过期,恰好此时这些key面临高并发查询,发现缓存中数据消失,这些并发压力将会瞬间转移给数据库,数据库面临非常高的并发压力,发送雪崩。

解决方案

让缓存的key不同时过期,让redis过期时间5分钟时间+随机数时间 过期
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: