Redis 是一个开源的内存数据库,支持多种数据结构,常用于缓存、会话管理、实时分析等场景。Redis 提供了五种基本的数据类型:字符串、 列表、 集合、 散列/哈希、 有序集合。这篇博客,我们来详细介绍这五种数据类型,并且如何使用它们。
目录
一、字符串
Redis 中最简单和最常用的数据类型。可以存储任何类型的数据,例如字符串、整数、浮点数等。
1.1 设置值和获取值
格式:
- 设置值: set key value
- 获取值: get key
1.2 判断key是否存在
格式: exists key
1.3 追加字符串和获取字符串的长度
- key存在,直接在后面追加字符串,如果key不存在,相当于set命令,格式: append key value
- 获取字符串的长度,格式: strlen key
1.4 对value进行自增1和自减1操作
- 对value进行自增1操作(数值类型),格式: incr key
- 对value进行自减1操作(数值类型),格式: decr key
1.5 设置加减的步长
- 设置加的步长,格式: incrby key num
- 设置减的步长,格式: decrby key num
1.6 获取字符串某一段的内容/修改字符串某一段的内容
- 获取字符串某一段的内容:getrange key start end ,start和end是起始位置和结束位置,从0开始。
- 从指定位置开始替换字符串的值,格式: setrange key offset value,offset是起始位置计算的偏移量,value是要修改的值。
1.7 设置过期时间,查看剩余时间
- 设置过期时间,格式: setex key seconds value ,以秒为单位
- 查看剩余时间,格式: ttl key
1.8 同时设置或者获取多个值
- 同时设置多个值,格式: mset key1 value1 key2 value2 ...
- 同时获取多个值,格式:mget key1 key2...
1.9 先获取值,在设置值
先获取值,在设置值,格式: getset key value
1.10 总结
String类似的使用场景:value除了是字符串也可以是数字!
- 计数器
- 统计多单位的数量
- 对象缓存存储
二、列表
它本质上是有序的字符串列表,类似于链表。可以在列表的两端进行推入和弹出操作。在Redis中,我们可以用list完成栈、队列、阻塞队列 ,所有的list命令都是用l开头的。
2.1 从列表list的左边/右边插入值
- 从list的左边插入值,格式: lpush key value
- 从list的右边插入值,格式: rpush key value
2.2 获取指定范围的值
lrange获取指定范围的值,格式: lrange key start stop
2.3 从列表list的左边/右边移除值
- 从列表的左边移除值,格式: lpop key
- 从列表的右边移除值,格式: rpop key
2.4 获取指定下标的值
获取指定下标的值,格式: lindex key index
2.5 获取列表中的元素个数
获取列表中的元素个数,格式: llen key
2.6 移除列表中的元素
移除列表中count次指定元素,格式: lrem key count value
2.7 将列表1的最后一个元素移动到列表2中
移除列表中最后一个元素,将它添加到另一个列表中,格式: rpoplpush key1 key2
2.8 修改对应下标的列表中的值
根据下标替换列表中的值,格式: lset key index value
2.9 在列表中的任意指定值的前后位置插入值
将某个具体的value插入到列表中某个值的前面或后面,格式: linsert key before|after value new_value
2.10 小结
- 他实际上是一个链表,before or after, left,right都可以插入值
- 如果key不存在,创建新的链表,如果key存在,新增内容
- 如果移除了所有的值,空链表,也代表不存在
- 在两遍插入或者改动值,效率最高!
- 中间元素,相对来说效率会低一点
- 队列: LPOP RPUSH 栈: LPOP LPUSH
三、集合
无序的字符串集合,集合中的值是不能重复的。提供类似数学集合操作的命令,如交集、并集、差集等
3.1 往集合中添加值
给集合中添加值,格式: sadd key value1 value2 ...
3.2 获取集合中的所有值
获取集合中的所有值,格式: smembers key
3.3 判断某个值是否在集合中
判断某个值是否在集合中,格式: sismember key value
3.4 获取set中元素的个数
获取集合中元素的个数,格式: scard key
3.5 删除集合中的值
删除集合中的值,格式: srem key value1 value2....
3.6 从集合中获取随机值
从集合中获取随机值,格式: srandmember key count
3.7 随机删除指定个数的元素
随机删除指定个数个元素,格式: spop key count
3.8 将指定的元素从一个集合移动到另一个集合中
将指定的元素从一个集合中移动到另一个集合中,格式: smove set1 set2 value
四、哈希
Redis 中的哈希(Hash)是一种用于存储键值对集合的数据结构。它类似于编程语言中的哈希表或字典。哈希在 Redis 中非常有用,特别适合存储对象,例如用户信息(ID、姓名、年龄等)。可以将哈希看成是一个Map集合,key-value中的value是一个map集合。
- 字段(Field):哈希中的每个子键,类似于对象的属性名。
- 值(Value):与字段相关联的数据,类似于对象的属性值。
4.1 设置或者获取一个hash的值
- 设置一个hash的值,格式:hset key field1 value1
- 获取一个hash的值,格式:hget key field
4.2 设置或者获取多个hash的值
- 设置多个hash的值,格式: hmset key field1 value1 field2 value2 ...
- 获取多个hash的值,格式:hmget key field1 field2...
4.3 获取hash中的所有值
hgetall key
4.4 删除指定field的hash键值对
删除指定field的hash键值对,格式: hdel key field
4.5 获取hash的键值对的个数
获取hash的键值对的个数,格式: hlen key
4.6 判断hash中的字段是否存在
判断hash中的字段是否存在,格式: hexists key field
4.7 获取hash中所有的字段或者值
- 获取hash中所有的字段,格式: hkeys key
- 获取hash中所有的值,格式: hvals key
4.8 给hash中指定字段的值加上一个增量
hincrby key 增量
4.9 添加一个哈希值
如果不存在,则添加,如果存在,则失败,格式: hsetnx key field value
4.10 小结
hash的应用
- hash中存储经常变更的值:比如用户信息: user : name-value,age-value,sex-value
- hash更适合对象的存储,String更加适合字符串存储
五、有序集合
Redis 中的有序集合(Sorted Set)是一种将集合的元素与一个浮点数分数(score)关联的数据结构。与普通集合(Set)不同,有序集合中的元素是有序的,顺序是由分数决定的。它在需要维护数据顺序并支持范围查询的场景中非常有用。
5.1 向有序集合添加一个或多个成员
添加一个值,格式: zadd key scores value
5.2 获取zset中一个范围的值
获取zset中一个范围的值,格式: zrange key start stop
5.3 移除zset中指定的元素
移除zset中指定的元素,格式: zrem key value
5.4 查看zset中的元素个数
查看zset中的元素个数,格式: zcard key
至此,Redis数据库第二节就介绍完毕,都是一些简单的操作,熟练即可,没有什么难度,更多精彩内容见后期博客!感谢阅读,如果喜欢,点赞加关注!