文章目录
Redis是一种key-value内存数据库,在众多的业务场景中,都会使用redis。其中一个核心的原因就是redis很快,那为什么Redis这么快呢?Redis设计的核心是什么?这里来探讨一下。
string(字符串)
hash(哈希)
list:有序的字符串序列
set: 集合
zset
不允许重复的元素出现在一个Set
Redis是纯内存的,读写速度非常快
避免了硬盘 I/O 速度的限制
单线程操作, 节省了上下文切换线程的时间
采用了非阻塞I/O多路复用机制
Redis全程使用hash结构,读取速度快,数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);数据操作简单,不同场景使用不同数据类型。
Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程。
缓存在同一时间内大量键过期(失效),瞬间请求瞬间都落在了数据库中导致连接异常。
防止策略:
使用缓存经常会出现缓存和数据库的数据不一致的问题:如果项目是强一致性,不建议缓存;使用缓存针对是经常访问,不经常改变的数据。需要考虑的问题:刷新缓存、缓存过期时间、缓存获取失败、多级缓存等。
maxmemory
来指定其最大能使用的内存容量。volatile-lru
: 最近最少使用算法,从设置了过期时间的键中选择空转时间最长的键值对清除掉volatile-lfu
: 最近最不经常使用算法,从设置了过期时间的键中选择某段时间之内使用频次最小的键值对清除掉volatile-ttl
: 从设置了过期时间的键中选择过期时间最早的键值对清除volatile-random
: 从设置了过期时间的键中,随机选择键进行清除allkeys-lru
: 最近最少使用算法,从所有的键中选择空转时间最长的键值对清除allkeys-lfu
: 最近最不经常使用算法,从所有的键中选择某段时间之内使用频次最少的键值对清除allkeys-random
: 所有的键中,随机选择键进行删除noeviction
: 不做任何的清理工作,在redis的内存超过限制之后,所有的写入操作都会返回错误;但是读操作都能正常的进行简单思想:
实现三个队列,商品队列,用户成功购买队列,用户等待队列
在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave)
从服务器对主服务器的同步操作需要通过向主服务器发送SYNC命令来完成,以下是SYNC命令的执行步骤:
Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。
以上就是Redis所包括的所有知识点,不管在实际的项目开发中,还是面试中这些都是要必须掌握的。