redis7
文章平均质量分 94
一个风轻云淡
先搞钱,去养老,当保安,过日子(本人菜鸡一个,又菜又爱敲,希望能和您共同进步,当然如果您有问题,我会的,会尽量及时解答)
展开
-
Redis之Redis为什么这么快解读
当别人问我们Redis这么快的时候,很多小白都只会简简单单的回答,因为Redis它是基于内存存储的,使用内存存储数据,可以避免频繁的进行写盘操作,大大降低响应时间。这个确实是一个原因,但回答的还是不够面。起码在这里还得回答上高效的数据结构以及IO网络多路复用的设计架构。Redis 采用网络 I/O 多路复用技术,要想理解IO多路复用的话,还得去理解下阻塞 I/O 模型,非阻塞 I/O 模型。原创 2023-09-11 08:19:21 · 163 阅读 · 0 评论 -
Redis之string类型的三大编码解读
在 Redis 中,String 类型的数据结构并不是采用 C 语言中自带的字符串类型,C 语言中的数据结构存在很多问题,比如:获取字符串长度的需要通过运算非二进制安全不可修改因此,String 在 Redis 中有其他三种编码方式: int、embstr、raw。其中, raw 和 embstr 类型,都是基于动态字符串(SDS)实现的。原创 2023-09-12 08:39:11 · 479 阅读 · 0 评论 -
Redis之Redis 6.0中Hash(ziplist)解读
Redis中hash数据类型使用了两种编码格式:ziplist(压缩列表)、hashtable(哈希表) 在redis.conf配置文件中,有以下两个参数,意思为:当节点数量小于512并且字符串的长度小于等于64时,会使用ziplist编码。ziplist 是一个经过特殊编码的双向链表,旨在提高内存效率。它存储字符串和整数值,其中整数被编码为实际整数而不是一系列字符。它允许在 O(1) 时间内在列表的任一侧进行推送和弹出操作。但是,由于每个操作都需要重新分配 ziplist 使用的内存。原创 2023-09-10 09:24:39 · 536 阅读 · 0 评论 -
Redis之SDS底层原理解读
Redis 采用一段连续的内存空间来存储 SDS 结构,具体结构如下图所示,free 代表指这个字符串剩余可用空间的长度,而 len 代表这个字符串已占用空间的长度,buf [] 就是字符数组。// 记录 buf 数组中已使用字节的数量// 等于 SDS 所保存字符串的长度int len;// 记录 buf 数组中未使用字节的数量int free;// 字节数组,用于保存字符串char buf[];原创 2023-09-08 07:42:03 · 319 阅读 · 0 评论 -
Redis之过期key的淘汰及缓存淘汰策略解读
我们都知道在Redis 所有的数据结构都可以设置过期时间,时间一到,就会自动删除。想象一下里面有一个专门删除过期数据的线程,如果数据已过期就立马删除。这个时候可以思考一下,会不会因为同一时间太多的 key 过期,以至于线程忙不过来。同时因为 Redis 是单线程的,删除的时间也会占用线程的处理时间,如果删除的太过于繁忙,会不会导致线上读写指令出现卡顿。原创 2023-09-06 07:35:31 · 247 阅读 · 0 评论 -
Redis之布隆过滤器(Bloom Filter)解读
在实际开发中,会遇到很多要判断一个元素是否在某个集合中的业务场景,类似于垃圾邮件的识别,恶意ip地址的访问,缓存穿透等情况。类似于缓存穿透这种情况,有许多的解决方法,如:redis存储null值等,而对于垃圾邮件的识别,恶意ip地址的访问,我们也可以直接用 HashMap 去存储恶意ip地址以及垃圾邮件,然后每次访问时去检索一下对应集合中是否有相同数据。原创 2023-09-09 08:08:14 · 667 阅读 · 0 评论 -
Redis之缓存和数据库双写一致方案讨论解读
只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题。我们需要保证redis跟数据库的中的数据保持一致,返回正确的数据。原创 2023-09-05 08:11:29 · 433 阅读 · 0 评论 -
Redis之缓存穿透,雪崩,击穿解读
本文总结了Redis之缓存穿透,雪崩,击穿解读,新手可快速把握重点,老手可以迅速回顾知识点。原创 2023-09-07 08:41:32 · 172 阅读 · 0 评论 -
Redis之bigkey问题解读
目录什么是bigkey?bigkey引发的问题如何查找bigkeyredis-cli --bigkeysMEMORY USAGEbigKey如何删除渐进式删除unlinkbigKey生产调优bigkey简单来说就是存储本身的key值空间太大,或者hash,list,set等存储中value值过多。具体来衡量的话大key是:可以通过redis客户端提供的命令 redis-cli --bigkeys来查看好处:给出每种数据结构Top 1 bigkey,同时给出每种数据类型的键值个数+平均大小不足:想查询原创 2023-09-01 09:13:30 · 1206 阅读 · 0 评论 -
Redis之MoreKey问题及Scan命令解读
大量的数据使用key*查看或者删除会导致严重的时间消耗,这个指令没有offset、limit 参数,是要一次性吐出所有满足条件的key,由于redis,是单线程的,其所有操作都是原子的,而keys算法是遍历算法,复杂度是O(n),SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。返回值:返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。原创 2023-09-02 00:05:55 · 363 阅读 · 0 评论 -
Redis之哨兵模式解读
当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。原创 2023-09-04 07:53:30 · 1106 阅读 · 0 评论 -
Redis之主从复制解读
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master/Leader),后者称为从节点(Slave/Follower)数据的复制是单向的!只能由主节点复制到从节点(主节点以写为主、从节点以读为主)数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点,一个主节点可以有0个或者多个从节点,但每个从节点只能有一个主节点。原创 2023-09-03 08:55:06 · 483 阅读 · 0 评论 -
Redis之发布订阅解读
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:Redis 客户端可以订阅任意数量的频道。Redis的Pub/Sub展示了最多一次消息传递语义。原创 2023-08-31 10:37:39 · 170 阅读 · 0 评论 -
Redis之管道解读
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务器。客户端发送一个请求到服务器,并以阻塞的方式从socket读取数据,获取服务端响应。服务端处理请求命令并发送响应回给客户端。以上两步称为:Round Trip Time(简称RTT,数据包往返于两端的时间)。管道主要解决的就是redis频繁命令往返造成的性能瓶颈Clients 和 Servers 通过网络连接. 可以是本地非常快的网络,或者是通过互联网连接很远的网络。不管网络延迟如何,原创 2023-08-30 09:40:57 · 739 阅读 · 0 评论 -
Redis之事务解读
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务中的命令要么全部被执行,要么全部都不执行。Redis事务的三个特性:一致性,顺序性,排他性开始事务。命令入队。执行事务。Redis事务不可回滚。原创 2023-08-29 09:35:12 · 151 阅读 · 0 评论 -
Redis持久化之AOF解读
以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作AOF持久性记录服务器收到的每个写入操作。然后可以在服务器启动时再次重播这些操作,重建原始数据集。命令的记录格式与 Redis 协议本身相同。原创 2023-08-28 10:24:29 · 598 阅读 · 0 评论 -
Redis持久化之RDB解读
在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的。这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。原创 2023-08-27 09:16:49 · 835 阅读 · 0 评论 -
Redis之stream类型解读
Redis stream(流)是一种数据结构,其作用类似于仅追加日志,但也实现了多个操作来克服典型仅追加日志的一些限制。其中包括O(1)时间的随机访问和复杂的消费策略,如消费者群体。您可以使用流实时记录和同时联合事件。Redis 为每个stream(流)条目生成一个唯一的 ID。可以在以后使用这些 ID 检索其关联的条目,或读取和处理流中的所有后续条目。Redis Stream 主要用于消息队列(MQ,Message Queue)原创 2023-08-26 08:36:57 · 1214 阅读 · 0 评论 -
Redis之GEO类型解读
GEO 主要用于存储地理位置信息(纬度、经度、名称)添加到指定的key中。该功能在 Redis 3.2 版本新增。GEO(Geo Redis)是一个用于存储和操作地理空间数据的 Redis 模块。它提供了一组命令,可以将地理位置数据存储为 Redis 键值,并支持各种地理位置查询和操作。Redis GEO 可以在需要处理地理位置数据的场景中使用,例如近邻查询、地理位置路由、基于地理位置的服务等。使用 Redis GEO 可以高效地处理大量的地理位置数据。原创 2023-08-25 09:14:01 · 1061 阅读 · 0 评论 -
Redis之HyperLogLog类型解读
HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。原创 2023-08-24 08:27:14 · 286 阅读 · 0 评论 -
Redis之bitmap类型解读
Redis 的位图(bitmap)是由多个二进制位组成的数组,只有两种状态,0和1, 数组中的每个二进制位都有与之对应的偏移量(从 0 开始),通过这些偏移量可以对位图中指定的一个或多个二进制位进行操作。可以把 Bitmap 想象成一个以位为单位的数组,数组的每个单元只能存储 0 和 1,数组的下标在 Bitmap 中叫做偏移量 offset,bitmap默认值都为0.原创 2023-08-23 08:35:49 · 1119 阅读 · 0 评论 -
Redis之zset(sorted set)类型解读
Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。原创 2023-08-22 11:39:36 · 916 阅读 · 0 评论 -
Reids之Set类型解读
新的存储需求:存储大量的数据在查询方面提供更高的效率需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询set类型:与hash存储结构完全相同,底层数据结构使用哈希表,仅存储field,不存储value(nil),并且field不允许重复Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。原创 2023-08-21 20:28:07 · 241 阅读 · 0 评论 -
Redis之hash类型解读
Hash类型对应的数据结构是两种: ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable (Map<String,Map<Object,Obje ct>>)Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。原创 2023-08-20 10:28:05 · 624 阅读 · 0 评论 -
Redis之List类型解读
序号命令及描述1移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。2移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。3从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。4通过索引获取列表中的元素5在列表的元素前或者后插入元素6LLEN key获取列表长度7LPOP key移出并获取列表的第一个元素8将一个或多个值插入到列表头部9。原创 2023-08-19 17:09:04 · 476 阅读 · 0 评论 -
一文打通redis中的String类型
①String是Redis最基本的类型,一个key对应一个value。②String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象③String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512MString的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList序号命令及描述1设置指定 key 的值2。原创 2023-08-18 22:09:05 · 927 阅读 · 0 评论