Redis的原理(一)

简介: Redis的原理(一)

一、Redis简介

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

二、redis有什么缺点

(一)缓存和数据库双写一致性问题:

比如在操作的过程中,向数据库和缓存中都插入,这时有可能导致数据不一致的问题,有可能缓存里面 有了,但是数据库中还没有。这里可以用弱一致性处理,可以做预热处理,也就是先把数据库的数据预热到缓存里去。

(二)缓存雪崩问题:

这里 的缓存雪崩和雪崩效应不一样,雪崩效应:如下图:可能服务与服务之间出现网络失联,或者网络抖动,由于服务一直连源不断的有请求过来。但是没有去直接给个返回已经失联了,然后其中一个服务会请求挤压,最终导致另一个服务的效率越来越低。

缓存雪崩:缓存中的key出现大面积的失效。而导致所有的请求去请求数据库做处理,从而导致数据库宕机。

解决方案:

a、给缓存的失效时间,加上一个随机值,避免集体失效,这样就不会导致大面积的失效。

随机数作为失效时间。

b、使用互斥锁,但是该方案吞吐量明显下降了。

c、双缓存:二级缓存。我们有两个缓存,缓存A和缓存B。缓存A的失效时间为20分钟,缓存B不设失效时间。自己做缓存预热操作。然后细分以下几个小点

I 从缓存A读数据,有则直接返回

II A没有数据,直接从B读数据,直接返回,并且异步启动一个更新线程。然后把从B中读的数据更新到A中去。

III 更新线程同时更新缓存A和缓存B。

(三)缓存击穿问题:

①、是有黑客惯用的手段,比如现在发送一个请求,比如请求到nginx服务器,然后反向代理到web服务器,在缓存中专门制造不存在的数据进行请求,不会在缓存中去找了,然后请求到数据库db,比如10万个请求直接,到DB,这时数据库就崩溃,称之为缓存击穿。

②、在缓存中存的少量数据的缓存时间失效了,就是key所对应的时间已经过期了。过期之后请求在缓存中找不到数据了,然后请求到数据库db,比如10万个请求直接到DB,这时数据库就崩溃,称之为缓存击穿。

解决办法:

a、利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试

b、采用异步更新策略,无论key是否取到值,都直接返回。value值中维护一个缓存失效时间,缓存如果过期,异步起一个线程去读数据库,更新缓存。需要做缓存预热(项目启动前,先加载缓存)操作。

c、提供一个能迅速判断请求是否有效的拦截机制,比如,利用布隆过滤器,内部维护一系列合法有效的key。迅速判断出,请求所携带的Key是否合法有效。如果不合法,则直接返回。就是白名单和黑名单的方式来做,不常见的ip地址纳入到黑名单里面去,现在谷歌工具集中已经有布隆过滤器了,由32位的位变量,矢量的方式来做的。这个布隆过滤器在大数据里面用的也很多。

(四)缓存的并发:竞争问题

相关文章
|
3月前
|
NoSQL Redis
Redis 执行 Lua保证原子性原理
Redis 执行 Lua 保证原子性原理
332 1
|
3月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
127 0
|
25天前
|
存储 NoSQL 定位技术
Redis geo原理
Redis的GEO功能基于Earth Mapper(http://earth-api.org/)库,它允许存储地理位置信息并执行一些基于该信息的操作。
25 3
|
2月前
|
缓存 NoSQL Linux
redis的原理(三)
redis的原理(三)
redis的原理(三)
|
1月前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
37 2
|
1月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
57 1
|
1月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
207 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
2月前
|
存储 缓存 NoSQL
redis的原理(四)
redis的原理(四)
|
2月前
|
存储 缓存 NoSQL
redis的原理(二)
redis的原理(二)
|
1月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
130 0