![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis专题
文章平均质量分 91
Mango酱
这个作者很懒,什么都没留下…
展开
-
redis专题-----11-----redis订阅发布以及stream
参考文章:Redis发布订阅模式(publish/subscribe)。一 概念1)为了支持消息的多播机制,redis 引入了发布订阅模块。Redis发布/订阅(Pub/Sub)是一种通信机制,将数据推到某个信息管道中,其他客户端可通过订阅这些管道来获取推送信息,以此用于消息的传输。2)发布者发布的消息分到不同的频道,不需要知道什么样的订阅者者订阅。订阅者对一个或多个频道感兴趣,只需要接收感兴趣的消息,不需要知道什么样的发布者发布。主要目的是解除消息的发布者与订阅者之间的耦合关系。3)发布者和订原创 2022-03-08 22:37:13 · 1713 阅读 · 0 评论 -
redis-----10-----redigo管道以及事务-脚本事务
1 lua 脚本redis中加载了一个 lua 虚拟机,用来执行 redis lua 脚本。redis lua 脚本的执行是原子性的,当某个脚本正在执行的时候,不会有其他命令或者脚本被执行。lua 脚本当中的命令会直接修改数据状态。注意:如果项目中使用了 lua 脚本,不需要使用上一篇的命令事务。redis的一些操作脚本的命令。# 从文件中读取 lua脚本内容 # cat test1.lua | redis-cli script load --pipe# 1. 加载 lua脚本字符串 生原创 2022-03-04 18:23:22 · 649 阅读 · 0 评论 -
redis-----09-----redigo管道以及事务-命令事务
1 Redis 网络事件处理redis 是单线程处理逻辑,网络事件处理以及命令处理都是在这个线程当中进行的。如果是只存在一个连接,那么不管你输入多少命令,操作都是具有原子性。但是如果多个连接下,某个连接想按照原子性的执行多条redis命令,那么可能会被其它连接的命令插队,从而使这多条连接无法原子性执行。简述Redis网络事件处理:我们知道,网络双方连接是全双工的,每个连接下,双方各自有一对读写缓冲区(即下图的r、w)。连接1可能是我们程序的某个线程1的连接,连接2可能是另一个线程的连接,也有可能是其原创 2022-03-03 22:19:42 · 767 阅读 · 0 评论 -
redis-----08-----redigo管道以及事务-管道
1 Redis 管道正常的情况下,redis是请求响应模式,一条请求后那么正常就会返回一个响应,例如上图。但是只存在这种情况是无法满足我们开发的需求的。所以redis给我们提供了管道。redis的管道(pipeline )相关特点:1)redis的管道pipeline配合事务,可以实现原子操作,保证一次执行多条命令。2)它一次可以发送多次请求,然后返回多个响应,这个响应的顺序会依照你请求的顺序进行返回。3)管道作用:一次可以发送多条请求,并可以一次返回多个响应,例如下图,所以节省大量的网络耗时原创 2022-03-02 21:57:30 · 911 阅读 · 0 评论 -
redis-----07-----redigo基本命令操作(主要讲如何让go的struct、map展开成redis的参数,以及使用struct获取redis返回的key-value批量数组)
1 请求回应模式redis 与 client 之间采用请求回应模式,一个请求包对应一个回应包。但是也有例外,pub/sub 模式下,client 发送 subscribe 命令并收到回应包后,之后被动接收 redis 的发布包。所以若需要使用 pub/sub 模式,那么需要在 client 下创建额外一条连接与 redis 交互。2 Redis 协议图redis 协议采用特殊字符( \r\n )来分割有意义的数据,redis 使用的是二进制安全字符串(用长度来标识字符串的长度),所以 redis原创 2022-03-01 22:29:40 · 1969 阅读 · 0 评论 -
redis-----06-----redis-zset结构以及应用
1 zsetzset(有序集合)是Redis中最常问的数据结构。这个有序集合类似C++的set容器,但是底层结构不一样,C++的底层结构是使用RB-tree(红黑树)实现的。而zset不一样,zset使用跳表实现。zset一方面通过set来保证内部value值的唯一性,另一方面通过value的score(权重)来进行排序。这个排序的功能是通过Skip List(跳跃列表)来实现的。利用zset的去重和有序的效果可以由很多使用场景,通常用来实现排行榜。举两个例子:存储粉丝列表,value是粉丝的ID原创 2022-02-27 13:06:33 · 6898 阅读 · 2 评论 -
redis-----05-----redis-set结构以及应用
1 setRedis的set(集合)内部的键值对是无序的、唯一的。它的内部实现了一个所有value为null的特殊字典。就相当于上面的哈希,只不过value值为null。例如哈希是cmd key key value,那么set就是cmd key key,所以末尾的key当成value了。如果set集合存储的都是整数类型,那么会使用一个数组存储,此时集合会是一个有序的集合,这样让我们能快速进行交并差运算。(老师讲的)set(集合)由于其特殊去重复的功能,我们可以用来存储活动中中奖的用户的ID,这样可以保原创 2022-02-25 14:55:52 · 753 阅读 · 0 评论 -
redis-----04-----redis-hash结构以及应用
1 hash字典结构,通过 hash 函数(而不是通过比较 key 的方式)来确定节点的位置,很多高级语言包含这个数据结构,例如 c++ 中 unordered_map,go 语言当中的 map 结构。redis的底层是使用数组加双向链表来实现hash结构的。2 基础命令详细命令请查看http://redis.cn/commands.html。2.1 HSET、HGET、HMSET、HMGET、HGETALL# 设置 key 对应 hash 中的 field 对应的值。# 返回值intege原创 2022-02-24 10:50:47 · 868 阅读 · 0 评论 -
redis-----03-----redis-list结构以及应用
1 list首尾相接的双向链表,链表首尾操作时间复杂度为O(1) ;查找中间元素时间复杂度为 ;O(n)。列表中数据可能会被压缩:元素长度小于 48,不压缩。元素压缩前后长度差不超过 8,不压缩。例如压缩前大小是60,压缩后大小是56,那么不会压缩。所以一个占用内存很大答结构,可能会被redis压缩成多个ziplist,即quicklist。具体压缩后如何提高性能,可以看回这篇文章:redis-----01-----redis介绍(redis安装下载、底层存储结构原理剖析)2 基础命令原创 2022-02-23 18:14:16 · 849 阅读 · 0 评论 -
redis-----02-----redis-string结构以及应用
1 string字符数组,redis字符串是二进制安全字符串,可以存储图片等二进制数据,同时也可以存储经过messagepack 或者 protobuffer 等工具压缩后的二进制数据。内部实际存储根据 string 的数据特征可采用 int 、 embstr 、 raw 存储(使用object encoding key来查看)。1)如果字符串长度小于20并能转成数字,那么使用int存储字符串。2)如果不满足1,且字符串长度小于44,即0<x<20但不能转成数字加上20<=x&原创 2022-02-22 21:28:54 · 401 阅读 · 0 评论 -
redis-----01-----redis介绍(redis安装下载、底层存储结构原理剖析)
这篇文章的一些图参考了这篇文章:你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看(图文并茂,浅显易懂,建议收藏)。1 Redis介绍Redis 是Remote Dictionary Service 的简称;也是远程字典服务。Redis 是内存数据库,KV数据库,数据结构(string, list, hash, set, zset)数据库。Redis 应用非常广泛,如Twitter、暴雪娱乐、Github、Stack Overflow、腾讯、阿里巴巴、京东、华为、新浪微博等,很多原创 2022-02-22 10:04:42 · 1379 阅读 · 0 评论