redis数据类型

 

1. 字符串

字符串类型是最基础的数据结构,其他的几种数据结构都是在字符串类型基础上构建的。

命令

  1. 设置值 set key value [ex seconds] [px milliseconds] [nx | xx]
  • ex seconds 为键设置秒级别的超时时间
  • px millseconds 为键设置毫秒级别的超时时间
  • nx 键必须不存在才可以设置成功
  • xx 键必须存在可以设置成功 (redis还提供了setex和setnx两个命令来区分)
  1. 批量设置值 mset key value [key value ...]
  2. 获取值 get key
  3. 批量获取值 mget key
  4. 计数 incr key

内部编码

  • int 8个字节的长整型
  • embstr 小于等于39个字节的字符串
  • raw 大于39个字节的字符串

2. 哈希

哈希类型指的是键值本身又是一个键值对结构

命令

  1. 设置值 hset key field value (redis还提供了hsetnx,和setnx的作用一样)
  2. 获取值 hget key field
  3. 删除field hdel key field [field...]
  4. 计算field个数 hlen key
  5. 批量设置或获取 hmget key field[field...] hmset key filed vaule[field value...]
  6. 判断field 是否存在 hexists key field
  7. 获取所有的field hkeys key
  8. 获取所有的value hvals key

内部编码

哈希类型的内部编码有两种

  1. ziplist(压缩列表)当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)同时所有的值都小于hash-max-ziplist-value配置(默认是64字节)时,会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方便比hashtable优秀
  2. hashtable(哈希表)当无法满足ziplist的条件时,会使用hashtable作为哈希的内部实现,因为此时ziplsit的读写效率会下降,而hashtable的读写时间复杂度是O(1)

3. 列表

列表类型用于存储多个有序的字符串,可以充当栈和队列的角色

命令

添加操作

  1. 从右边插入元素 rpush key value [value...]
  2. 从左边插入元素 lpush key value [value...]
  3. 向某个元素前或者后插入元素 linsert key before|after pivot value (linsert listkey b a)

查找

  1. 获取指定范围内的元素 lrange key start end
  2. 获取指定索引下标的元素 lindex key index
  3. 获取列表长度 llen listkey

删除

  1. 从列表左侧弹出元素 lpop key
  2. 从列表右侧弹出元素 rpop key
  3. 删除指定元素 lrem key count vaule
当count>0从左到右,删除最多count个元素
当count<0从右到左,删除最多count个绝对值个元素
当count=0,删除所有

修改

  1. 修改指定下标的元素 lset key index newValue

内部编码

列表类型的内部编码有两种

  1. ziplist:和哈希一样,当列表的元素个数小于list-max-ziplist-entries配置(默认512个),同时列表中每个元素的值都小于list-mac-ziplist-value配置(默认64字节),会选用ziplist来作为列表的内部实现来减少内存的使用
  2. linkedlist(链表):当ziplist的条件无法满足时,会使用linkedlist作为内部实现

4. 集合

集合和列表不一样的是,集合中不允许有重复的元素,并且是无序的,不能通过索引下标获取元素

命令

集合内操作

  1. 添加元素 sadd key element [element...]
  2. 删除元素 srem key element [element...]
  3. 计算元素个数 scard key 时间复杂度O(1)
  4. 判断元素是否在集合内 sismember key element
  5. 随机从集合中返回指定个数元素 srandmember key [count]
  6. 从集合中随机弹出元素 spop key
  7. 获取所有元素 smember key

集合间操作

  1. 求多个集合的交集 sinter key [key...]
  2. 求多个集合的并集 sunion key [key...]
  3. 求多个集合的差集 sdiff key [key...]
  4. 将交集、并集、差集结果保存 (sinterstore distin key [key...]) (sunionstore distin key [key...]) (sdiffstore distin key [key...])

内部编码

集合类型的内部编码有两种

  1. intset(集合)当集合中的元素都是整数且元素个数小于set-max-intset-entries配置(默认512个)时,会选用intset来作为集合的内部实现,从而减少内存的使用
  2. hashtable:当集合类型无法满足intset的条件时,会使用hashtable来实现

5. 有序集合

有序集合在集合的基础上添加了可以排序的特性,通过给每一个元素设置一个分数(score)作为排序的依据,

命令

  1. 添加成员 zadd key score member [score member ...]
zadd命令添加了nx,xx,ch, incr四个选项
nx: member必须不存在,才可以设置成功,用于添加
xx: member必须存在,才可以设置成功,用于更新
ch: 返回此次操作后,有序集合元素和分数发生变化的个数
incr: 对score做增加
  1. 计算成员个数 zcard key
  2. 计算某个成员的分组 zscore key member
  3. 计算成员的排名
  • zrank key member(从低到高)
  • zrevrank key member(从高到低)
  1. 删除成员 zrem key member[member...]
  2. 增加成员的分数 zincrby key increment member
  3. 返回指定排名范围的成员
  • zrange key start end [withscore] (从低到高)
  • zrevrange key start end [withsores] (从高到低)
  1. 返回指定分数范围的成员
  • zrangebyscore key min max [withsores] [limit offset count]
  • zrevrangebyscore key max min [withscore] [limit offset count] (limit offset count 选项可以限制输出的起止位置和个数)
  1. 删除指定排名内的升序元素 zremrangebyrank key start end
  2. 删除指定分数范围内的成员 zremrangebyscore key min max

内部编码

有序集合类型的内部编码有两种

  1. ziplist:当有序集合元素小于zset-max-ziplist-entries配置(默认128个),且每个元素的值都小于zset-max-ziplist-value配置(默认64字节)会使用ziplist,节省内存。
  2. skiplist(跳跃表)当ziplist条件不满足时,会使用skiplist作为内部实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值