Redis 数据结构
扁平化的特点,不存在数据库中列表查询一类的操作。Redis 可以做缓存或者内存数据库
数据结构
Value对象的通用数据结构
1 | typedef struct redisObject { |
- type:指String、List等结构化类型
- encoding:encoding指的是这些接口规划类型具体的实现(承载)方式,同一个类型可以有多个实现方式,例如String可以用int来承载,也可以用封装的cha[]来承载,List可以用ziplist或者链表来承载
- lru:表示本对象的空转时长,用于有限内存下长久不访问的对象的清理
- refcount:应用计数用于对象的垃圾回收
- ptr:指向的是以encoding方式实现这个对象的实际承载者的地址,例如String对象对应的sds地址
Redis 是二进制安全的存储,存储的数据编码格式有客户端自己指定,Redis 存储对应的字节。类似的还有 zookeeper、Kafka、hbase。
String
Redis中的String可以表示字符串、整数、浮点数、二进制四种类型,由Redis完成相互间的自动转型
基本操作:
存储二进制时,当偏移量超出当前字节的位数,也不会报错会继续开辟一个字节来存储
应用场景:
对于数值的自增自减可以用来做秒杀或者限流
二进制(bigmap):可以利用二进制偏移的特性记录用户是否每天登录
1
2
3SETBIT KEY1 2 1 # 第三天登录
SETBIT KEY1 9 1 # 第十天登录
BITCOUNT KEY1 0 -1 # 统计用户总共登录几次
List
RPUSH/LPUSH:RPUSH将元素添加在列表尾,L则是将元素添加在列表头部
RPOP/LPOP:取出给定key的列表的尾部或头部的元素并删除元素
LINDEX:去除给定的key对应列表索引的某个元素
LRANGE:取出给定key的索引范围内的元素,例如LRANGE key1 0, 3即取出前四个元素
LTRIM:将给定key的列表索引范围外的元素去除
BLPOP/BRPOP:BRPOP key1 key2 60,60秒内,key1非空则从key1对应的列表中pop最右元素,否则从key2中pop最右元素;如果60秒内两个列表始终为空,则超时返回
BLPOPPUSH/BRPOPPUSH:BRPOPPUSH key1 key2 60即60秒内如果key1对应的列表非空,则把key1列表的最右元素pop,并且放到key2最后
Hash:
HGET:返回给定key, field的值
HSET:设置给定key,field的值
HMGET:返回给定key,field1、field2…的值
HMSET:设置给定key,多个field的值
HGETALL:获取给定key的所有field和value
HDEL:删除给定key, field元素
HKEYS:获取给定的key的所有field名字
HVALS:获取给定key的所有value
HLEN:获取给定的key的字段数量
HINCRBY:HINCRBY key field increment,给定key的field元素value自增整数
HINCRBYFLOAT:HINCRBYFLOAT key field increment ,给定key的field元素value自增浮点数
HEXISTS:检查指定key field是否存在
HSETNX:HSETNX key field value只有当field字段不存在时,设置该元素
Set
SADD / SREM / SISMEMBER:实现向SET中增加、删除元素,以及检查元素是否存在
SCARD / SMEMBERS:实现统计元素个数、列出所有元素
SRANDMEMBER:随机获取元素的操作
1
2SRANDMEMBER key1 3 #返回set集合中随机的三个元素,如果超过了set集合的大小,则全部返回
SRANDMEMBER key1 -4 #随即返回4个元素,但是可能存在重复;如果超过了集合大小,则会返回要求的数值个数元素,存在重复SDIFF / SINTER:返回给定所有集合的差集/交集
SDIFFSTORE / SINTERSTORE destination key1 [key2]:返回所有集合的差集/交集,并且存储在 destination 中
SUNION:返回给定所有集合的并集
SUNIONSTORE destination key1 [key2]:返回所有集合的并集,并且存储在 destination 中
SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合
SPOP:移除并返回集合中的一个随机元素
Sorted-Set:
ZADD / ZREM:添加/删除元素
ZRANK:确定某个KEY值在本sorted-set内按照顺序排在第几位
ZRANGE:例如ZRANGE key start stop,获取sorted-set中排名为start和stop间的数据
ZRANGESCOPE:ZRANGEBYSCOPE key min max获取sorted-set中scope介于min和max之间的数据
ZSCOPE:确定某个key值在本sorted-set内对应的 score
ZINCRBY:有序集合中对指定成员的分数加上增量 increment
ZCARD:获取有序集合成员数
ZCOUNT:获取指定 score 区间的成员数
ZLEXCOUNT:在有序集合中计算指定字典区间内成员数量
ZRANGE / ZREVRANGE:通过索引区间返回有序集合的元素 / 反转
ZRANGEBYLEX / ZREVRANGEBYLEX:通过字典区间返回元素 / 反转
ZRANGEBYSCORE / ZREVRANGEBYSCORE:通过 score 区间返回元素 / 反转
ZRANK / ZREVRANK:返回指定成员的索引(排名) / 反向排名
ZINTERSTORE:交集
ZUNIONSTORE:并集