摘要:// Package main —— Redis 消息队列演示 // // 基于 Redis List 数据结构实现消息队列,核心思路: // - 生产者通过 RPUSH 将消息追加到 List 尾部 // - 消费者通过 BLPOP 从 List 头部阻塞式取出消息 // - RPUSH + BL
阅读全文
摘要:实现qps限流每次判断是否要限流时,发送lua脚本给redis执行,控制令牌数量,刚开始令牌桶是满的。key缓存时间是容量/速率(单位是s)+10s。value使用hashmap,记录当前令牌数和上次时间,时间是绝对时间的秒数,取整。 package main import ( "context"
阅读全文
摘要:# 创建带有3个元素的zset1 zadd zset1 2.0 "a" 1.0 "b" 3.0 "c" # 从zset1中弹出分数最小的元素 zpopmin zset1 # 从zset2中弹出分数最大的元素 zpopmax zset1 # 查看所有元素,显示时带上分数 zrange zset1 0
阅读全文
摘要:zset即有序集合sorted set,用分数进行成员的从小到大的排序。 2种数据结构 ziplist 条件:元素个数小于128,而且所有元素小于64字节。即zset-max-ziplist-entries 128zset-max-ziplist-value 64 基于双向链表保存压缩列表节点,保存
阅读全文
摘要:package main import ( "context" "encoding" "encoding/json" "fmt" "log" "github.com/go-redis/redis/v8" ) var _ encoding.BinaryMarshaler = &Student{} va
阅读全文
摘要:key和value key是字符串value有多种类型,包括string、set(元素是字符串,去重)、sortset(元素是字符串,有序且去重)、list(元素是字符串)、hash(field和value组成键值对, field和value是字符串)
阅读全文
摘要:通过SET原子操作来设置key和过期时间 // 加锁// 如果key不存在,那么设置它的值,否则什么也不做SETNX lock 1// 10s后自动过期EXPIRE lock 10 // 2者合一,一条命令保证原子性执行SET lock 1 EX 10 NX 问题1:无法评估准确的加锁时间(自动续期
阅读全文