摘要:在Redis 6.0中,非常受关注的第一个新特性就是多线程。这是因为,Redis一直被大家熟知的就是它的单线程架构,虽然有些命令操作可以用后台线程或子进程执行(比如数据删除、快照生成、AOF重写)。但是,从网络IO处理到实际的读写命令处理,都是由单个线程完成的。 随着网络硬件的性能提升,Redis的
阅读全文
摘要:我曾遇到过这么一个需求:要用Redis保存5000万个键值对,每个键值对大约是512B,为了能快速部署并对外提供服务,我们采用云主机来运行Redis实例,那么,该如何选择云主机的内存容量呢? 我粗略地计算了一下,这些键值对所占的内存空间大约是25GB(5000万*512B)。 所以,当时,我想到的第
阅读全文
摘要:在主从库模式下,如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,进行相关的操作,但是如果主库发生故障了,那就直接会影响到从库的同步,因为从库没有相应的主库,可以进行数据复制操作了。 而且,如果客户端发送的都是读操作请求,那还可以由从库继续提供服务,这在纯读的业务场景下还能被接受。但是,一
阅读全文
摘要:之前没有了解过 Redis中 RDB 和 AOF 的小伙伴,点这里先了解下 RDB 和 AOF 如果 Redis 发生了宕机,它们可以分别通过回放日志和重新读入 RDB 文件的方式恢复数据,从而保证尽量少丢失数据提升可靠性。不过,即使用了这两种方法,也依然存在服务不可用的问题。 比如说,我们在实际使
阅读全文
摘要:通常来说,单线程的处理能力要比多线程差很多,但是Redis却能使用单线程模型,达到每秒数十万级别的处理能力,这是为什么呢? 其实,这是Redis多方面设计选择的一个综合结果。一方面,Redis的大部分操作在内存上完成,再加上它采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。另
阅读全文
摘要:分享一个曾经使用Redis时遇到的需求以及解决方案 当时,要开发一个图片存储系统,要求这个系统能快速地记录图片ID,和图片在存储系统中保存时的ID(可以直接叫作图片存储对象ID)。同时,还要能够根据图片ID快速查找到图片存储对象ID。 因为图片数量巨大,所以我们就用10位数来表示图片ID和图片存储对
阅读全文
摘要:Redis已经设置了过期时间也就是TTL,那么键过期了不就是已经删除了吗?为什么还存在淘汰策略呢? 这要从Redis的过期策略来聊起 过期策略分为两种 一个是定时删除 还有一个是惰性删除 先来看下定时删除,就是Redis会将每个设置了过期时间的key,放入到一个独立的字典中,然后会定期遍历这个字典来
阅读全文
摘要:Redis 持久化 Redis绝大部分情况都是当做缓存来使用,因为它把后端数据库中的数据存储在内存中,再直接从内存中读取数据,响应速度会非常快 但是有一个不可忽略的问题,一旦服务器宕机,内存中的数据将会全部丢失 我们很容易想到的解决方案是,从后端数据库恢复这些数据,但是这种方式存在两个问题 一个是,
阅读全文
摘要:这里我们采用的集群整体架构就是主从结构+哨兵(sentinel),实现容灾的自动切换,如下图所示: 一个主节点(master)可拥有多个从节点(slave),从节点实现对主节点的复制,保证数据同步。 而哨兵(sentinel)则对各节点进行监控,主要包括主节点存活检测、主从运行情况检测等,一旦主节点
阅读全文
摘要:首先创建集群目录 [root@localhost local]# mkdir /usr/local/redis/cluster 要创建6个实例,在这个文件夹中再创建6个文件夹,进入集群目录 可以看到已经创建成功了,后面多了个data目录,这个目录是放数据的,一会讲配置文件的时候在具体的细说 [roo
阅读全文
摘要:主从复制 在官网下载 redis.conf 配置文件,修改以下内容 修改配置文件 master 节点配置 port 6379 # IP绑定,注释此行 # bind 127.0.0.1 pidfile /var/run/redis_6379.pid logfile "/data/redis.log"
阅读全文