Redis-Hash类型
Redis的Value除了可以存储普通的字符串类型以外, 还可以存储Hash类型
Hash类型就相当于在JS中的对象, 可以把整个对象当做一个Value存储起来
1.增删改查
- 增加
hset key field value
hset user name simon
hset user age 18
- 查询
hget key field
hget user name
- 修改
如果字段不存在就是新增, 如果字段存在就是修改
hset key field value
hset user name woftsun
删除
- 删除指定的字段
hdel key field
hdel user name
- 删除对应key所有的数据
del key
del user
- 删除指定的字段
2.高级操作
- 批量新增
hmset key field1 value1 field2 value2
hmset user name simon age18 score 100
- 批量查询
hmget key field1 field2 field3
hmget user name age score
- 工具指令
hlen key 返回key存储的hash表中有多少条数据
hlen user
hexists key field 判断指定的key存储的Hash中是否有指定的字段
hexists user name 返回1表示存在
hexists user gender 返回0表示不存在
3.其他操作
- 查询所有field
hkeys key
hkeys user
- 查询所有value
hvals key
hvals user
- 查询所有的field和value
hgetall key
hgetall user
注意点:由于Redis是单线程的, 而以上操作都是非常耗时的, 所以不推荐在企业开发中使用
Redis-List类型
1.增删改查
Redis的Value除了可以存储字符串和Hash类型以外, 还可以存储List类型
List类型就相当于JavaScript中的数组, 可以把整个数组当做一个Value存储起来
注意点: List是有序的
- 增加
从第二个Value开始添加到前一个的左边
- lpush key value1 value2 value3
- lpush arr1 aa bb cc -> cc bb aa
从第二个Value开始添加到前一个的右边
- rpush key value1 value2 value3
- rpush arr2 aa bb cc -> aa bb cc
- 查询
查询指定范围数据
- lrange key startIndex endIndex
- 索引从0开始, endIndex等于-1表示取到最后
查询指定索引数据
- lindex key index
- 从前往后索引从0开始, 从后往前索引从-1开始
- 修改
lset key index value
注意 index从0开始
- 删除
- lpop删除左边元素
lpop key - rpop删除右边元素
rpop key - lrem删除指定个数的指定元素
lrem key count value - count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count
- count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值
- count = 0 : 移除表中所有与 value 相等的值
- ltrim按照索引剪切列表
ltrim key start end
2.其它操作
- 追加数据
lpush key value1,value2,... - 22 11 aa bb
rpush key value1,value2,... - 22 11 aa bb 11 22
- 插入数据
linsert key before|after oldValue newValue - 获取列表长度
llen key
3.列表实现简单数据结构
- 栈结构(水桶) - 先进后出
lpush + lpop - 队列结构(水管) - 先进先出
lpush + rpop - 所以在企业开发中, 如果需要需要'先进后出'或者'先进先出'的数据
我们就可以将这些数据存储到Redis的列表中
Redis-Set类型操作
集合就是一堆无序的数据, Redis可以把一堆无序的数据当做Value存储起来
注意点: 集合中不能出现重复的数据
1.增删改查
- 新增
sadd key value1, [value2, ...] 查询
返回集合中所有元素
- smembers key
- 注意点:由于Redis是单线程的, 而以上操作都是非常耗时的, 所以当元素比较多时需要慎用
返回集合中N个元素
- srandmember key [count]
删除
随机删除N个元素
- spop key
删除集合中的指定元素
- srem key value1, [value2, ...]
2.其它操作
追加元素
- sadd: key不存在就新增, 存在就追加
- sadd: 追加的元素不存在就追加, 追加的元素存在会自动忽略
统计集合中元素个数
- scard key
判断集合中是否有指定元素
- sismember key member
Redis中的集合是支持集合间的操作的, 也就是求交集,并集和差集
交集
- sinter key [key, ...]
- {1, 2, 3} ∩ {2, 3, 4} = {2, 3}
并集
- sunion key [key, ...]
- {1, 2, 3} ∪ {2, 3, 4} = {1, 2, 3, 4}
差集
- sdiff key [key, ...]
- {1, 2, 3} - {2, 3, 4} = {1}
- {2, 3, 4} - {1, 2, 3} = {4}
3.应用场景
抽奖
- srandmember key [count]
绑定标签
- sadd key value1, [value2, ...]
社交关系
- sinter key [key, ...]
- sunion key [key, ...]
- sdiff key [key, ...]
Redis-ZSet类型操作
ZSet是有序集合, Redis可以把一堆通过权重排序的数据当做一个Value存储起来
1.增删改查
- 新增
zadd key 权重 value 权重 value - 查询
- 查询指定排名范围内的数据
zrange key start end - 查询指定权重范围内的数据
zrangebyscore key 权重 权重 - 查询指定元素权重
zscore key element - 查询指定权重范围内元素个数
zcount key minscore maxscore - 查询集合中元素个数
zcard key - 删除
- 删除指定元素
zrem key value - 删除指定排名范围元素
zremrangbyrank key start end - 删除指定权重范围元素
zremrangbyscore key minscore maxscore
2.其它操作
增加或减少元素权重
- zincrby key score element
- 从高到低的操作
- zrevrange
- zrev...
2.Redis-ZSet类型-应用场景
- 存储排行榜数据