![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Redis
文章平均质量分 74
有关redis的文章
胖墩的IT
一步一个脚印走下去,相信自己能成功,
学习的3W原则:who,what,which
生活的3W原则:who,what,why
展开
-
Jedis 4.4.3 JedisCluster通过key获得哈希槽,再通过哈希槽得到节点的连接的源码
了解完redis服务端,就有一个疑问,如果redis是集群模式,客户端通过什么方式知道我要请求哪个节点呢?下面就通过源码解析一下。原创 2023-08-08 00:42:17 · 402 阅读 · 0 评论 -
Redis 6.5 服务端开启多线程源码
redis支持开启多线程,只有从socket到读取缓冲区和从输出缓冲区到socket这两段过程是多线程,而命令的执行还是单线程,并且是由主线程执行。原创 2023-08-06 03:35:15 · 894 阅读 · 0 评论 -
Redis 6.5 服务端的读取缓冲区和输出缓冲区执行源码
. . . . . . //删除影响理解的代码行 //开始进入循环,在个方法里会一直while触发eventLoop aeMain(server . el);//删除所有的EventLoop:只有上面aeMain方法结束才执行这个 aeDeleteEventLoop(server . el);return 0;while(!} }原创 2023-08-03 01:09:05 · 551 阅读 · 0 评论 -
Redis 6.5 RDB和AOF持久化源码
RDB和AOF持久化源码介绍原创 2023-07-17 01:08:27 · 243 阅读 · 0 评论 -
Redist 6.2 zset的写入(源码),最后介绍一下skiplist的结构
文章目录1、zaddGenericCommand(入口函数)2、zsetAdd(真正执行添加操作的函数)3、zslInsert(执行skiplist插入新节点的操作)4、skiplist结构图说明1、zaddGenericCommand(入口函数)首先命令server.c文件夹下的 {"zadd",zaddCommand,-4, "write use-memory fast @sortedset", 0,NULL,1,1,1,0,0,0},而下面是服务器内部执行的逻辑/*原创 2022-03-11 01:46:17 · 397 阅读 · 0 评论 -
redis 中ziplist和hashtable数据结构
hash存储在redis底层存储空间结构有两种,分别是ziplist和hashtable,这俩的先后顺序是先创建ziplist,当ziplist中的某个value大于设置的阈值或者整个ziplist的长度大于某个阈值,则ziplist会转换成hashtable,ziplist数据结构图hashtable数据结构图这样做的原因如果你学过java,那就应该知道hashmap在JDK1.8及之后时,使用的是数组+链表+红黑树的数据结构,它转换的条件:当阈值是默认阈值0.75,链表的深度大于等于.原创 2022-03-09 01:05:59 · 1263 阅读 · 0 评论 -
Redis 6.2 执行hset 操作(源码)
文章目录hset 主函数1,首先创建hash对象(hashTypeLookupWriteOrCreate)2、尝试转换存储空间的编码格式(hashTypeTryConversion)3、遍历把键值对根据存储空间格式(ziplist,hashtable)的不同分别 存储起来hset 主函数void hsetCommand(client *c) { int i, created = 0; robj *o; if ((c->argc % 2) == 1) { .原创 2022-03-09 00:30:39 · 594 阅读 · 0 评论 -
Redis 6.2 redis创建一个字符串对象是如何选择合适的编码方式(源码)
通过Redis 6.2 key的创建SDS(源码)知道String在redis中是有多种编码方式存储的,但是对一段字符串如何进行选择编码方式就不清楚了,下面就是redis在保存数据时,字符串编码方式如何选择的源码文章目录当键值对的value是字符串时,入口方法选择String类型的编码方式createRawStringObject(OBJ_ENCODING_RAW 编码方式)createEmbeddedStringObject(OBJ_ENCODING_EMBSTR 编码方式)当键值对的value是.原创 2022-02-14 00:17:35 · 1047 阅读 · 0 评论 -
Redis 6.2 故障转移(源码)
推荐渐进式解析 Redis 源码 - 哨兵 sentinel 上面比较全面,我这也是参考上面的。文章目录sentinelFailoverStateMachine(故障转移的主流程)sentinelFailoverWaitStart(第一步故障转移开始)sentinelFailoverSelectSlave(第二步,选择晋升的服务器节点函数)sentinelSelectSlave(选举一个sentinel来主导故障转移的)sentinelFailoverSendSlaveOfNoOne(第三步发送 sl.原创 2022-02-14 00:09:27 · 643 阅读 · 0 评论 -
Redis 6.2 sentinel判断主观下线和客观下线(源码)
推荐渐进式解析 Redis 源码 - 哨兵 sentinel 上面有讲解的主观下线和客观下线文章目录前言sentinelCheckSubjectivelyDown(主观下线)sentinelCheckObjectivelyDown(客观下线)前言下面是我摘抄的有关主观下线和客观下线的介绍:主观下线 SDOWN: 如果 监控的服务器节点 在 down-after-milliseconds设置的毫秒时效内没有响应检测,则会被判定为 主观下线;这个状态适用所有服务器节点客观下线 ODOWN.原创 2022-02-13 23:06:42 · 1527 阅读 · 0 评论 -
Redis 6.2 哨兵定时检查源码
推荐看渐进式解析 Redis 源码 - 哨兵 sentinel他写的很全,我这也是参考他的,顺着他的逻辑来的文章目录serverCron(定时任务触发方法)sentinelTimer(哨兵模式定时器检查)sentinelCheckTiltCondition(检查是否需要进入TITL模式)sentinelHandleDictOfRedisInstances(对传过来的某一种哨兵实例进行循环执行周期函数)sentinelHandleRedisInstance (周期性调用函数)sentinelReconn.原创 2022-02-13 22:33:39 · 708 阅读 · 0 评论 -
Redis 6.2 哨兵模式服务端初始化(源码)
推荐看渐进式解析 Redis 源码 - 哨兵 sentinel 我也是参考这篇文章,他的是旧版,但是变化不大,下面是我复制过来的图片,仅供参考文章目录main(启动方法)initSentinelConfig(初始化是哨兵的端口)initSentinel(初始化哨兵模式中的常量)sentinelHandleConfiguration(创建一个哨兵节点需要的初始化)createSentinelRedisInstance(创建哨兵节点)sentinelIsRunning(启动哨兵模式)main(启动方法.原创 2022-02-13 21:49:38 · 507 阅读 · 0 评论 -
Redis 6.2当发送set String时,redis是如何处理的(源码)
下面主要是源码,标题也都是各个方法,所以不建议跳着看,而是从头开始看会,文章目录setCommandtryObjectEncoding(尝试对字符串对象进行编码以节省空间)setGenericCommand(set 字符串实际的执行流程)genericSetKey(核心set指令的操作)lookupKeyWrite(先尝试判断key是否过期,过期则删除)lookupKey(查找key)dbAdd(正常添加键值对)dbOverwrite(覆盖旧的value,但是不修改过期时间)setCommand.原创 2022-02-13 18:40:35 · 659 阅读 · 0 评论 -
Redis 6.2 key的创建SDS(源码)
目录1、创建一个SDS的方法2、SDS的的字符串存储空间有五种类型3、其他real Object先放出一张图,来自Redis常用数据类型及其存储结构(源码篇),这张图描述了在redis中key和value存储的数据结构是什么样的1、创建一个SDS的方法/* Create an empty (zero length) sds string. Even in this case the string * always has an implicit null term. *创建一个空(零长度)s原创 2021-08-09 00:07:07 · 462 阅读 · 0 评论 -
Redis 6.2 数据库和数据表由哪些组成(源码)
文章目录1、redis中一个数据库有哪些组成2、redis中数据库数据表的结构3、每一条数据在数据表中的结构推荐大家看一下Redis常用数据类型及其存储结构(源码篇) 里面讲解的很透彻,我这只是源码英文注释可以翻译过来,而且我文章的图片有的来自上面这篇博客1、redis中一个数据库有哪些组成/* Redis database representation. There are multiple databases identified * by integers from 0 (the def原创 2021-08-08 22:17:44 · 371 阅读 · 0 评论 -
Redis 6.2定时删除刷新频率源码
都知道定时删除策略,而且刷新的频率默认是10,但是实际上redis的刷新频率实际生效的是几次呢?看一下源码才是才能最能了解的,此版本是6.2版本如果对定时删除策略源码感兴趣的可以看一下我另一篇博客Redis的过期删除策略源码分析(定时删除)/* This is our timer interrupt, called server.hz times per second. * Here is where we do a number of things that need to be done a.原创 2021-07-26 23:21:37 · 425 阅读 · 0 评论 -
Redis 6.2的过期删除策略源码分析(定期删除)
都知道redis采用的过期删除策略是定期删除和惰性删除,对于这l两个的解释可以看一下Redis 键的过期删除策略及缓存淘汰策略下面是根据翻译软件和自己的理解翻译过来的,英文原文也在上面,如果不清楚或者不对可以看一下英文惰性删除的源码可以看一下我的另一篇文章Redis的过期删除策略源码分析(惰性删除)/* Try to expire a few timed out keys. The algorithm used is adaptive and * will use few CPU cycles .原创 2021-07-25 21:16:33 · 684 阅读 · 3 评论 -
Redis 6.2的过期删除策略源码分析(惰性删除)
都知道redis采用的过期删除策略是定期删除和惰性删除,对于这l两个的解释可以看一下Redis 键的过期删除策略及缓存淘汰策略下面是根据翻译软件和自己的理解翻译过来的,英文原文也在上面,如果不清楚或者不对可以看一下英文文章目录1、当查询key的源码执行逻辑2、expireIfNeeded(判断key是否过期)3、惰性删除方法源码4、同步删除方法源码5、用户命令发出删除key时的redis如何选择删除1、当查询key的源码执行逻辑你会疑问为什么标题明明是惰性删除策略,而这里是查询key的执行的逻.原创 2021-07-25 21:13:38 · 481 阅读 · 1 评论 -
redis IO多路复用源码分析
文章目录1、IO多路复用的源码(在ae.c中)2、模块方法含义解释3、什么时候选择什么IO1、IO多路复用的源码(在ae.c中)/* Include the best multiplexing layer supported by this system. * The following should be ordered by performances, descending. */#ifdef HAVE_EVPORT#include "ae_evport.c"#else #ifdef原创 2021-07-25 20:30:10 · 542 阅读 · 0 评论 -
Nginx+Tomcat实现负载均衡
Nginx控制端口变换,但是sessioID不变,所以只需要在redis+session实现共享的基础上实现端口的变化就可以了,看下图这个图显示大概,session和redis共享就包含在SSM里了第一步,下载Nginx,建议下载稳定版本1、 安装路径自己选择2、 解压完成后进入conf/nginxconf,修改配置文件#user nobody;worker_processes...原创 2019-06-06 13:49:44 · 566 阅读 · 0 评论 -
Windows10下启动redis集群或者单机redis服务报1064:进程意外终止
现在正在做springboot和redis的整合用lettcue,但是今天重新启动了我半个月没启动的redis本地服务时竟然报1064,进程意外终止,我也百度了好多博客和文章大体分为下面几种解决方案查看端口是否被占,删Logs文件夹,再重新创建一个新的空的在管理:服务上把网络服务改成本地服务删除旧的redis服务,重新上传本地服务如果上面的解决了你的问题,那恭喜你,下面要敲黑...原创 2019-08-04 11:20:54 · 1310 阅读 · 0 评论 -
SpringBoot2整合Redis集群(面向接口),并实现redis和session共享
我这用的是springboot原本自带的StringRedisTemplatespringboot整合redis集群首先添加依赖<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artif...原创 2019-08-04 15:03:10 · 506 阅读 · 0 评论 -
redis中配置文件,命令连接本地库和远程库(七)
redis中配置文件的说明和使用https://www.cnblogs.com/qlqwjy/p/7797996.html详细说明了redis中的配置文件的含义redis命令连接https://www.cnblogs.com/qlqwjy/p/7798089.html这里面有redis连接本地库和远程库的命令,核对当前redis的密码,是否连接成功,库的分区等...原创 2019-05-13 15:16:13 · 1115 阅读 · 0 评论 -
redis中hash存储(三)
这很像java中的hashmap,所以理解起来很简单,很适合存储一一对应的数据或对象,比如账号和密码就是这种情况,账号不允许重复,密码允许重复命令示例:1. HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX:(设置值/获取值/删除键值/判断是否存在键/返回键数量/hash中键值不存在才设置值)127.0.0.1:6379> hset myhash key1 va...原创 2019-05-10 22:46:38 · 6068 阅读 · 0 评论 -
redis序列化器
redis和session共享牵扯到了序列化器,所以找了找资料Redis缓存用到了序列化,如果是存String就不需要用到序列化,但是如果需要存bean对象和集合对象,就必须要转序列化,这说几种JdkSerializationRedisSerializer:这个是spring-data-redis默认的序列化方式,如果不指定序列化方式,那么将用这个,对象存在redis会是二进制形式,而且...原创 2019-06-04 14:54:13 · 1893 阅读 · 0 评论 -
Spring+Mybatis+redis整合(用注解的方式)
手动的操作缓存自己解决了,原本想着以后就用手动的方式,可是不研究研究注解感觉自己错过了什么,现在弄完了,感觉真是简单,比手动的方式简单太多了,可能是我直接用的别人的工具类可能简单,如果手动的方式中redisDao命令全了,可能会感觉差不多,不过还是有点区别的,不是很大,看你的需求了手动方式操作redis请看这:https://blog.csdn.net/weixin_43113679/art...原创 2019-05-30 23:03:51 · 8355 阅读 · 2 评论 -
redis cluster集群进行和SSM整合
redis cluster集群和SSM整合,用两种方式来实现整合手动方式(也是客户端的方式来实现)关于手动方式请参考Spring+Mybatis+redis整合(用依赖注入的方式手动修改缓存)redis.propertiesredis.pool.maxTotal=30redis.pool.maxIdle=10redis.pool.numTestsPerEvictionRun=102...原创 2019-06-07 15:39:49 · 1020 阅读 · 2 评论 -
redis中sorted set(有序集合)操作(五)
sorted set和前一篇文章的set的区别就是它是会自己排序的,但又不像java中按插入的顺序排序或者字符串排序,是添加的时候需要自己添加一个分数,因为是set所以不允许重复,但是分数可以重复,大家可以理解为map,set的值为map的key,分数为map的value,排序根据分数来进行排序,当然可以正序也可以反序,感觉适合做排行榜一类的命令示例1. ZADD/ZCARD/ZCOUNT...原创 2019-05-11 23:18:53 · 2263 阅读 · 0 评论 -
redis实现消息队列(发布/订阅模式)
redis的列表类型天生支持用作消息队列(类似于MQ的队列模型–任何时候都可以消费,一条消息只能消费一次)关于redis的list操作https://blog.csdn.net/weixin_43113679/article/details/90080933java程序实现消息队列先生产者本人下面的目录结构参考https://blog.csdn.net/weixin_43113679/...原创 2019-05-24 23:38:00 · 9240 阅读 · 0 评论 -
redis中set集合操作(四)
和java中的set集合很相似,不允许重复,没有任何顺序,不是按插入顺序来排,大概像散列排吧命令示例1. SADD/SMEMBERS/SCARD/SISMEMBER:(增加/列出所有成员/获取成员数量/判断是否是成员)127.0.0.1:6379> sadd myset a b c //添加set的别名为myset,里面的值为a,b,c(integer) 3127.0.0...原创 2019-05-11 16:36:36 · 1915 阅读 · 0 评论 -
MongoDB和Redis的区别
转载自https://www.cnblogs.com/qlqwjy/p/8652960.htmlMongoDB和Redis都是NoSQL,采用结构型数据存储。二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同。 MongoDB建议集群部署,更多的考虑到集群方案,Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。比较指标M...转载 2019-05-24 16:28:54 · 2358 阅读 · 0 评论 -
redis中list列表操作(二)
在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295。命令示例:1. LPUSH/LPUSHX/LRAN...原创 2019-05-10 17:35:10 · 1910 阅读 · 1 评论 -
redis中String类型操作(一)
掌握了这么多理论,还没有实战,这是非常不对的,我找到了一个特别牛的一个博客,很细致化,基本上都可以当redis实战文档了https://www.cnblogs.com/qlqwjy/category/1055870.html特别厉害,不光redis,只是我看到这个博客全部内容的大概就有点自行惭愧,但是我会加油的命令示例先打开redis-server,再开一个窗口进行操作,不要关闭第一个窗口...原创 2019-05-10 15:28:48 · 414 阅读 · 0 评论 -
redis中持久化机制(九)
redis虽然不是关系型数据库,但是它也应该有持久化,要不虽然它是直接在内存里进行操作,但是如果出现宕机,或者其他错误想把数据恢复不就废了吗?https://www.cnblogs.com/qlqwjy/p/7800526.html上面这个博客详细的写了redis实现持久化的两个AOF和RDB,我就不再多说一遍了,不过请详细的看,对你的益处会非常大的但是因为我是用的windows下面的会...原创 2019-05-14 17:05:16 · 303 阅读 · 1 评论 -
redis中的事务(八)
redis中也存在存在事务,可以和MySQL的事务可以对比一下,可能理解会更深刻些MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石详细解释每个命令的含义MULTI :用于启动事务,也就是在这条命令后的任何命令操作都存起来,不让它立马执行,也可以这么理解,延迟执行,等EXEC命令来让这些命令按顺序执行,EXEC: 执行一个在一个事务里的所有命令,并恢复非事...原创 2019-05-13 23:11:35 · 187 阅读 · 0 评论 -
实战Redis之准备工作
相信大家此时想用Redis不知道怎么开始吧,先别慌,一步一步来,心急吃不了热豆腐首先先安装Redis环境不用担心自己的电脑内存小,安装后你想用还要每次单独启动,启动时里面是没什么东西的,相当于空白,刚开始也就几M的的内存,现在电脑日益发展,电脑至少一个G起步吧安装教程可以看http://www.runoob.com/redis/redis-install.html很全,没有什么问题,一...原创 2019-04-24 22:38:37 · 170 阅读 · 0 评论 -
Spring+Mybatis+redis整合(用依赖注入的方式手动修改缓存)
现在开始Spring+mybatis+redis的整合,一开始我想的是Spring+SpringMVC+Mybatis+redis进行整合,但是慢慢整合着就就感觉前面的会了,后面的肯定也就会了,也就不整合后面的了,如果感觉还是很模糊的话,你可以根据下面的慢慢的来整合你肯定会这么觉的先看看我的目录结构首先spring-server.xml<?xml version="1.0" en...原创 2019-05-21 19:06:57 · 2341 阅读 · 0 评论 -
主从复制(windows单机上实现,多个端口)(十)
现在开始主从复制,需求肯定是多台电脑是最好能模拟的,但是受限于资金和电脑(本人电脑是windows),只能在一台电脑上进行模拟主从复制了,https://blog.csdn.net/m0_38129920/article/details/84104779我是根据这个博客来自己做的一些步骤,并说出自己做的时候的一些问题,当然大家也可以直接按上面博客的来,我实践过,没有问题,就是有可能想法有一些区别...原创 2019-05-16 16:31:37 · 551 阅读 · 0 评论 -
redis中key的各种通用操作(六)
命令示例1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX:(获取匹配的key/重新命名/删除key/判断是否存在/移动指定key/新值不存在才重新命名)127.0.0.1:6379> flushdb //清空当前选择的数据库,以便于对后面示例的理解OK127.0.0.1:6379> set mykey 2 //准备数据OK127.0.0.1:6...原创 2019-05-12 20:45:50 · 3580 阅读 · 0 评论 -
在Windows下创建redis cluster集群
https://www.cnblogs.com/tommy-huang/p/6240083.html博客主里面的步骤真的很详细了,按步就班的来就没有任何问题下面我就说说在此过程中自己不懂的和又添加的conf文件复制在此port 6380 #端口号loglevel notice #日志的记录级别,notice是适合生产环境的logfile "Logs/redis6...原创 2019-05-23 22:39:28 · 634 阅读 · 0 评论