目录

  • 概述
  • 详解

1、概述

Redis反对五种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(汇合)、Zset(有序汇合)。

2、详解

1、String(字符串)

定义: String 是 redis 最根本的类型,一个 key 对应一个 value。String 类型是二进制平安的。因为 string 底层的实现是简略动静字符串 sds,是能够批改字符串。

利用场景: 单值缓存、对象缓存、分布式锁、惯例计数(粉丝数量、评论数量)、分布式session共享、分布式全局序列号。

具体实现:
单值缓存:

  set key value  get key

对象缓存:

  set user:1 value(json格局数据)  mset user:1:name tsingli user:1:balance 1888  mget user:1:name user:1:balance

惯例计数器:

  incr article:readcount:{文章id}  get article:readcount:{文章id}

分布式系统全局序列号:

  incrby orderid 1000  # redis批量生成序列号晋升性能

分布式锁:

  # 相干操作  线程1: setnx product:1001 true # 返回1代表获取锁胜利  线程2: setnx product:1001 true # 返回0代表获取锁失败  。。。执行业务操作  del product:1001               # 执行完业务开释锁  set product:1001 true ex 10 nx # 避免程序意外终止导致死锁  # 案例    setnx product:1001 true         1.查问商品1001的库存         2.减库存         3.从新把减完残余的库存更新回数据库    del product:1001

setnx 如果插入的key一样不会对数据有任何操作,如果第二次对库存再进行减对的话就返回谬误。

2、Hash(哈希)

定义: Hash是一个键值对汇合。他相当于java中的双重map。<key,<filed,value>>。
利用场景: 购物车。
具体实现:
购物车:

  # 阐明:    # 用户id为1001,商品的编码是10088。    # 用户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
3、List(列表)

定义: 列表是简略的字符串列表,依照插入程序排序,能够增加一个元素在列表的头部或者尾部。
利用场景: Stack(栈)= LPUSH + LPOP -> FILO //先进后出Queue(队列)= LPUSH + RPOP //先进先出Blocking MQ(阻塞队列)= LPUSH + BRPOP //音讯队列微博微信公众号音讯流
具体实现:
微博和微信公众号音讯流:

  # 李雷发微博,音讯id为10018      lpush msg:111111 10018  # 韩梅梅车发微博,音讯id为10086      lpush msg:111111 10086  # 查看最新微博音讯      lrange msg:11111 0 5 //0至5条微博音讯。
4、Set(汇合)

定义: Set 是 string 类型的无序汇合。
利用场景: 微信抽奖小程序、微信微博点赞、珍藏、标签、关注模型,就是可能意识的人的关系。
具体实现:
微信抽奖:

  # 点击参加抽奖退出汇合      sadd key {userId}  # 查看参加抽奖的所有用户      smembers key  # 抽取count名中奖者(1) // srandmember不会将元素从汇合中删除      srandmember key [count] //抽取两名中奖者 srandmember act:1008 2  # 抽取count名中奖者(2) // SPOP会将元素从汇合中删除      spop key 2

微信微博点赞、珍藏、标签:

  # 点赞    sadd like:{音讯ID} {用户id}  # 勾销点赞    srem like:{音讯ID} {用户id}  # 检查用户是否点过赞    sismember like:{音讯ID} {用户id}  # 获取点赞的用户列表    smembers like:{音讯ID}  # 获取点赞的用户树    scard like:{音讯ID}
5、Zset(有序汇合)

定义: zset和set一样也是string类型元素的汇合,且不容许反复的成员。不同的是每个元素都会关联一个dobule类型的分数,redis正是通过分数为汇合成员进行从小到大的排序,zset的成员是惟一的然而分数能够反复。