Redis 数据类型详解
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的方式完成扩容过程。
渐进式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