![](https://img-blog.csdnimg.cn/20210207163622570.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Redis技术学习
文章平均质量分 79
实战+原理剖析,层层吃透Redis核心技术。
无绪听雨眠
做一个爱学习的程序员。
展开
-
Redis的消息队列解决方案
消息队列的消息存取需求是什么? Redis如何实现消息队列的需求?消息队列的消息存取需求在分布式系统中,当两个组件要基于消息队列通信时,一个组件会把要处理的数据以消息的形式传递给消息队列,然后这个组件就可以继续执行其他操作了;远端的另一个组件从消息队列中把消息读取出来,再在本地进行处理。假设组件1需要对采集到的数据进行求和计算,并写入数据库,但是,消息到达的速度很快,组件1没有办法及时地做采集,又做计算,并且写入数据库。所以,可以使用基于消息队列的通信,这样它就可以继续接受新的数据了。组件2则异原创 2021-03-16 10:43:48 · 341 阅读 · 1 评论 -
Redis保存时间序列
需要周期性的统计近万台设备的实时状态,包括设备ID、压力、温度、湿度以及对应的时间戳,这些与发生时间相关的数据,就成为时间序列数据。这些数据的特点是没有严格的关系模型,记录的信息可以表示成键和值的关系,所以并不需要关系型数据库来保存。Redis基于自身数据结构和扩展模块,提供了两种解决方案。在实际应用中,时间序列数据通常是持续高并发写入的,时间序列数据的写入通常是插入新数据,而不是更新已存在的数据。这种数据的写入特点很简单,就是插入数据快,这要求我们选择的数据类型,在进行数据插入时,时间复杂度要低,尽量原创 2021-03-12 17:25:24 · 882 阅读 · 0 评论 -
Redis的扩展数据类型
Redis的5大基本数据类型:String、List、Hash、Set和Sorted Set,它们可以满足大多数的数据存储需求,但是在面对海量数据统计时,它们的内存开销很大,而且对于一些特殊的场景,它们是无法支持的。所以Redis还提供了3种扩展数据类型,分别是Bitmap、HyperLogLog和GEO。GEO的实现原理和使用方法GEO是面向LBS(Location BasedServer)应用的GEO数据类型。在日常生活中,附近的餐馆、打车软件上叫车都离不开基于位置信息服务的应用。LBS应用访.原创 2021-03-05 17:11:10 · 525 阅读 · 3 评论 -
Redis数据类型的选择
在Web和移动应用的业务场景中,我们经常需要保存这样一种信息:一个key对应了一个数据集合。手机App中的每天的用户登录信息:一天对应一系列用户ID或移动设备ID; 电商网站上商品的用户评论列表:一个商品对应了一系列的评论; 用户在手机App上的签到打卡信息:一天对应一系列用户的签到记录; 应用网站上的网页访问信息:一个网页对应一系列的访问点击。Redis集合类型的特点就是一个键对应一系列的数据,所以非常适合用来存取这些数据。在这些场景中,除了记录信息,还需要对集合中的数据进行统计。在移动应原创 2021-03-04 15:26:40 · 578 阅读 · 1 评论 -
Redis中String类型的内存空间开销问题
案例:现需要开发一个图片存储系统,要求这个系统能快速记录图片ID和图片在存储系统中保存的ID,同时,还要能够更具图片ID快速查找到图片存储对象ID。因图片数量巨大,所以选用10位数来表示图片ID和土拍你存储对象ID。例如:photo_id: 1101000051photo_obj_id: 3301000051图片ID和图片存储对象ID正好一一对应,是典型的“键 - 单值”模式。所谓单值,就是指键值对中的值就是一个值,而不是一个集合,这和String类型提供的“一个键对应一个值的数据”的保存形式刚原创 2021-03-03 16:36:10 · 1017 阅读 · 0 评论 -
Redis的切片集群
要用Redis保存5000万个键值对,每个键值对大约512B,这些键值对所占的内存空间大约是25GB(5000万 * 512B)。需要选择一台32GB内存的云主机来部署Redis,因为32GB的内存可以保存所有数据,而且还留有7GB来保证系统运行。同时还需要采用RDB对数据做持久化,但是在使用过程中,Redis的响应有时会非常慢。使用INFO命令查看Redis的latest_fork_usec指标值(最近一次fork的耗时),结果显示这个指标值特别高,快到秒级别了。在使用RDB进行持久化时,Redi原创 2021-02-24 09:15:47 · 371 阅读 · 0 评论 -
Redis的哨兵集群
Redis的哨兵机制可以实现主从库的自动切换,通过部署多个哨兵实例,就形成了一个哨兵集群。哨兵集群中的多个实例共同判断,可以降低对主库下线的误判。一旦实例组成了哨兵集群,即使有哨兵实例出现故障挂掉了,其他哨兵还能继续完成主从库切换工作。在配置哨兵信息时,只需以下配置,设置主库IP和端口,并没有配置其他哨兵的连接信息。sentinel monitor <master-name> <ip> <redis-port> <quorum>这些哨...原创 2021-02-23 09:27:14 · 621 阅读 · 0 评论 -
Redis的哨兵机制
在主从集群模式下,如果从库发生故障,客户端可以继续向主库或其他从库发送请求,进行相关操作,但是如果主库发生故障,就会直接影响从库同步,如果客户端发送的是读操作,还可以由其他从库继续服务,但是一旦有写操作,就没有实例来服务客户端的写请求操作了。如果主库挂了,就需要运行一个新主库,比如把一个从库切换为主库。这就涉及到三个问题:主库真的挂了吗? 该选择哪个从库作为主库? 怎么把新主库的相关信息通知给从库和客户端?在Redis主从集群中,哨兵机制是实现主从库自动切换的关键机制。哨兵就是一个运行在特殊模原创 2021-02-20 11:57:03 · 175 阅读 · 1 评论 -
Redis主从库数据同步
Redis具有高可靠性,主要体现在两方面,一是数据尽量少丢失,而是服务尽量少中断。AOF和RDB保证了第一点,而第二点的实现,Redis采用增加副本冗余量的方式。Redis提供主从库模式来保证数据副本一致,主从库采用读写分离。读操作可以通过主库或从库,而写操作首先到主库执行,再由主库将写操作同步给从库。为什么要采用读写分离的方式呢?如果客户端对同一个数据进行多次修改,每次写操作都发送到不同的实例上,会导致实例副本数据不一致。这种情况下如果要做到数据一致,就会涉及到加锁、实例之间协商是否完成修改等原创 2021-02-19 22:22:19 · 431 阅读 · 0 评论 -
Redis数据持久化之RDB
Redis提供两种数据持久化方式,一种是AOF,一种是RDB。AOF是记录操作命令,不是实际数据,所以在进行故障恢复的时候,需要把操作日志执行一遍,如果日志非常多,Redis数据恢复就会变慢,影响正常使用。而RDB记录的是某一时刻的数据,并不是操作,内存快照既可以保证数据的可靠性,也能在Redis宕机时实现快速恢复数据。使用RDB需要考虑以下几个问题:对哪些数据进行快照?(执行效率) 做快照时,Redis还能提供正常服务吗?(是否阻塞主线程) 多久做一次快照?(性能开销)Redis的数据都存储原创 2021-02-18 10:53:01 · 253 阅读 · 0 评论 -
Redis数据持久化之AOF
把Redis当作缓存使用是Redis比较普遍的应用场景,因为Redis将数据存储在内存中,操作数据时响应速度非常快。但是如果Redis服务器一旦宕机,内存中的数据将全部丢失。如果我们通过从后端数据库恢复数据,则需要频繁访问数据库,给数据库带来巨大压力,并且直接从后端数据库读取数据,性能远远比不上Redis,从而导致使用这些数据的应用程序响应变慢。因此,Redis的数据持久化是非常重要的,目前Redis实现持久化的方式有两种,即AOF和RDB。传统数据库通常情况下使用写前日志,也就是在数据写入数据原创 2021-02-09 15:05:59 · 115 阅读 · 0 评论 -
Redis的高性能IO模型
Redis是单线程,主要是指Redis网络IO和键值对读写是由一个线程来完成的,这也是Redis对外提供键值对存储服务的主要流程。但Redis的其他功能,比如持久化、异步删除、集群数据同步等都是由额外的线程执行的。Redis为什么用单线程?多线程虽然可以增加系统吞吐率,但是多线程编程模式面临的共享资源的并发控制问题,系统吞吐率并没有随着线程的增加而增加; 多线程开发引入同步原语来保护共享资源的并发访问,会降低系统代码的易调试性和可维护性。单线程Redis为什么那么快?Redis的大部分操作在原创 2021-02-08 15:23:49 · 236 阅读 · 0 评论 -
Redis的数据结构与数据操作
Redis完成数据操作的速度能达到微妙级别,Redis能有这么突出的表现,主要原因有两个:Redis是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快; Redis拥有高效的数据类型和数据结构。为了实现key到value的快速访问,Redis使用哈希表来存储键值对,哈希桶中entry保存了指向实际key和value的指针,即使值是一个集合,也可以通过value指针查找到。当哈希表中数据越来越多后,会出现哈希冲突,也就是两个key的哈希值对应到同一个哈希桶中。Redis使用链式哈希来解原创 2021-02-07 15:27:31 · 2243 阅读 · 4 评论 -
键值数据库的基本架构
Redis是典型的键值数据库。设计一个键值数据库,需要考虑里面存什么样的数据,对数据可以做什么样的操作,也就是数据模型和操作接口,还得考虑键值对保存在内存还是外存,采用什么访问模式。键值数据库的数据模型是key-value模型,需要重点考虑的是value支持的类型。Redis得以广泛应用,因为Redis支持String、哈希表、列表、集合等多样化类型的value。数据库的操作接口无非就是CRUD:PUT / SET:增加或更新key-value; GET:使用key查询对应的value; S原创 2021-02-07 10:21:42 · 1816 阅读 · 2 评论 -
Redis概述
Redis是一个非常优秀的中间件系统,它在CPU使用、内存组织,存储持久化和网络通信这四大方面设计得非常经典。Redis是一种键值数据库,应用非常广泛。学习Redis,我们首先需要了解Redis的“两大维度,三大主线”。应用维度 缓存应用 集群应用 数据结构应用 系统维度 处理层 线程模型 主从复制 数据分片 内存层 数据结构 哨兵机制 存储层 AOF RDB 负载均衡 网络层 epoll网络框架 .原创 2021-02-06 22:58:13 · 156 阅读 · 0 评论