热点数据,对象缓存,全页缓存//string
session //string
分布式锁
setnx kk 12
expire kk 5
//string,kk只有不存在才写入全局id
incrby id1 1
自动加1或其他n计数器
incr id
自动加1,decr id
自动减1, 用于点赞,阅读量,延迟一段时间,最后同步到mysql限流
incr ip
用ip和其他信息作为key,访问到一定次数返回falseip:=php.Getip() n,_:=conn.DoVar("get",ip) if n.Int()>5{ fmt.Println("超过5次啦") }else{ conn.Do("incr",ip) }
签到,用户1000是id,必须是int
day:=gtime.Now().Format("Ym") days:=gtime.Now().Day()-1//必须减1,索引0开始 kk:="u:sign:1000:"+day v,_:=conn.DoVar("getbit",kk,days) if v.Int()==1{ fmt.Println("今天已签到") }else{ conn.Do("setbit",kk,days,1)//签到 } n,_:=conn.DoVar("bitcount",kk)//本月签到次数 fmt.Println(n.Int()) nn,_:=conn.DoVar("bitpos",kk,1)//首次打卡 fmt.Println(nn.Int()+1)//需要加1才是首次打卡日期 vs,_:=conn.DoVar("getbit",kk,days-1-1)//判断昨天是否打卡,某天减1 if vs.Int()==0{ fmt.Println("昨天未签到") } d:= time.Now().Local().Day() //当天日期 dd:= fmt.Sprintf("u%d",d) //格式和u无符号 vv, _ := conn.DoVar("bitfield", kk, "get", dd, "0")//获取到当天签到数据 str:=vv.Interface().([]string)[0] //获取字符串 int64s, _ := strconv.ParseInt(str, 10, 64) //转换成int64 a:= make(map[string]bool) //生成一个签到map for i := d; i > 0; i-- { var pos int = (d - i) * -1 var keys = time.Now().Local().AddDate(0, 0, pos).Format("2006-01-02") var value = int64s>>1<<1 != int64s a[keys]=value int64s >>= 1 }
统计在线离线用户
conn.Do("setbit","online",1000,1)//在线 conn.Do("setbit","online",1001,1) conn.Do("setbit","online",1002,1) conn.Do("setbit","online",1001,0)//离线 n,_:=conn.DoVar("bitcount","online")//统计在线用户 fmt.Println(n.Int()) conn.Do("setbit",day,1000,1) conn.Do("setbit",day,1001,1) conn.Do("setbit","20211123",1000,1) conn.DoVar("bitop","or","users","20211122","20211123","20211128") n,_:=conn.DoVar("bitcount","users")//统计这几天用户量
购物车 hash
hmset 001 shopid 11 num 10
用户id是key,商品id和商品数量hincrby 001 num 1
加1 -1就是减1用户消息时间线 list
消息队列,最新列表 list
rpush quee php go js
右进左出,尾部追加blpop quee 0
阻塞模式取出
conn.Do(“rpush”,”quee”,”测试”)//写入队列
var wg sync.WaitGroup//保证主 goroutine 不退出
wg.Add(1)
go func() {for{ v,_:=conn.DoVar("blpop","quee",0) fmt.Println(v.Val()) }
}()
wg.Wait()
lpush qu a 头部插入brpop quee 0
阻塞取出
conn.Do(“lpush”,”quee1”,”测试”)//写入队列
var wg sync.WaitGroup//保证主 goroutine 不退出
wg.Add(1)
go func() {for{ v,_:=conn.DoVar("brpop","quee1",0) fmt.Println(v.Val()) }
}()
wg.Wait()集合set 抽奖
sadd q 1 2 3 4 5 添加值
spop q 随机取出一个值点赞
setbit zan:1 1000 1 照片1用户1000点赞,取消设置0
bitcount zan:1 点赞次数商品标签,刷选,不重复值 集合set
sadd tag:1000 大小 尺寸
sadd 1:follow 2 3 关注了2,3用户
sadd 1:fans 2 粉丝排行榜 有序集合 zset
zadd lst 103 2
添加数组zscore lst 5
查看5的分数zcard lst
统计人数zrevrange lst 0 -1 withscores
查看全部排名zrevrank lst 5
查看5排名,结果+1才是排名zincrby lst 10 5
增加5用户分数10 返回分数zrem lst 5
删除5用户del lst
删除排行榜 1表示成功ZINCRBY rank:20211124 8 1
记录某天积分 用于天排行榜zcount lst 0 100
统计0-100分数之间人数zrevrangebyscore lst (0 100 withscores
获取0-100之间分数不包含0,从大到小排序zunionstore rank:3 3 rank:20211124 rank:20211123 rank20111122
最近三天合并ZREVRANGE rank:3 0 9 withscores
最近3天分数v,_:=conn.DoVar("zrevrange","lst", 0, 4,"withscores") xx:=php.SliceSplit(v.Strings(),2) fmt.Println(xx) for k,vv:=range xx{ fmt.Println(k,vv) } day:="rank:day:"+gtime.Now().Format("Ymd")//日排行 month:="rank:month:"+gtime.Now().Format("Ym")//月排行 week:="rank:week:"+gtime.Now().Format("YW")//周排行 total:="rank:total"//总排行
uv pv
pfadd uv 1 2 3 4 5
pfcount uv 统计页面访问量,多次访问不重计算
更新时间:2024-12-05 13:26