likes
comments
collection
share

Redis 数据类型详解

作者站长头像
站长
· 阅读数 84

1. string

string 是Redis的最基本的数据类型,同时起到了表示字符串以及数字两个作用。

字符串

string 数据类型在表示字符串时的相关指令:

  • set:会覆盖老的值
  • mset:原子性可覆盖的设置一组值
  • setex:同时设置过期时间
  • setnx:不覆盖老的值
  • get/mget:获取值
  • ttl:获取过期时间

数字

string 数据类型在表示数字(64位)时的相关指令:

  • incr:++i,不是数字报错
  • decr:--i,不是数字报错
  • incrby:可以指定增加的数值 -- decrby:可以指定减少的数值

2. hash

Redis中的hash 是一个键值对集合。

Redis本身就是kv形式的数据库,所以hash类型相当于在Redis的v的位置上又设置了一个kv字典。

基本使用

  • hset/hget/hdel:CRUD操作
  • hexists:判断是否存在fileds
  • hgetall/hkeys/hvals:获得hash中的全部键值对/键/值
  • hlen:长度
  • hmget/hmset:批量CRU

字典数据类型

Redis 底层就是一个大的字典数据类型,一个字典由两个hash表组成,一个用来存储数据,一个用来通过渐进式hash的方式完成扩容过程。

Redis 数据类型详解

渐进式hash:为了保证高可用性,redis底层的rehash过程并不是一蹴而就的。当负载因子达到阈值,会创建一张长度为两倍的hash表在副表,之后新建的kv都会放在新表上,查询操作也会把旧表的数据带到新表,渐进式的完成迁移过程,之后将副表升级为主表。

3. list

list 底层实际上是个链表,可以添加一个元素到列表的头部(左边)或者尾部(右边):

  • lpush/rpush 批量入队,队列不存在会创建空队列
  • lpushx/rpushx 批量入队,不创建新队列
  • lpop/rpop 出队
  • lrange 返回一段元素
  • lrem key count value 当count > 0,从前往后移出count个value值的元素,当count<0,从后往前移出-count个value值的元素
  • lset/lindex:设置或者返回索引为index的value
  • linsert key before/after pivot value 将value插入在pivot的前面或者后面
  • llen 长度
  • ltrim 对列表进行裁剪
  • rpoplpush 原子性的入队出队操作

4. set

Redis 的 set 是 string 类型的无序去重集合。

  • sadd 添加元素
  • scrad 返回长度
  • sismember 判断是否存在
  • smembers 返回所有成员
  • spop 随机删除返回一个元素
  • srandmember 随机返回一个元素
  • srem 删除指定元素
  • smove des key 将key原子性的复制给des

利用集合的交并集特性,比如在社交领域,我们可以很方便的求出多个用户的共同好友,共同感兴趣的领域等。

  • sunion 返回多个set的并集set
  • sinter 返回多个set的交集set
  • sdiff 返回多个set的差记set
  • sunionstore/sinterstore/sdiffstore des [key] 将返回的set赋值给des

5. zset

zset底层是跳表的数据结构。

跳表可以参考: juejin.cn/post/710728…

  • zadd 添加元素
  • zcrad 元素个数
  • zcount key min max 返回在某个打分区间的元素个数
  • zrange key start stop 返回某个排序区间的元素
  • zrank 返回某个元素的排名
  • zrem 批量删除
  • zremrangebysocre 移除某个分数区间的所有元素
  • zremrangebyrank 移除某个排名区间的所有元素

6. HyperLogLogs

基数统计,可以用很小的空间起到计数的作用。

7. Bitmap

位图,压缩空间表示0-1状态。

转载自:https://juejin.cn/post/7126947280220848136
评论
请登录