Redis的五种数据类型

发布于:2022-11-09 ⋅ 阅读:(8) ⋅ 点赞:(0) ⋅ 评论:(0)

一、String 类型

命令

基本操作

  • set (key) (value):设置键值对
  • setnx (key) (value):防止覆盖,设置键值对,(可以解决并发问题)
  • get(key):获取key对应的value
  • getset (key) (value) :先get再set,返回旧值,如果没有旧值返回nil
  • append (key) (value):向指定的key的value后追加字符串
  • del (key) :删除key
  • strlen (key):获取key对应值的字符串长度

数字value的加减

  • incr (key) :value + 1 (可用于数据信息自增列)
  • decr (key) :value - 1
  • incrby (key) (number):value + number
  • decrby (key) (number):value - number

设置键值过期时间

  • setex (key) (seconds) expire:设置键过期时间
  • ttl (key) :查看key剩余存活时间

使用场景

实战场景

  • 缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力
  • 计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。
  • session:常见方案spring session + redis实现session共享,

二、List列表

Redis中的List其实就是双端链表

在实际开发中相对比较少用,模拟队列、栈结构的业务需求

命令

基本操作

  • lpush key value1 value2 value3 ... :从左边依次添加键为key
  • rpush key value1 value2 value3 ...:从右边边依次添加键为key,
  • lpop key:: 取出左边第一个元素,取出后元素从队列删除
  • rpop key::取出右边第一个元素,取出后元素从队列删除
  • lrange key start end: 列出键对应的元素,从start索引开始,到end索引结束
  • lindex key index: 列出指定键为key的值中指定索引的元素。index为指定的索引号。不删除元素
  • strlen (key):获取key对应值的字符串长度

使用场景

  • 微博TimeLine: 有人发布微博,用lpush加入时间轴,展示新的列表信息。
  • 消息队列

三、Set集合

Redis 的 Set 是 String 类型的无序集合

  • 集合成员是**不可重复的**
  • Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)

命令

基本操作

  • sadd key member1 member2 ..... :向key中添加member1,member2,...元素,多个元素不允许重复
  • smembers key::列出key中的所有元素
  • sismember key member :判断key中是否有member元素
  • sinter key1 key2 :列出key1和key2中共同存在的元素 (交集)
  • sunion key1 key2 :列出key1和key2中所有不重复的元素(并集)
  • sdiff key1 key2:列出key1中有,key2中没有的元素(差集)

使用场景

  • 标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人
  • 点赞,或点踩,收藏等,可以放到set中实现

四、Hash散列

Redis hash 是一个 string 类型的 field(字段) 和 value(属性) 的映射表,hash 特别适合用于存储对象

一个hash可以存多个key-value,类似一个对象的多个字段和属性

命令

基本操作

  • hset key feild value::
  • 添加一个键为key,值为Map的数据,Map的键为feild,值为value
  • hget key feild:
  • 获取一个redis键为key的map中的feild键对应的值
  • hgetall key:
  • 获取redis键为key的整个map数据
  • hdel key feild:
  • 删除redis键为key的map中的feild独赢的数据

使用场景:

  • 缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。

五、Zset有序集合

Redis 有序集合和集合一样基本一致

区别:

**每个元素都会关联一个 double 类型的权重参数(score),**使得集合中的元素能够按score进行有序排列。

特点:

有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

命令

基本操作

  • zadd key score member
  • 向key中添加一个元素,元素绑定一个score分数值。列出数据时,会根据这个绑定分数值进行排序
  • zrange key start end withscores
  • 索引从start开始到end结束的元素,并且展示元素对应的分数值列出

使用场景:

排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

成绩排行:比如一个存储全班同学成绩的sorted set,其集合value可以是同学的学号,而score就可以是其考试得分, 形成了按成绩排序。

权重分配:可以用sorted set来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。