
redis
文章平均质量分 64
沐已成风
19届毕业,之前从事java开发,目前在用golang语言谋生。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
redis-Modules(TairHash)
TairHash是基于redis module开发的一种hash数据结构,和redis原生的hash数据结构相比,TairHash不但和原生hash一样具有丰富的数据接口和高性能,还可以为field设置过期时间和版本,这极大的提高了hash数据结构的灵活性,在很多场景下可以大大的简化业务开发。TairHash提供active expire机制,即使field在过期后没有被访问也可以被主动删除,释放内存。剩下的有中文的介绍,有兴趣可以研究下哈。原创 2022-09-05 21:33:43 · 1032 阅读 · 1 评论 -
linux统计reids集群的连接数
借助linux统计redis集群的连接数原创 2022-06-17 11:39:22 · 1610 阅读 · 0 评论 -
Redis的lua脚本
本文已参与[新人创作礼]活动,一起开启掘金创作之路。一、在redis使用lua脚本的好处减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延。原子操作。Redis会将整个脚本作为一个整体执行,中间不会被其他请求插入。因此在脚本运行过程中无需担心会出现竞态条件,无需使用事务。复用。客户端发送的脚本会永久存在redis中,这样其他客户端可以复用这一脚本,而不需要使用代码完成相同的逻辑。二、在redis中使用lua脚本//返回redis中KEYS[1] 的值 retrun redis原创 2022-04-29 19:45:46 · 23419 阅读 · 0 评论 -
Redis学习(14)--Info指令
Info命令Info指令显示的信息繁多,分为9大块。1.Server: 服务器运行的环境参数2.Clients: 客户端相关信息3.Memory: 服务器运行内存统计数据4.Persistence: 持久化信息5.Stats: 通用统计数据6.Replication: 主从复制相关信息7.CPU: CPU使用情况8.Cluster: 集群情况9.KeySpace: 键值对统计数量信息# 获取所有信息> info # 获取内存相关信息> info memory#原创 2021-09-30 10:02:59 · 351 阅读 · 0 评论 -
Redis学习(13)--消息队列相关
小道消息-PubSub消息多播消息多播允许生产者只生产一次消息,由中间件负责将消息复制到多个消息队列,每个消息队列由相应的消费组进行消费。PubSub 常见指令> subscribe codehole.image codehole.text codehole.blog #同时订阅三个主题,会有三条订阅成功反馈消息1) "subscribe"2) "codehole.image"3) (integer) 11) "subscribe"2) "codehole.text"3) (i原创 2021-09-28 10:11:41 · 299 阅读 · 0 评论 -
Redis原理(3)--持久化
Redis的持久化机制有两种,第一种是快照(RDB),第二种是AOF日志。快照是一次全量备份,AOF日志是连续的增量备份。快照是内存数据中的二进制序列化形式,在存储上非常紧凑,而AOF日志记录的是内存数据修改的指令记录文本。AOF日志在长期的运行过程中国会变得无比庞大,数据库重启时需要加载AOF日志进行指令重放,这个过程就会无比漫长,所以要定期进行AOF重写,给AOF日志进行瘦身。快照原理Redis使用操作系统的多进程COW(Cpoy On Write)机制来实现快照持久化。fork(多进程).原创 2021-09-14 10:00:41 · 116 阅读 · 0 评论 -
Reids原理(2)-通信协议
Redis将所有数据都放在内存中,用一个单线程对外提供服务,单个节点在跑满一个CPU核心的情况下可以达到了10w/s的超高QPS。RESPRESP是序列化协议(Reids Serialization Protocol)的简写。它是一种直观的文本协议,优势在于实现过程异常简单,解析性能极好。Redis协议将传输的数据结构分为5种最小单元类型,单元结束时统一加上回车换行符号\r\n。单行字符串以"+"符号开头多行字符串以"$"符号开头,后跟字符串长度整数值以":"符号开头,后跟整数的字符串.原创 2021-09-10 09:53:06 · 120 阅读 · 0 评论 -
Redis原理(1)-线程IO模型
线程IO模型Redis是个单线程程序Redis单线程为什么还能这么快?因为它的所有数据都在内存中,所有的运算都是内存级别的运算。正因为Redis是单线程,所以要小心使用Redis指令,对于那些时间复杂度为O(n)级别的指令,一定要谨慎使用,否则一不小心就可能会导致Redis卡顿。Redis既然是单线程,如何能处理那么多的并发客户端连接?采用了多路复用,select 系列的事件轮询API,采用非阻塞IO非阻塞IO当我们调用套接字的读写方法,默认它们是阻塞的,比如read方法原创 2021-09-10 09:39:48 · 136 阅读 · 0 评论 -
Redis学习(12)-GeoHash
近水楼台–GeoHashreids 在3.2版本以后增加了地理位置Geo模块GeoHash算法业界比较通用的地理位置距离排序算法是GeoHash算法,Redis也使用GeoHash算法。GeoHash算法将二维的经纬度数据映射到一维的整数,这样所有的元素都将挂载到一条线上,距离靠近的二维坐标映射到一维后的点之间的距离也会很接近。可以设想一下切蛋糕法。设想一个正方形的蛋糕摆在你面前,两刀下去均分分成四块小正方形,这四个小正方形可以分别标记为00、01、10、11共四个二进制整数。然后对每一个原创 2021-09-03 10:29:22 · 198 阅读 · 0 评论 -
Redis学习(11)--限流相关
断尾求生–简单限流背景:定义一个简单接口,表示系统要限定用户的某个行为在指定的时间里只能允许发生N次。# 指定用户 user_id 的某个行为 action_key 在特定的时间内 period 只允许发生最多的次数 max_countdef is_action_allowed(user_id,action_key,period,max_count): return true# 调用这个接口,一分钟内只允许最多回复5个帖子can_reply = is_action_allowed("laoq原创 2021-09-03 09:31:28 · 144 阅读 · 0 评论 -
Redis学习(10)--布隆过滤器
层峦叠嶂-布隆过滤器 >=4.0背景: 讲个场景,比如我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,而他每次推荐都要去重,而如果用set结构去实现,则需要浪费的空间很大很大。布隆过滤器(Bloom Filter)就是为了专门解决这个问题的额,它相当于一个不怎么精确的set结构,当你使用它的contains方法判断某个对象是否存在时,他可能会误判。即当布隆过滤器说某个值存在时,这个值可能不存在;当它说某个值不存在时,那就肯定不存在。使用方法redis4.0之后提供了布隆过滤器插原创 2021-08-25 12:45:03 · 130 阅读 · 0 评论 -
Redis学习(9)--HyperLogLog
四两拔千斤-HyperLogLog >=2.8.9背景: 统计某一个爆款页面的UV(访问人次),可能会有几千万个,如果使用set则需要一个很大的Set集合进行统计,会非常浪费空间。Redis提供了HyperLogLog数据结构来解决这种统计问题.HyperLogLog提供不精确的去重计数方案,虽然不精确,但也不是非常离谱,标准误差是0.81%.使用方法> pfadd codehole user1 # 与set集合的sadd用法一样,来一个用户ID,就将用户ID塞进去(integer)原创 2021-08-18 12:48:08 · 217 阅读 · 0 评论 -
Redis学习(8)--位图
位图Redis的位图不是特殊的数据结构,它的内容其实就是普通的字符串,也就是byte数组。我们可以使用普通的get/set直接获取和设置整个位图的内容,也可以使用位图操作getbit/setbit等将byte数组看成"位数组"来处理。Python获取字符的ASCII码的二进制:>>> bin(ord('h'))'0b1101000'零存零取,整存零取,整存整取,零存整取setbit key 1 1 #将key的第二位设置为1get key #整体获取key的值原创 2021-08-12 13:02:50 · 229 阅读 · 0 评论 -
Redis学习(7)--延时队列
异步消息队列Redis的list(列表)数据结构常用来用做为异步消息队列使用,用rpush和lpush操作入队列,用lpop和rpop操作出队列原创 2021-08-03 10:03:23 · 484 阅读 · 0 评论 -
Redis学习(6)-分布式锁
关于redis分布式锁的一些分析,参考《Redis深度历险》原创 2021-07-27 10:08:50 · 175 阅读 · 0 评论 -
Redis学习(5)-zset
Redis基础篇–zset(有序列表)zset内部实现: 类似于Java语言里SortedSet和HashMap的结合体。它的内部实现用的是一种叫做"跳跃列表"的数据结构。用途举例zset可以用来存储粉丝列表,value值是粉丝的用户ID,score是关注时间,便可以对粉丝列表按关注时间进行排序。zset可以用来存储学生的成绩,value值是学生的ID,score是他的考试成绩,我们对成绩按分数进行排序就可以得到他的名次。常见命令:zadd books 9.0 python原创 2021-07-21 21:36:31 · 638 阅读 · 0 评论 -
Redis学习(4)--set
Redis基础篇–setset内部实现: 类似于Java语言里的HashSet,它内部的键值对是无序的、唯一的。它的内部实现相当于一个特殊的字典,字典中的所有value都是一个值null。常见命令:sadd books python #添加一个元素smembers books #查询books的元素,注意顺序,是无序的sismember books java #查询某个value是否存在,相当于contains(o)scard books #获取长度,相当于count()spop bo原创 2021-07-20 10:02:06 · 88 阅读 · 0 评论 -
Redis学习(3)--hash
Redis基础篇–hashhash内部实现: 类似于JAVA的HashMap。也是数组+链表的二维结构。rehash不同,是渐进式rehash策略。常见命令:hset books java "think in java" #设置key为books,field为java,value为"think in java"hgetall books #entries(),key和value间隔出现hlen books# 获取map的长度hmset books java "effective java原创 2021-07-16 20:37:09 · 150 阅读 · 2 评论 -
Redis学习(2)--list
redis--lisy内部实现: 类似于JAVA的linkedList。列表元素较少时会使用一块连续的内存存储,即ziplist(压缩链表),元素较多时底层是quicklist(快速链表)。可以用来当做异步队列使用。原创 2021-07-13 10:09:54 · 160 阅读 · 2 评论 -
Redis学习(1)--string
Redis基础篇–基础的数据结构string内部实现: 动态字符串,类似于JAVA的ArrayList。采取预分配的方式,其分配的实际空间 capacity 一般高于实际长度len。当字符串长度小于1M时,扩容都是加倍;当超过1M时,一次只会多扩1M。注意:其最大长度为512MB.常见命令:键值对set key value #设置key的值为valueget key #获取key的值exists key #key是否存在del key #原创 2021-07-09 20:25:36 · 100 阅读 · 0 评论