Redis
文章平均质量分 79
记录学习Redis的一些问题
loser与你
这个作者很懒,什么都没留下…
展开
-
Redis Cluster
Redis Cluster Redis Cluster是Redis作者自己提供的Redis集群化方案,该集群由三个Redis节点组成,每个节点负责整个集群的一部分数据,每个节点负责的数据多少可能不一样。它们之间相互连接组成一个对等的集群,通过一种特殊的二进制协议交互集群信息。 Redis Cluster将所有数据划分为16384个槽位,每个节点负责其中一部分槽位,槽位的信息存储于每个节点中。 当Redis Cluster的客户端来连接集群时,也会得到一份集群的槽位配置信息。当客户端要查找某个k原创 2021-07-10 12:25:48 · 149 阅读 · 0 评论 -
Redis Sentinel集群
Redis Sentinel集群 Redis Sentinel集群是Redis官网提供的一种抵抗节点故障的高可用方案,当故障发生时可以自行主从切换。 可以将Redis Sentinel集群看成是一个Zookeeper集群,它是集群高可用的心脏,一般由3~5个节点组成,当个别节点挂了时,集群还是可以正常运转。 Sentinel负责监控主从节点的监控,当主节点挂掉时,自动选择一个最优的从节点切换成主节点。客户端连接集群时,会先连接Sentinel,通过Sentinel来查询主节点的地址,然后再连接原创 2021-07-08 14:02:38 · 1700 阅读 · 0 评论 -
Redis的懒惰删除
Redis的懒惰删除1.Redis中的懒惰删除 Redis内部实际上并不只有一个主线程,还有几个异步线程专门用来处理一些耗时的操作。异步线程在Redis内部被称为“BIO”,全称是Background IO,意思是在背后默默干活的IO线程。(1)del指令 Redis的删除指令del会直接释放对象的内存,多数情况下,这个指令非常快。但是如果被删除的key是一个非常大的对象,那么删除操作就会导致单线程卡顿。 为了解决这个问题,Redis4.0版本引入了unlink指令,它能对删除指令进行懒处理原创 2021-07-07 17:01:06 · 1215 阅读 · 0 评论 -
Redis过期策略
Redis过期策略Redis所有的数据结构都可以设置过期时间,时间一到就会被自动删除。1.过期的key集合 Redis会将设置了过期时间的key放入一个独立的字典中,称为过期字典,与没有时间限制的key区分开来,后面会定时遍历这个独立字典来删除到期的key。除了定时遍历之外,它还会使用惰性策略来删除过期的key。2.定时删除策略 Redis默认每秒进行10次过期扫描,过期扫描不会遍历过期字典中所有的key,而是采用一种简单的贪心策略,步骤如下:(1)从过期字典中随机选出20个key(2)删除原创 2021-07-05 14:53:49 · 308 阅读 · 0 评论 -
Redis缓存淘汰机制
Redis缓存淘汰机制当Redis内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换,这样会使得redis的性能急剧下降。在生产环境中,是不允许redis出现交换行为的,为了限制最大使用内存,redis提供了配置参数maxmemory来限制内存超出期望大小。当实际内存超出maxmemory时,redis提供了几种可选策略来让用户自己决定该如何腾出新的空间继续提供读写服务。有以下几种策略:1.noeviction:继续读,停止写。这样做能够保证不丢失数据,但是会使得线上的业务无法继续进行。这原创 2021-07-05 12:29:47 · 2780 阅读 · 0 评论 -
Redis集群的主从复制
Redis集群的主从同步主从的作用在于,当主节点Master挂掉的时候,主节点需要经过数据恢复和重启的过程才能继续运行,这样的话会拖延很长时间,从而影响到线上业务的持续服务。运维可以让从节点Slave过来接管,从而使得服务可以继续进行。现代分布式系统存有一理论基石,就是CAP原理。C:Consistent,一致性A:Availability,可用性P:Partition tolerance,分区容忍性分布式系统的节点往往都是分布在不同的机器上进行网络隔离开的,那么必然会有网络断开的风险,也就是原创 2021-07-02 16:55:23 · 124 阅读 · 0 评论 -
Redis持久化机制
Redis持久化机制Redis的数据全部在内存中,若是突然宕机,数据会全部丢失,因而要有一种机制保证Redis的数据不会因为故障而丢失,这就是Redis的持久化机制。Redis的持久化机制有两种,一种是快照,另一种是AOF日志。快照是一次全量备份,AOF日志是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而AOF日志记录的是内存数据修改的指令记录文本。1.快照原理由于Redis是单线程程序,因而这个线程要同时负责多个客户端套接字的并发读写操作和内存数据结构的读写。在服务线上原创 2021-06-30 21:26:51 · 138 阅读 · 0 评论 -
Redis高级数据结构——GeoHash
Redis高级数据结构——GeoHashRedis在3.2版本以后增加了地理位置Geo模块,可以使用Redis实现”附近的人“类似的功能。1.GeoHash算法GeoHash算法将二维的经纬度数据映射到一维的整数,使得所有的元素挂载到一条线上,距离靠近的二维坐标映射到一维后的点之间距离也会很接近。当想要计算“附近的人”时,将目标位置映射到这条线上,然后在这个一维的线上获取附近的点就好。那GeoHash是怎么将二维经纬度映射为一维的整数呢?它将整个地球视为一个二维平面,然后划分成一系列正方形的方格,原创 2021-06-30 10:59:51 · 298 阅读 · 0 评论 -
Redis高级数据结构——HyperLogLog
Redis高级数据结构——HyperLogLogredis的高级数据结构HyperLogLog提供不精确的去重计数方案,虽然不精确,但是标准误差也达到了0。81%,也足以满足很多场合了。比如,要对大型网站的每天独立访客数进行大致统计的话,就可以用到HyperLogLog了。1.HyperLogLog的使用方法pfadd key element [element …] #增加计数,类似于set的saddpfcount key #获取计数,类似于set的scard以redis-cli命令行的方式原创 2021-06-07 20:09:41 · 386 阅读 · 0 评论 -
Redis高级数据结构——位图
Redis高级数据结构——位图对于bool型数据,存取时使用普通的key/value会占很大的内存,可以使用位图来存放,可以大大节省存储空间。比如用户的签到情况,1表示已签到,0表示未签到,那么一年的签到情况只需要使用一个365位(46个字节)的空间即可存储。若是使用字符串的话则需要365个字节,当用户数量庞大的时候,使用位图是非常节省空间的。位图不是特殊的数据结构,其实就只是一个byte数组,如下图所示。1.位图的基本操作setbit key offset value #将位图中的offs原创 2021-06-04 20:29:46 · 421 阅读 · 0 评论 -
Redis基础数据结构——有序集合
Redis基础数据结构——有序集合原创 2021-06-02 19:20:52 · 2627 阅读 · 1 评论 -
Redis基础数据结构——集合
Redis基础数据结构——集合redis的集合set相当于Java里面的HashSet,它内部的键值对是无序的、唯一的。它的内部相当于一个特殊的字典,字典中所有的value都是一个值NULL。set结构可以用来存储在某活动中中奖的用户ID,因为有去重功能,可以保证同一个用户不会中奖两次。1.redis集合的基本操作(1)单集合操作sadd key member [member …] #添加一个或多个元素到集合里 sismember key member #判断一个元素是否是集合里的smemb原创 2021-05-31 19:56:09 · 319 阅读 · 0 评论 -
Redis基础数据结构——字典
Redis基础数据结构——字典redis的字典hash相当于Java里面的HashMap,实现结构上也与Java的HashMap一样,都是“数组+链表”的二维结构。不同的是,redis的字典的值只能是字符串,并且它们rehash的方式也不一样,相较于Java中HashMap的一次性rehash,redis中是渐进式rehash。hash结构用来存储用户信息时,与字符串需要一次性全部序列化整个对象不同,hash可以对用户结构中的每个字段单独存储,这样当我们需要获取用户信息时可以进行部分获取。1.red原创 2021-05-31 18:53:49 · 1231 阅读 · 0 评论 -
Redis基础数据结构——列表
Redis基本数据结构——列表redis的列表list相当于Java里面的LinkedList,列表是一个双向链表。redis的列表常用来做异步队列使用,将需要延后处理的任务结构体序列化成字符串,塞进redis的列表,另一个线程从这个列表中轮询数据进行处理。1.redis列表的基本操作lpush key value [value …] #列表的左边加入元素rpush key value [value …] #列表的右边加入元素lpop key #列表的左边出一个元素rpop key #列表原创 2021-05-30 19:39:43 · 391 阅读 · 0 评论 -
Redis基础数据结构——字符串
Redis基础数据结构——字符串字符串string是Redis最简单的数据结构,它的内部表示是一个字符数组。它是动态字符串,可以进行修改,内部结构的实现类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。字符串一个常见的用途是缓存用户信息,通过将用户信息结构体使用JSON序列化成字符串,然后将序列化后的字符串塞进Redis来缓存,取用户信息时要进行反序列化。Redis中所有的数据结构都以唯一的key字符作为名称,然后通过唯一key值来获取相应的value数据,不同类型的数原创 2021-05-30 15:54:09 · 439 阅读 · 0 评论
分享