• 热点数据,对象缓存,全页缓存//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,访问到一定次数返回false

    ip:=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 统计页面访问量,多次访问不重计算

作者:Yoby  创建时间:2021-11-22 12:30
 更新时间:2024-12-05 13:26
上一篇:
下一篇: