![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 79
YZF_Kevin
若有恒,何必三更眠五更起;最无益,莫过一日曝十日寒
展开
-
Redis网络模型
redis网络模型转载 2023-03-26 23:19:41 · 211 阅读 · 0 评论 -
深入理解redis的一个del和unlink的命令的执行过程
redis delete命令 和 unlink命令的区别转载 2023-03-26 21:42:39 · 872 阅读 · 0 评论 -
【C++】redis client: redis_plus_plus
redis++的编译,使用转载 2023-03-21 21:27:57 · 639 阅读 · 0 评论 -
redis集群模式登陆
redis集群模式下连接原创 2023-03-07 18:23:56 · 2456 阅读 · 0 评论 -
Redisson分布式锁的实现原理
所以咱们这篇文章就来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理。说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就好了,非常的简便易用。大家如果有兴趣,可以去看看Redisson的官网,看看如何在项目中引入Redisson的依赖,然后基于Redis实现分布式锁的加锁与释放锁。转载 2023-02-23 20:35:20 · 172 阅读 · 0 评论 -
为什么Redis集群有16384个槽
Redis主节点的配置信息中,它所负责的哈希槽是通过一张bitmap的形式来保存的,在传输过程中,会对bitmap进行压缩,但是如果bitmap的填充率slots / N很高的话(N表示节点数),bitmap的压缩率就很低。另外,消息头里面有个myslots的char数组,长度为16383/8,这其实是一个bitmap,每一个位代表一个槽,如果该位为1,表示这个槽是属于这个节点的。其实我当初第一次思考这个问题的时候,我心里是这么想的,作者应该是觉得16384就够了,然后我就开始查这方面资料。转载 2023-01-23 23:37:18 · 1006 阅读 · 0 评论 -
redis用户权限管理 - ACL详解第三篇
上一篇博客主要讲了redis中ACL对命令的分类,如何增删命令集合的权限,如何增删子命令的权限这边博客开始,我们开始讲解ACL持久化和加载相关,以及其他一些杂项命令各位一定要知道,如果像上两篇博客中那样,只是在redis终端设置ACL相关权限,那这些设置都是保存在redis内存中,一旦redis重启,这些设置就会全部失效如果想持久化保存ACL配置,也就是把ACL相关权限保存到文件中,需要在redis配置文件中设置要导出的ACL配置文件全路径名,然后在redis终端上运行命令命令即可,操作如下2.原创 2023-01-03 23:21:35 · 564 阅读 · 0 评论 -
redis用户权限管理 - ACL详解第二篇
表增加了get命令的权限,但是此时TEST用户仍然不能通过get命令访问key,因为此时TEST并没有指定key,也就是说虽然拥有get权限,但是没有指定拥有哪些key的访问权限,还是没用。前面讲的+@xxx,-@xxx, +xxx, -xxx 讲的是增加删除命令集合的权限,增加删除子命令的权限,这些权限的key范围都是~*,也就是全部的key,这个时候依然不安全。很多时候,一个大的命令集合权限也太广了,我们可能只想给指定用户个别子命令的权限,比如get,hget,hlen,ttl等,可以通过。原创 2023-01-02 23:10:43 · 752 阅读 · 0 评论 -
redis用户权限管理 - ACL详解第一篇
redis在6.0之前基本没有用户权限的概念,只有一个连接认证密码,一旦通过了认证就可以随意操作任意的redis数据,无法对用户权限进行精确控制,很容易因为用户权限过大引发误操作redis6.0发布了权限管理功能ACL(access control list 访问控制列表),可以对不同的用户设置不同的权限,限制用户可使用的命令和可访问的数据。原创 2022-12-26 18:24:43 · 3634 阅读 · 0 评论 -
redis分布式锁 Redisson的原理
第二个if判断会成立,因为myLock的hash数据结构中包含的那个ID,就是客户端1的那个ID,也就是“8743c9c0-0795-4907-87fd-6c719a6b4586:1”现在面试,一般都会聊聊分布式系统这块的东西。接着第二个if判断,判断一下,myLock锁key的hash数据结构中,是否包含客户端2的ID,但是明显不包含,因为那里包含的是客户端1的ID。说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用。转载 2022-09-21 21:17:40 · 232 阅读 · 0 评论 -
redis配置文件详解
设置数据库个数。# 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,可能是正常数据,也可能是还没获得值的空数据。# 不要用比设置的上限更多的内存。# 在使用Redis作为LRU缓存,或者为实例设置了硬性内存限制的时候(使用 "noeviction" 策略)的时候,这个选项还是满有用的。# 根据默认的32字节的数据页尺寸和134217728的数据页数来算,Redis的数据页文件会占4GB,而内存里的分页表会消耗16MB内存。转载 2022-09-05 16:46:18 · 177 阅读 · 0 评论 -
redis参数详解
如果把该变量的值设置为yes,redis将会把进程的pid(进程号)写到 /var/run/redis.pid,该值由配置变量 pidfile指定。linux 系统,在终端上开启的进程会受到这个终端的影响,如果终端退出,进程会收到SIGHUP信号,默认处理是关闭进程。先简单解释下守护进程(daemon),守护进程是linux中后台运行的进程,执行过程中打印的信息不显示在终端,完全不受任何终端影响。配置成yes,redis会以守护进程的方式启动,完全不受终端的影响,打印信息也不会输出到终端上,非常推荐。原创 2022-09-05 16:27:49 · 4020 阅读 · 0 评论 -
redis混合持久化
RDB 和 AOF 持久化各有利弊,RDB 可能会导致一定时间内的数据丢失,而 AOF 由于文件较大则会影响 Redis 的启动速度,为了能同时使用 RDB 和 AOF 各种的优点,Redis 4.0 之后新增了混合持久化的方式。在开启混合持久化的情况下,AOF 重写时会把 Redis 的持久化数据,以 RDB 的格式写入到 AOF 文件的开头,之后的数据再以 AOF 的格式化追加的文件的末尾。...转载 2022-08-11 20:05:02 · 1951 阅读 · 0 评论 -
Redis 缓存穿透 缓存雪崩 缓存击穿 缓存预热 缓存降级
Redis作为一个高性能的内存中的key-value数据结构存储系统,在我们日常开发中广泛应用于缓存、计数器、消息队列、排行榜等场景中,尤其是作为最常用的缓存方式,在提高数据查询效率、保护数据库等方面起到了不可磨灭的作用,但实际应用中,可能会出现一些Redis缓存异常的情况,本文主要对Redis缓存异常及处理方案进行了总结。一、背景Redis是一个完全开源的、遵守BSD协议的、高性能的key-value数据结构存储系统,它支持数据的持久化,可以将内存中的数据保存在磁盘中,而且不仅仅支持简单的key-valu转载 2022-06-16 16:09:33 · 152 阅读 · 0 评论 -
从Redis7.0发布看Redis的过去与未来
经历接近一年的开发、三个候选版本,Redis 7.0终于正式发布,这是Redis历史上改变最多的一个大版本,它不仅包含了50多个新命令,还有大量核心新特性与改进,这些不仅能够解决用户使用中的诸多问题,还进一步拓展了Redis的使用场景。虽然Redis 7.0做了许多大胆的尝试,但是稳定性依然是最重要的基石。Redis官方在7.0的GA博文中也强调这一点:“While user-facing features are easy to boast of, the real “unsung heroes” in转载 2022-06-14 19:40:40 · 412 阅读 · 0 评论 -
Redis 7.0 Multi Part AOF的设计和实现
Redis 作为一种非常流行的内存数据库,通过将数据保存在内存中,Redis 得以拥有极高的读写性能。但是一旦进程退出,Redis 的数据就会全部丢失。为了解决这个问题,Redis 提供了 RDB 和 AOF 两种持久化方案,将内存中的数据保存到磁盘中,避免数据丢失。本文将重点讨论AOF持久化方案,以及其存在的一些问题,并探讨在Redis 7.0 (已发布RC1) 中Multi Part AOF(下文简称为MP-AOF,本特性由阿里云数据库Tair团队贡献)设计和实现细节。AOF( append only转载 2022-06-11 22:36:40 · 217 阅读 · 0 评论 -
使用redis做消息队列mq的总结
总结目前使用redis做消息队列的的方式有3中,list, publish/subscribe, streamlist做mq的总结使用方法1. 生产者可以 lpush 写入消息,消费者可以 rpop 读取消息,也就是pull模式2. 消费者可以使用 brpop 阻塞性读取消息,约等于服务器端的实时推送3. 如何保证消息读取但未处理时,消费者程序异常宕机造成的消息丢失,答案:rpoplpush 或 brpoplpush ,即先从原队列中移除一个消息并插入到一个新队列,消费者处理完该原创 2022-05-24 11:58:00 · 1779 阅读 · 0 评论 -
redis的scan命令的源码分析,实现原理
简言1. 线上环境keys命令不可用,会导致redis卡死。scan命令因为可以分批遍历,比较实用2. scan命令包括多个 遍历整个数据库的scan命令,处理函数scanCommand(),最终调用scanGenericCommand() 遍历hash对象的hscan命令,处理函数 hscanCommand(),最终调用scanGenericCommand() 遍历set对象的sscan命令,处理函数sscanCommand(),最终调用scanGenericCo...原创 2021-09-23 17:57:14 · 762 阅读 · 0 评论 -
Redis会遇到的15个「坑」,你踩过几个?
这篇文章,我想和你聊一聊在使用 Redis 时,可能会踩到的「坑」。如果你在使用 Redis 时,也遇到过以下这些「诡异」的场景,那很大概率是踩到「坑」了: 明明一个 key 设置了过期时间,怎么变成不过期了? 使用 O(1) 复杂度的 SETBIT 命令,Redis 竟然被 OOM 了? 执行 RANDOMKEY 随机拿出一个 key,竟然也会阻塞 Redis? 同样的命令,为什么主库查不到数据,从库却可以查到? 从库内存为什么比主库用得还多?转载 2021-08-22 22:58:57 · 401 阅读 · 0 评论 -
redis所有版本下载地址
redis所有版本的下载地址:https://download.redis.io/releases/截止到笔者发这篇博客(2021年7月23日 18:10)最新版本如下图,可以看到最新版本到了 6.2.5原创 2021-07-23 18:12:45 · 2205 阅读 · 0 评论 -
redis的watch命令没有ABA的问题
结论redis使用watch的时候没有ABA的问题实验如下图两个客户端,第一个客户端watch一个key后,第二个客户端修改这个key再恢复到原状,然后第一个客户端执行事务时发现事务失败原理在每个代表数据库的redis.h/redisDb结构类型中, 都保存了一个watched_keys字典, 字典的键是这个数据库被监视的键, 而字典的值则是一个链表, 链表中保存了所有监视这个键的客户端。比如说,以下字典就展示了一个watched_keys字典的例子:其中, ...原创 2021-07-07 17:12:10 · 483 阅读 · 4 评论 -
hiredis封装事务示例
简言1. redis的事务在使用时有诸多限制,且不是真正的事务(因为无法保证原子性,出错时也不能回滚),不建议使用2. 具体redis事务的总结,请看笔者的这篇博客https://blog.csdn.net/yzf279533105/article/details/1182231263. 这里演示的是hiredis对事务的操作实验redis单节点的情况函数::TestTransaction_Right()演示执行事务正确的情况;函数::TestTransaction_Wrong()演示.原创 2021-07-01 17:06:41 · 264 阅读 · 0 评论 -
redis集群常用命令
总结1. 查看redis是否是集群模式,infocluster 命令2. 查看集群中的所有节点信息,cluster nodes 命令3.查看slot和节点的对应关系,cluster slots 命令4.查看key所在的slot,cluster keyslot key命令实验如下图1.infocluster 命令2.cluster nodes 命令3.cluster slots 命令4.cluster keyslot key命令...原创 2021-06-29 15:05:34 · 9774 阅读 · 0 评论 -
redis的事务总结
结论1. redis的事务几乎没什么用,只能在单节点情况下,保证一下顺序性,原子性2. redis的事务无法回滚,无论发生什么错误,都无法回滚已经执行的命令,所以不是真正的事务3. 若redis事务中的命令有语法错误,事务会执行前面正确的命令,遇到错误后不再执行后面的所有命令了,直接返回4. 若redis事务中的命令没有语法错误,但是某个命令会失败的话,事务会执行前面正确的命令,执行了失败的命令后,后面的命令还会接着执行5. redis在多节点情况下,犹豫key会被hash到不同的节点上原创 2021-06-25 16:33:55 · 402 阅读 · 0 评论 -
redis管道的使用
简言1. 总所周知,redis以高性能著称,官方号称QPS可以达到10万次2. 如果我们做实验,即便是执行最简单的set,get命令,也难以达到官方号称的性能,原因在于没有使用管道(pipe)3. 不使用管道的时候,由于每个命令都要经过一个完整的网络来回才能全部得到结果,执行N个命令就要等待N个完整网络时间,效率很低4. 使用管道的时候,redis服务器并没有任何改变,仍然是顺序处理每一个命令。这是redis客户端做的一个小技巧,发出一个命令后不再等待它返回,而是接着发送下一条命令,直到全部原创 2021-05-24 19:19:39 · 597 阅读 · 2 评论 -
redis反杀面试官之10问
简言1. 笔者近两年来一直使用redis,也对redis有过仔细的研究,不敢说精通,熟悉至少是有的2. redis越来越火,网上相应的文章,总结,面试问题也有很多,但大多是应付简单面试用的,如果面试官再深入一些,恐怕大多数人都hold不住3. 所以特在这里总结了一些有难度的问题,若你能认真学习研究,不但能大幅提高对redis的理解程度,反杀面试官也是轻轻松松问题1:持久化的混合存储模式(RDB+AOF),它的实现原理和好处问题2:scan命令,第三个参数应该怎么填问题3:sca..原创 2020-12-11 13:17:24 · 526 阅读 · 1 评论 -
Redis中布隆过滤器的使用及原理
《玩转Redis》系列文章主要讲述Redis的基础及中高级应用。本文是《玩转Redis》系列第【11】篇,最新系列文章请前往公众号“zxiaofan”查看,或百度搜索“玩转Redis zxiaofan”即可。往期精选:《玩转Redis-HyperLogLog原理探索》本文关键字:玩转Redis、Bloom filter、布隆过滤器、无偏hash函数;大纲布隆过滤器介绍 什么是布隆过滤器 布隆过滤器有什么特性 Redis布隆过滤器实战 rebloom的安装 布隆过滤器的命令详转载 2020-12-08 17:28:14 · 2205 阅读 · 0 评论 -
ubuntu16.04安装,使用redis布隆过滤器示例
简言1. 环境:ubuntu16.04,redis版本:5.0.7,布隆过滤器实现版本:RedisBloom2. 默认情况,下载安装redis时是不带布隆过滤器功能的,它是以插件的形式提供服务,需要手动加载(修改配置文件后重启redis或者用命令module load来动态加载)3. RedisBloom的官方地址:https://github.com/RedisBloom/RedisBloom下载安装1. 运行命令wget https://github.com/RedisLabsMo.原创 2020-12-08 16:36:01 · 663 阅读 · 0 评论 -
centos7 redis5.0以后版本 集群部署示例
简言1. redis5.0版本以前的集群部署是使用ruby脚本完成的,略为复杂,具体示例见笔者的这篇博客,https://blog.csdn.net/yzf279533105/article/details/1036969902. 本篇博客讲解redis5.0版本以后的集群部署,由于集成到了create_cluster中(位置:redis根目录/utils/create-cluster/c...原创 2020-04-16 18:40:21 · 172 阅读 · 0 评论 -
ubuntu16 redis5.0以后版本集群部署示例
简言1. redis5.0版本以前的集群部署是使用ruby脚本完成的,略为复杂,具体示例见笔者的这篇博客,https://blog.csdn.net/yzf279533105/article/details/1052302962. 本篇博客讲解redis5.0版本以后的集群部署,由于集成到了create_cluster中(位置:redis根目录/utils/create-cluster/c......原创 2020-04-16 16:53:25 · 484 阅读 · 0 评论 -
ubuntu16 redis5.0以前版本集群部署示例
简言1. redis5.0版本以下集群的部署是使用ruby脚本完成的,ruby脚本的安装少略麻烦(主要原因是系统自动安装的版本太低,无法部署集群,必须手动安装)2. redis5.0版本以后把集群的部署集成到了create_cluster中(位置:redis根目录/utils/create-cluster/create-cluster),更简单,几条简单的命令即可部署一个简单版的集群,具体...原创 2020-03-31 19:59:12 · 380 阅读 · 0 评论 -
centos7 redis5.0以前版本 部署集群示例 - 第二篇
redis集群(5.0版本以下)的搭建,请参考笔者的这篇博客https://blog.csdn.net/yzf279533105/article/details/103696990redis集群(5.0版本以上)的搭建,请参考笔者的这篇博客 todo简言1.本篇博客讲解redis集群的操作实验2. 实验例子如集群的查看 : cluster info ; cluster...原创 2020-04-01 15:52:25 · 127 阅读 · 0 评论 -
ubuntu安装redis 详细步骤
简言1. 笔者电脑系统环境:ubuntu16.042. redis版本:5.0.73. 这里演示的单点redis的安装,开启;集群模式的redis搭建,请参考笔者的另外一篇博客,todo4.本示例redis绑定的地址是127.0.0.1,非局域网IP,所以只能本机使用127.0.0.1进行连接访问。若想在其他机器上访问该redis,必须绑定0.0.0.0,切记步骤1. 下载...原创 2020-03-27 18:08:40 · 7423 阅读 · 0 评论 -
redis 流 stream的使用总结 - 消费者组
本博客讲述如何使用redis中流stream的组简言1. 消费者组(consumer group)允许用户将一个流从逻辑上分成多个不同的流,并让消费者组组下的消费者去处理组中的消息2. 多个消费者组可以共享同一个流中的元素;但同一个消费者组中的每条消息只能有一个消费者,即不同的消费者将独占组中不同的消息,当一个消费者读取了组中的一条消息后,其他消费者将无法读取这条消息3. 就目前使...原创 2020-02-09 00:43:31 · 7191 阅读 · 0 评论 -
redis 流 stream的使用总结 - 如何遍历
本博客讲述如何对redis中的流进行遍历接上篇博客redis 流 stream的使用总结 - 基础命令简言1. XRANGE,XREVRANGE,XREAD命令只适合单个消费者模式,因为这三个命令都可以获取流中的元素,也都可以删除,只能实现公有订阅(所有的消费者都能收到消息,也不是很安全),无法实现私有订阅(所有消费者中,只有一个可以收到消息)2. 若只有单个消费者,那么无论如何获...原创 2020-02-07 18:07:43 · 2918 阅读 · 2 评论 -
redis 流 stream的使用总结 - 基础命令
简言1. 流(stream)是redist5.0版本新增加的数据结构,也是该版本最重要的更新,专门用于实现消息队列,事件系统2. redis之前的其他的数据结构实现消息队列,各有缺点2.1 列表(list)可以快速地将新消息追加到列表的尾部,但是不适合范围查找或者2.2 集合(set)有序集合(zset)虽然可以快速进行查找,但是缺少列表(list)和发布订阅等数据结构提供的阻塞弹...原创 2020-02-03 23:36:46 · 5380 阅读 · 3 评论 -
centos7 redis5.0以前版本 集群部署示例 - 第一篇
简言1. redis5.0版本以下集群的部署是使用ruby脚本完成的,ruby脚本的安装少略麻烦(主要原因是系统自动安装的版本太低,无法部署集群,必须手动安装)2. redis5.0版本以后把集群的部署集成到了create_cluster中(位置:redis根目录/utils/create-cluster/create-cluster),更简单,几条简单的命令即可部署一个简单版的集群,具体...原创 2019-12-25 13:06:39 · 239 阅读 · 0 评论 -
centos下安装ruby,删除ruby
简言由于centos7下面,直接使用yum install ruby,安装的是2.0.0版本,太低了,没法部署redis集群,redis集群需要2.3版本,所以我们需要安装更高的版本注意在新版redis中,使用ruby部署redis集群的方式已经废弃,直接使用redis-cluster简单运行命令,即可部署一个redis集群官方下载地址:http://cache.ruby-la...原创 2019-12-23 17:28:21 · 864 阅读 · 0 评论 -
使用hiredis实现redis分布式锁
简言1. redis实现分布式锁的原理,这里不再赘述,不清楚的可以参见笔者的这篇博客https://blog.csdn.net/yzf279533105/article/details/1005247002. 解锁时使用lua脚本,由于hiredis是根据空格来解析cmd参数的,但是lua中肯定有空格,所以解锁的redis命令要分开格式化3. 重点关注Unlock()函数即可,关...原创 2019-11-25 16:39:46 · 1074 阅读 · 0 评论 -
redis实现简单限流
首先我们给出限流的定义:1. 限定某个行为在指定时间内被允许的最大次数2. 限定某个用户的某个行为在指定时间内被允许的最大次数其实二者差不多,前面一句是限定所有人,后面的是限定了每个用户注意1. 这里我们讨论的是简单的限流,即“限定某个行为在指定时间内被允许的最大次数”中的最大次数是比较小的2. 数量级在几次,几十次,或者几百次级别的。至于上万级别,甚至百万级别的,暂...原创 2019-11-24 16:18:34 · 386 阅读 · 0 评论