后端开发学习(三)

    科技2025-09-18  21

    redis五种数据结构

    字符串string哈希hash列表list集合set有序集合zset

    (一)string

    关联锁 set key value:将字符串值value关联到key 如果key已经有其他值,set就覆写旧值,无视类型

    setnx key value:将key的值设为value,当且仅当key不存在,若给定的key已经存在,则setnx 不做任何动作

    计数器 INCR article:readout:{文章id} GET article:readout:{文章id}

    分布式系统全局序列号 INCRBY orderID 1000 //redis批量生成序列号提升性能

    (二)hash

    对象缓存 HMSET user {userID}:name zhuge {userID}:balance 1888 优化方式:外层的key可以分片

    例子:购物车操作 用户id 为key 商品id为field 商品数量为value 添加商品:hset cart:1001 10088 1 增加数量:hincrby cart:1001 10088 1 商品总数:hlen cart:1001 删除商品:hdel cart:1001 10088 获取所有商品:hgetall cart:1001

    (三)list

    LPUSH key value[value…] 从左边放元素 Rpush key value[value…] 从右边放元素 LPOP key 从左边拿元素 RPOP key 从右边拿元素

    例子:微博消息和公众号消息 阿信发微博,消息id为10018 LPUSH msg:{阿信-ID} 10018 查看最新消息:LRANGE msg:{阿信-id} 0 4 可以用管道分批

    (四)set

    sadd key number srem key number 删除元素 scard key 所有元素的个数 操作 交集SINTER set1 set2 set3 并集SUNION set1 set2 set3 差集SDIFF set1 set2 set3 (1减去2和3的并集)

    例子:抽奖小程序 SADD key {userid} 加入集合 SMEMBERS key 查看所有元素 SRANDMEMBER key [count] 随机抽取,但是抽取的元素还在原集合内 SPOP act:1001 3 随机抽取 三个,但是这三个元素不在原集合内了

    例子:点赞、收藏 点赞 SADD like:{消息id} {用户id} 取消点赞 SREM like:{消息id} {用户id} 检测用户是否点赞 SISMEMBER like:{消息id} {用户id}所有 所有点赞用户:SMEMBERS like:{消息id}

    例子:共同关注 sinter 用交集 我关注的人也关注它 用sismember 可能认识的人 用sdiff差集

    (五)zset

    zset集合操作实现排行榜 点击新闻: zincrby hotnews:20190819 1 xxx 排行榜前十: zrevrange hotnews:20190819 0 9 withscores(倒序前十)zrange 是正序 七日排行榜: zunionstore hotnews:20190813-20190819 7(并集) zinterstore 交集

    Processed: 0.009, SQL: 8