![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 85
努力推石头的西西弗斯
无问西东
展开
-
Redis 6.0源码学习 String类型
以"SETa111"为例,解析完请求之后,111对应的redisObject是编码为OBJ_ENCODING_RAW的字符串。tryObjectEncoding会进行一次编码推断,如果符合OBJ_ENCODING_INT的约束,还可能从享元池中复用对象。String字符串类型是Redis最基本的一个类型。通过对redisObject学习,我们得知了字符串类型可能出现的3种编码格式。Redis会根据当前值的类型和长度决定使用哪种内部实现。代码片段t_string.csetCommand。......原创 2022-07-28 16:03:55 · 505 阅读 · 0 评论 -
Redis 6.0源码学习 RedisObject
Redis 是一个开源(BSD许可)、基于内存、高性能的数据结构,可以作为K-V数据库、缓存、消息代理(message broker)和流引擎。 Redis提供了许多数据结构,诸如String、Hash、List、Set、Sorted Set、BitMap、Hyperloglog、Geospatial index和Stream。 Redis 使用标准版本标记进行版本控制:major.minor.patchlevel。偶数的版本号表示稳定的版本, 例如 1.2,2.0,2.2,2.4,2.6,2.8,原创 2022-07-28 14:54:07 · 599 阅读 · 0 评论 -
Redis 6.0学习指南
Redis 是一个开源(BSD许可)、基于内存、高性能的数据结构,可以作为K-V数据库、缓存、消息代理(message broker)和流引擎。 Redis提供了许多数据结构,诸如String、Hash、List、Set、Sorted Set、BitMap、Hyperloglog、Geospatial index和Stream。 Redis 使用标准版本标记进行版本控制:major.minor.patchlevel。偶数的版本号表示稳定的版本, 例如 1.2,2.0,2.2,2.4,2.6,2.8,原创 2022-07-28 14:06:58 · 624 阅读 · 0 评论 -
Redis 6.0源码学习 Simple Dynamic String
C语言中的字符串为Null-terminatedString,它用’\0’来表示字符串的结束。SDS对上层暴露的指针不是指向SDS结构体的指针,而是直接指向buf的指针。个人猜想是为了编码方便。不同命令的参数个数都不相同,一开始分不清哪个位置是key哪个位置是value,索性统一处理,在具体场景下,再单独优化。在函数中会根据字符串长度选择合适的类型,初始化完相应的统计值后,返回指定字符串内容的指针。最终可以确认,长度小于32的键值对,键的底层是sdshdr5,而值的robj底层是sdshdr8。...原创 2022-07-22 16:12:29 · 335 阅读 · 0 评论 -
Redis学习笔记 - 11.Redis 高级功能-Pipline
定义Redis客户端执行一条命令分为如下四个过程:发送命令命令排队命令执行返回结果其中发送命令和返回结果被称为往返时间(RTT)。例如要执行n次命令,需要消耗n次RTT,这个和Redis的高并发高吞吐特性背道而驰。Pipeline(流水线)机制能改善上面这类问题,它能将一组Redis命令进行组装, 通过一次RTT传输给Redis,再将这组Redis命令的执行结果按顺序返回给客户...原创 2020-04-10 02:33:10 · 275 阅读 · 0 评论 -
Redis学习笔记 - 18.Redis 高级功能-过期订阅
情景有一个这样的场景,某系统里为用户开辟了一个空间,这个空间在有效期里可以随意使用。但是到期后要回收。我们可以通过定时任务对数据库表中存在的空间信息进行检查,如果截止时间到了,就进行对应的操作。也可以把这个定时的工程扔给系统以外。我们可以尝试另一种方案,例如创建空间的时候,将空间id作为key的一部分存放在redis中,而ex设置为有效时间。在redis将这个超时的key删除的时候,通知我们系...原创 2020-04-10 02:37:46 · 283 阅读 · 0 评论 -
Redis学习笔记 - 17.Redis 通讯协议-RESP
介绍Redis制定了RESP(REdis Serialization Protocol, Redis序列化协议) 实现客户端与服务端的正常交互, 这种协议简单高效, 既能够被机器解析, 又容易被人类识别。发送命令格式间隔符号,在Linux下是\r\n,在Windows下是\n.set hell world//发送命令格式*3\r\n$3\r\nSET\r\n$5\r\nhello...原创 2020-04-10 02:37:06 · 218 阅读 · 0 评论 -
Redis学习笔记 - 16.Redis 高级功能-GEO
介绍Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能,对于需要实现这些功能的开发者来说是一大福音因为GEO的底层实现是zset,所以支持zset的相关命令。命令增加地理位置信息geoadd key longitude latitude member [longitude latitude member .....原创 2020-04-10 02:36:35 · 246 阅读 · 0 评论 -
Redis学习笔记 - 15.Redis 高级功能-发布订阅
介绍Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以收到该消息。Redis提供了若干命令支持该功能,在实际应用开发时,能够为此类问题提供实现方法。命令发布消息publish channel message返回结果为订阅者个数,因为此时没有订阅,所以返回结果为...原创 2020-04-10 02:36:05 · 213 阅读 · 0 评论 -
Redis学习笔记 - 14.Redis 高级功能-HyperLogLog
定义HyperLogLog并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等。HyperLogLog内存占用量非常小,但是存在错误率,开发者在进行数据结构选型时只需要确认如下两条即可:只为了计算独立总数,不需要获取单条数据。可以容忍一定误差率,毕竟HyperLogLog...原创 2020-04-10 02:35:40 · 245 阅读 · 0 评论 -
Redis学习笔记 - 13.Redis 高级功能-Bitmaps
定义Bitmaps本身不是一种数据结构,实际上它就是字符串(如图3-10所示),但是它可以对字符串的位进行操作。Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。命令设置值setbit key offset value获...原创 2020-04-10 02:34:57 · 205 阅读 · 0 评论 -
Redis学习笔记 - 12.Redis 高级功能-事务与Lua
为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题。事务Redis提供了简单的事务,之所以说它简单,主要是因为它不支持事务中的回滚特性,同时无法实现命令之间的逻辑关系计算。将一组需要一起执行的命令放到multi和exec两个命令之间。multi命令代表事务开始,exec命令代表事务结束,它们之间的命令是原子顺序执行的。命令开始事务multi提...原创 2020-04-10 02:34:19 · 242 阅读 · 0 评论 -
Redis学习笔记 - 10.Redis 高级功能-Redis Shell
redis-cliredis-cli有许多有用的参数–slave–slave选项是把当前客户端模拟成当前Redis节点的从节点, 可以用来获取当前Redis节点的更新操作, 有关于Redis复制将在第6章进行详细介绍。 合理的利用这个选项可以记录当前连接Redis节点的一些更新操作, 这些更新操作很可能是实际开发业务时需要的数据。–rdb–rdb选项会请求Redis实例生成并发送RDB持...原创 2020-04-10 02:32:39 · 235 阅读 · 0 评论 -
Redis学习笔记 - 09.Redis 高级功能-慢查询分析
配置参数Redis提供了slowlog-log-slower-than和slowlog-max-len配置来解决慢查询。slowlog-log-slower-than从字面意思就可以看出,slowlog-log-slower-than就是那个预设阀值,它的单位是微秒(1秒=1,000毫秒=1,000,000微秒),默认值是10000,假如执行了一条“很慢”的命令(例如keys*),如果它的执...原创 2020-04-09 04:34:54 · 243 阅读 · 0 评论 -
Redis学习笔记 - 08.Redis 类型学习-Sorted Set
官方文档:https://redis.io/topics/data-types在线教程:https://www.tutorialspoint.com/redis基本介绍Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个float类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(...原创 2020-04-09 04:34:23 · 230 阅读 · 0 评论 -
Redis学习笔记 - 07.Redis 类型学习-Set
官方文档:https://redis.io/topics/data-types在线教程:https://www.tutorialspoint.com/redis基本介绍Set集合是用来保存多个无序的字符串元素,集合中不允许有重复元素。Redis 中集合是通过哈希表实现的。大小限制:232-1个元素常用指令集合内操作sadd key element [element …]添加元素...原创 2020-04-09 04:33:54 · 214 阅读 · 0 评论 -
Redis学习笔记 - 06.Redis 类型学习-List
官方文档:https://redis.io/topics/data-types在线教程:https://www.tutorialspoint.com/redis类型介绍List列表是用来存储多个有序的字符串。在Redis中, 可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、 获取指定索引下标的元素等。大小限制:232-1个元素常用指令操作类型...原创 2020-04-09 04:33:22 · 238 阅读 · 0 评论 -
Redis学习笔记 - 05.Redis 类型学习-Hash
官方文档:https://redis.io/topics/data-types在线教程:https://www.tutorialspoint.com/redisHash 哈希Hash哈希类型是键值本身又是一个键值对结构,形如value={{field,value},…{field,value}}。大小限制:232-1个键值对常用指令hsethgethmsethmget内部编...原创 2020-04-09 04:32:50 · 213 阅读 · 0 评论 -
Redis学习笔记 - 04.Redis 类型学习-String
官方文档:https://redis.io/topics/data-types在线教程:https://www.tutorialspoint.com/redis类型介绍String字符串类型是Redis最基本的一个类型。大小限制:最大为512Mb,基本可以存储任意图片啦。常用指令setgetmsetmget内部编码int: 8位字节的长整型set key 8653obj...原创 2020-04-09 04:32:19 · 263 阅读 · 0 评论 -
Redis学习笔记 - 03.Redis Key管理
单个键管理重命名rename key newKey如果在rename之前,键java已经存在,那么它的值也将被覆盖。为了防止被rename覆盖,Redis提供了renamenx命令,确保只有newKey不存在时候才被覆盖。随机返回一个键randomkey键过期//键在seconds秒后过期expire key seconds//键在秒级时间timestamp后过期expi...原创 2020-04-09 04:25:13 · 240 阅读 · 0 评论 -
Redis学习笔记 - 02.Redis Database
配置Redis默认有16个database(db0~db15)Redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的实例上呢?就相当于MYSql数据库,不同的应用程序数据存储在不同的数据库下。Redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。默认情况下,一个客户端连接到数据库0。redis配置文件中下面的参数来控制数据库总数:# Set the number...原创 2020-04-08 19:52:50 · 4696 阅读 · 0 评论 -
Redis学习笔记 - 01.介绍
Redis是什么Redis 是一个开源(BSD许可)、基于内存、高性能的数据结构,可以作为K-V数据库,缓存和消息代理(message broker)。Redis数据类型StringHashListSetSorted SetRedis高性能因素纯内存存储单线程操作,避免了频繁的上下文切换采用了非阻塞I/O多路复用机制为什么使用Redis性能在碰到需要执行耗时久...原创 2020-04-08 19:52:17 · 211 阅读 · 0 评论 -
Redis学习笔记 - 00.Window环境下的安装
下载地址redis官方下载地址:https://redis.io/redis 64位下载地址:https://github.com/ServiceStack/redis-windows本人测试使用的是redis-64.3.0.503版本。基本配置修改redis.windows.conf文件,设置maxmemory 大小#maxmemorty <bytes>maxmem...原创 2020-04-08 19:44:14 · 198 阅读 · 0 评论 -
Redis源码学习 - Simple Dynamic String
Redis只会使用C字符串作为字面量,在大多数情况下,Redis使用SDS作为字符串表示。比起C字符串,SDS具有以下优点:常数复杂度获得字符串长度。杜绝缓冲区溢出。减少修改字符串长度时所需的内存重分配次数。二进制安全。兼容部分C字符串函数。数据结构struct sdshdr { // buf 中已占用空间的长度 int len; // bu...原创 2020-04-08 19:20:10 · 484 阅读 · 1 评论 -
Redis源码学习 - Redis命令 get
get命令的实现是t_string.c中的getCommand函数。void getCommand(redisClient *c) { getGenericCommand(c);}int getGenericCommand(redisClient *c) { robj *o; // 尝试从数据库中取出键 c->argv[1] 对应的值对象 // 如果...原创 2020-04-08 19:19:40 · 697 阅读 · 0 评论 -
Redis源码学习 - Redis命令
Redis命令redis.h中定了命令的数据结构,并且在redis.c中定义了命令表。Redis命令数据结构struct redisCommand { char *name; redisCommandProc *proc; int arity; char *sflags; /* Flags as string representatio...原创 2020-04-08 19:19:06 · 409 阅读 · 0 评论 -
Redis应用-异步消息队列与延时队列
原文:https://juejin.im/post/5cee4f59f265da1bb679faef异步消息队列说道消息队列,你肯定会想到Kafka、Rabbitmq等消息中间件,这些专业的消息中间件提供了很多功能特性,当然他的部署使用维护都是比较麻烦的。如果你对消息队列没那么高要求,想要轻量级的,使用Redis就没错啦。Redis通过list数据结构来实现消息队列.主要使用到如下命令...转载 2020-04-08 19:16:45 · 244 阅读 · 0 评论