Redis五大数据类型及其相关操作

文章目录

  • 常用五大数据类型
    • Redis键(Key)有关操作
    • 库相关操作
    • 字符串(String)
      • 相关知识点
      • 常见操作
    • 列表(List)
      • 相关知识点
      • 常见操作
    • 集合(Set)
      • 相关知识点
      • 常见操作
    • 哈希(Hash)
      • 相关知识点
      • 常用操作
    • 有序列表(Zset)
      • 相关知识点
    • 常用操作

常用五大数据类型

  • string
  • set
  • list
  • hash
  • zset

Redis键(Key)有关操作

  • 查看当前库所有的key:keys *
  • 判断某个key是否存在:exists
  • 删除key:del key
  • 根据value选择非阻塞删除:unlink ,仅将keys从keyspace元数据中删除,真正的删除后续异步删除
  • 为给定key设置过期时间,单位秒:expire
  • 查看key还有多少秒过期:ttl , -1表示用不过期,-2表示已经过期
  • 查看当前数据库key的数量:dbsize

库相关操作

Redis默认提供了16个数据库,0-15,默认为0

  • 切换数据库:select
  • 清空当前库:flushdb
  • 通杀全部库:flushall

字符串(String)

相关知识点

  • String 类型是二进制安全的。意味着String类型可以包含任何数据,比如jpg图片和序列化的对象。

  • Redis中字符串value最多是512M

  • 对String的操作都是原子的,得益于Redis是单线程

  • String的数据结构为简单动态字符串,实现上类似于java的ArrayList,采用分配冗余空间的方式,来减少频繁分配空间。内部为当前字符串分配的空间一般是大于当前字符串长度的,当字符串长度小于1M时,为加倍扩容。当大于1M时,每次扩容1M,最大为512M。

常见操作

  • 设置key和value:set
  • 获取对应键值:get
  • 将新的value追加到原值的末尾:append
  • 获取value的长度:strlen
  • 只有在key不存在的时候设置key的值:setnx
  • 将key中存的数字增1:incr ,如果不存在,则set为1
  • 将key中的数字减1:decr ,如果不存在,则set为-1
  • 自定义减少/增加步长:incrby/decrby <步长>
  • 同时设置一个或多个key-value对:mset ...
  • 同时获取一个活多个value:mget
  • 当key不存在时,同时设置多个key-value对:msetnx ...
  • 获取范围中的值:getrange
  • 用给定的value覆写key所存储的支付串,从offset开始(索引从0开始):setrage
  • 设置key-value的同时设置过期时间,单位秒:setex
  • 获取旧值同时设置新值:getset

列表(List)

相关知识点

  • List的数据结构为Quicklist(双向),每个节点为Ziplist(压缩列表,内存连续)。当列表元素较少时,直接为Ziplist,当元素过多时,会转换为Quicklist。这样做的原因是因为普通的双向列表,哪怕一个节点只存一个int值,都要花费额外的空间去存prev和next两个指针,空间利用率太低了,使用Ziplist之后可以大大减少存储prev和next的空间浪费。

常见操作

  • 从左边/右边插入一个或多个值:lpush/rpush ...
  • 从左边/右边吐出一个值:lpop/rpop ,当列表为空时,键消失
  • 从列表1右边吐出一个值,插入到列2的左边:rpoplpush
  • 按照索引下标获得区间元素:lrange
  • 获得所以元素:lrange 0 -1
  • 按照索引下标获得元素:lindex
  • 获得列表长度:llen
  • 在指定value前/后插入值:linsert before/after
  • 从左边依次删除n个value:lrem
  • 将列表index的值替换为value:lset

集合(Set)

相关知识点

  • Set是String类型的无序去重集合,它底层是一个哈希表,因此相关操作复杂的为O(1)

常见操作

  • 将一个或多个元素加入到集合中:sadd ...
  • 取出集合所有值:smembers
  • 判断集合是否含有某元素:sismember
  • 求集合的元素个数:scard
  • 删除集合一个或多个元素:srem ...
  • 随机吐出一个值:spop
  • 随机取集合n个值(不会删除):srandmember
  • 将集合A中的一个值移动到集合B:smove value
  • 求两个集合的交集:sinter
  • 求两个集合的并集:sunion
  • 求两个集合的差:sdiff

哈希(Hash)

相关知识点

  • Hash对应的数据结构有两种:Ziplist和Hashtable。当元素短且少时用Ziplist,反之使用Hashtable

常用操作

  • 给key中的field赋值:hset
  • 取出key中field对应value:hget
  • 批量设置值:hmset
  • 判断指定field是否存在:hexists
  • 取出所有field:hkeys
  • 取出所有value:hvals
  • 给指定field上增量:hincrby
  • 当且仅当field不存在时,给field赋值:hsetnx

有序列表(Zset)

相关知识点

  • Zset和Set类似,是一个没有重复元素的集合,但是Zset多了一个score,因此他可以通过score进行排序了,也就是Zset是有序的。
  • Zset的底层数据结构为hash和跳跃表。hash的作用是关联value和score,确保value的唯一性;跳跃表的主要作用是给value排序

常用操作

  • 给集合添加元素:zset ...
  • 返回下标在区间中的所有元素:zrange [withscores],当带有withscores时,会返回分数
  • 返回score介于min、max之间(包括min、max)的元素,按min-max排序:zrangebyscore [withscores]
  • 返回score介于min、max之间(包括min、max)的元素,按max-min排序:zrevrangebyscore [withscores]
  • 为指定元素的score上增量:zincrby
  • 删除指定元素:zrem
  • 统计区间元素个数:zcount
  • 返回一个值在集合中的排名,从0开始:zrank

你可能感兴趣的:(redis,redis,数据库,缓存,nosql,nosql数据库)