redis 数据结构

基础知识

1 QPS:并发10万/s

基本数据机构

基本数据机构:string hash list set zset

一 string

  • 单值缓存
    set key value
    get key

  • 对象缓存

  1. set user:1 value(json 格式)
  2. MSET user:1:name zhuge user:1:balance 10000
    MGET user:1:name user:1:balance


    字符mset-mget.png

    总结:以上两种方式区别:修改单个值用第二种方法更快而且更容易

  • 分布式锁
    解释:在多台机器下对同一个资源进行修改,需要保持数据安全
    setnx key value(若key相同,则不会对该内容进行修改)
    //执行业务操作
    del key

  • 计数器
    例如:文章的浏览量
    INCR key

  • spring session+集群session共享

  • 分布式实现全局序列号
    incrby orderId 1000

二 哈希

  • 对象缓存
    hmset key field1 value field2 value
    hmget key field1 field2
    哈希hmset-hmget.png
  • 电商购物车
  1. 用户id为key
  2. 商品id 为field
  3. 商品数量为value
    hset cart:1 10088 1
    hincrby cart:1 10088 1 +增量
    hlen cart:1 商品总数
    hdel cart:1 field 删除商品
    hgetall cart:1 获取所有商品

哈希优势

  • 相比string 消耗内存和cpu小
  • 相比string 内存节省空间
    劣势
  • 超时不能作用在field
  • redis集群架构下不适合大规模使用

三 list

  • 常用数据结构
  1. stack = lpush+lpop-》先进后出FILO
  2. Queue = lpush+rpop->先进先出 FIFO
  3. blocking queue = lpush+brpop
  • 微信或者微博的消息流
    lpush msg:userID msgId
    lpush msg:userID msgId
    查看最新微博消息
    Lrange msg:userId start top
    list消息流.png

四 集合SET

  • 微信抽奖小程序
  1. 点击参与抽奖加入集合
    sadd act:1000 user1
    sadd act:1000 user2
    sadd act:1000 user3
  2. 查看所有抽奖用户
    smembers key
    3.随机抽取几名中奖者
    srandmember key count(用户不会在集合中删除)
    spop key count(用户会在集合中删除)
  • 微信微博点赞收藏标签
  1. 点赞
    sadd like:1001 userid
  2. 取消点赞
    srem like:1001 userid
    3.查看用户是否点过赞
    sismember like:1001 userid
  3. 获取点赞用户列表
    smembers like:1001
  4. 获取点赞用户数
    scard like:1001
  • 微博微信关注模型
  1. 我和a共同关注
    sinter meSet aSet(去交集)
  2. 我关注的人也关注了a
    sismember bSet a
  3. 我可能认识的人
    sdiff aSet meSet(基于他人与我关注的差集)
  • 根据商品属性选择电商商品
    sinter property1 property2(交集)

五 zset(有序集合)

  • 排行榜
  • 微博热搜
    zincrby hotNews:20210626 1 protect hongkong 为某个属性增加1分
    zrevrange hotNews:20210626 start top 排名前几
    zunionstore destkey numkey key 取并集(取7天浏览量的并集)

Redis 的单线程和高性能

  • 单线程性能高的原因:数据操作都在内存里,运算也在内存。同时单线程减少了上下文切换的开销
  • redis 多路复用:利用epoll实现多路复用 maxclients(默认10000)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容