redis数据结构
Redis支持哪些数据结构?
string,hash,list,set,Sortedset(初级水平)
HyperLogLog,Geo,Pub/Sub (中级水平)
Redis Module , BloomFilter(避免缓存击穿),RedisSearch, Redis-M(高级水平)
- String类型
Value可以说是String也可以是数字
一般做一些复杂的计数功能的缓存
操作:
1) 赋值和取值
Set Key Value
Get Key
2) 递增数字
存储的字符串是数字 场合
INCR Key
假设
客户端A INCR num ,5-》6
同时客户端B INCR num 5-》6?7?
会不会出现数据不一致的状况
答案是不会,每个redis的命令都是原子操作
Redis对Key的命名没有特殊规定,方便起见最好“对象类型:对象ID:对象属性”,比如“USER:1:FRIENDS”
另外还有一些常用命令:
INCRBY KEY increment
DECR KEY
DECRBY KEY increment
INCRBYFLOAT KEY increment
APPEND KEY Value
STRLEN KEY
MGET KEY [KEY…]
例如:MGET KEY1 KEY2
MSET KEY VALUE [KEY VALUE…]
GETBIT KEY OFFSET
SETBIT KEY OFFSET VALUE
BITCOUNT KEY [start] [end]
BITOP operation destkey key [key…]
注意:位操作索引从0开始
- Hash类型
Hash类型是一个String类型的field和value的键值对,每个hash可以存储232 - 1 键值对(40多亿)。
hash类型的(key, field, value)的结构与对象的(对象id, 属性, 值)的结构相似
应用场景:
比如购物车:
以用户id为key,商品id为field,商品数量为value,恰好构成了购物车的3个要素,如下图所示。
|filed1|--|value|
Key--|filed2|--|value|
|filed3|--|value|
操作:
HSET Key field value
HGET Key field
HMSET Key field value [field value]
HMGET Key field [field…]
HGETALL key
HEXISTS key field
HSETNX key field value
HINCRBY key field increment
HDEL key field [field…]
HKEYS Key
HVALS key
HLEN key
- 集合
集合中每个元素的值不同,并且没有顺序。
操作
SADD key member1 [member2] 集合中添加一个或多个成员
SCARD key 获取集合的成员数
SDIFF key1 [key2] 返回给定所有集合的差集
另外还有 求并集,交集的操作
还有其他一些操作参考https://www.runoob.com/redis/redis-sets.html
应用场景
比如 微博中关注好友,共同好友,共同关注
- 有序集合
和集合一样,不同的是元素是有序的
参考:
https://www.cnblogs.com/pangzizhe/p/10657801.html
《redis入门指南》