目录
一.Redis常见的数据结构
二.Redis数据结构对应的命令
1.String类型
2.Hash类型
3.List类型
4.Set类型
5.Sorted Set类型
一.Redis常见的数据结构
Redis支持多种数据结构,包括字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(sorted set)等。
- 字符串(string):字符串是Redis中最基本的数据结构,可以存储任意类型的数据,包括文本、数字等。
- 哈希(hash):哈希是一种键值对的集合,可以存储多个字段和对应的值,每个字段和值之间是一对一的关系。
- 列表(list):列表是一个按照插入顺序排序的字符串元素集合,可以在列表的两端进行元素的插入和删除操作,支持对列表进行范围检索。
- 集合(set):集合是一个无序的、不重复的字符串元素集合,支持对集合进行交集、并集、差集等操作。
- 有序集合(sorted set):有序集合是一个有序的、不重复的字符串元素集合,每个元素都关联一个分数,可以根据分数进行范围检索和排名。
除了以上常见的数据结构,Redis还支持一些特殊的数据结构,如位图(bitmap)、HyperLogLog等。这些数据结构的使用可以提供更多的功能和性能优化。
二.Redis数据结构对应的命令
1.String类型
Redis中的String类型是一种简单的键值对数据结构,每个键对应一个字符串值。String类型的值可以是任何类型的数据,比如整数、实数、布尔值、二进制数据等,但它们都以字符串的形式存储在Redis中。
我们可以用一个图表来表示这样的类型结构:
对于上面的例子,不管是那种格式,在Redis中都是使用的字节数组形式存储,只不过是编码方式不同。
String类型支持丰富的操作,可以对字符串进行追加、截取、替换、计数、排序等操作。同时,String类型还支持一些特殊的操作,比如对字符串进行原子性的自增、自减操作。
在Redis中,String类型是最基础、最常用的数据类型之一,可以用于存储各种类型的数据,从简单的键值对存储到复杂的数据结构。在实际应用中,String类型常被用于缓存数据、计数器、分布式锁等场景。
Redis中String类型常见命令有:
- SET key value:设置键值对,将key设为value。
- GET key:获取key对应的值。
- INCR key:将key对应的值自增1。
- DECR key:将key对应的值自减1。
- APPEND key value:将value追加到key对应的值的末尾。
- STRLEN key:返回key对应的值的长度。
- SETEX key seconds value:设置带有过期时间的键值对,将key设为value,并设置过期时间为seconds秒。
- GETSET key value:获取key对应的值,并将key设为新的值value。
- MSET key1 value1 key2 value2 ...:设置多个键值对。
- MGET key1 key2 ...:获取多个key对应的值。
- SETNX key value:当key不存在时,设置键值对,将key设为value。
- MSETNX key1 value1 key2 value2 ...:当所有给定的key都不存在时,设置多个键值对。
- STRCMP key1 key2:比较两个字符串key1和key2的大小,返回一个整数。
- GETRANGE key start end:获取key对应的值的指定范围的子字符串。
- SETRANGE key offset value:将key对应的值在指定偏移量offset处开始替换为value。
- SETBIT key offset value:将key对应的值的指定偏移量offset处的位设置为value。
一般建议在命名key的时候使用分层命名,这样更容易理解,也可以避免命名冲突的情况
set luming:user:1 '{"id":1, "name":"Jack", "age": 21}'
set luming:user:2 '{"id":2, "name":"Rose", "age": 18}'
get luming:user:1
get luming:user:2
也就是下图这样的结构:
2.Hash类型
在Redis中,Hash是一种用于存储键值对的数据结构,它类似于字典或映射。Hash类似于Java中的HashMap。 Redis的Hash类型提供了一种将多个字段存储在单个键下的方法,其中每个字段都是一个键值对。 Hash类型在存储和检索数据时非常高效,并且可以在常数时间内执行插入、删除和查找操作。
为了方便理解,笔者这里还是给出一个图表结构:
Hash类型在Redis中非常常用,特别适用于存储和查询对象的属性。例如,可以使用Hash类型来存储用户对象的属性,每个字段可以代表一个属性,值则是该属性的值。这样可以方便地查询和更新用户的属性。
Redis中Hash类型常见命令:
- HSET key field value:将哈希表 key 中的域 field 的值设置为 value。
- HGET key field:返回哈希表 key 中给定域 field 的值。
- HMSET key field value [field value ...]:将哈希表 key 中的多个域 field 的值设置为多个 value。
- HMGET key field [field ...]:返回哈希表 key 中,一个或多个给定域 field 的值。
- HDEL key field [field ...]:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。
- HEXISTS key field:查看哈希表 key 中,给定的域 field 是否存在。
- HKEYS key:返回哈希表 key 中的所有域。
- HVALS key:返回哈希表 key 中的所有值。
- HLEN key:返回哈希表 key 中域的数量。
- HINCRBY key field increment:为哈希表 key 中的域 field 增加 increment。
- HSCAN key cursor [MATCH pattern] [COUNT count]:迭代哈希表 key 中的元素。
一些部分示例:
hset luming:user:3 name lilei
hset luming:user:3 gender man
hset luming:user:3 age 25
hget luming:user:3 name
hget luming:user:3 gender
hget luming:user:3 age
hmset luming:user:4 name wangliang gender man age 30
hmget luming:user:4 name gender man
hgetall luming:user:4
hkeys luming:user:3
hvals luming:user:3
3.List类型
Redis中的List类型是一种有序的字符串列表,类似于Java中的LinkedListList。类型的操作可以在列表的两端进行,可以从列表的头部插入元素,也可以从列表的尾部插入元素,还可以通过索引访问和修改列表中的元素。
笔者这里还是给出List类型的图示结构:
以下是一些常见的List类型操作命令:
- LPUSH:将一个或多个元素插入到列表的头部。
- RPUSH:将一个或多个元素插入到列表的尾部。
- LPOP:移除并返回列表的头部元素。
- RPOP:移除并返回列表的尾部元素。
- LINDEX:通过索引获取列表中的元素。
- LSET:通过索引设置列表中的元素。
- LRANGE:获取列表中指定范围的元素。
- LLEN:获取列表的长度。
- LINSERT:在列表中某个元素的前面或后面插入一个新元素。
- LREM:从列表中删除指定数量的元素。
- LTRIM:截取指定范围的列表元素。
- BLPOP:阻塞式地弹出列表的头部元素,如果列表为空则阻塞。
- BRPOP:阻塞式地弹出列表的尾部元素,如果列表为空则阻塞。
List类型常用于实现消息队列、任务队列以及实时聊天等场景。
4.Set类型
在Redis中,Set类型是一种无序的、不重复的数据结构,它于Java中的HashSet类似。Set类型的操作包括添加元素、删除元素、判断元素是否存在、获取元素数量等。
笔者这里还是给出它的图示结构:
常用的Set类型操作命令包括:
- SADD key member1 [member2 ...]:向Set类型的key中添加一个或多个元素。
- SREM key member1 [member2 ...]:从Set类型的key中删除一个或多个元素。
- SMEMBERS key:获取Set类型的key中的所有元素。
- SISMEMBER key member:判断member是否是Set类型的key中的元素。
- SCARD key:获取Set类型的key中元素的数量。
- SPOP key [count]:随机从Set类型的key中删除并返回一个或多个元素。
- SRANDMEMBER key [count]:随机获取Set类型的key中的一个或多个元素,不删除。
- SUNION key1 [key2 ...]:返回多个Set类型的key的并集。
- SINTER key1 [key2 ...]:返回多个Set类型的key的交集。
- SDIFF key1 [key2 ...]:返回多个Set类型的key的差集。
Set类型适用于需要存储不重复元素的场景,比如存储用户的标签、统计用户的好友列表等。由于Set类型的元素是无序的,不支持按照固定顺序获取元素,如果需要按照顺序获取元素,可以使用Sorted Set类型。
5.Sorted Set类型
Redis中的SortedSet(有序集合)是一种特殊的数据类型,它可以存储多个元素,每个成员都有一个对应的score属性,通过score可以对元素进行排序。SortedSet的特点是插入、删除、查找的复杂度都是O(log N),其中N是集合中的元素数量。
SortedSet的使用场景很广泛,比如:
- 排行榜:可以将用户的得分作为分数,实现排行榜功能。
- 订阅者列表:可以根据订阅者的订阅数量或者最后一次订阅的时间作为分数,实现订阅者列表的排序。
- 任务调度:可以将任务的执行时间作为分数,实现按照时间顺序执行任务。
Redis中SortedSet常见命令有:
- ZADD:向SortedSet中添加一个或多个成员,同时指定对应的score。
- ZRANGE:按索引区间获取SortedSet中的成员,并按score升序排列。
- ZREVRANGE:按索引区间获取SortedSet中的成员,并按score降序排列。
- ZRANGEBYSCORE:按分值区间获取SortedSet中的成员,并按score升序排列。
- ZREVRANGEBYSCORE:按分值区间获取SortedSet中的成员,并按score降序排列。
- ZCOUNT:计算score在指定区间内的成员数量。
- ZSCORE:获取指定成员的score。
- ZINCRBY:将指定成员的score增加指定的增量值。
- ZRANK:获取指定成员在SortedSet中的排名,按score升序。
- ZREVRANK:获取指定成员在SortedSet中的排名,按score降序。
- ZREM:从SortedSet中移除一个或多个成员。
- ZCARD:获取SortedSet的成员数量。
- ZLEXCOUNT:计算成员在字典序区间内的数量。
- ZRANGEBYLEX:按字典序区间获取SortedSet中的成员。
- ZREMRANGEBYRANK:移除按照排名区间的成员。
- ZREMRANGEBYSCORE:移除按照score区间的成员。
- ZSCAN:迭代SortedSet中的成员。
本次的分享就到此为止了,希望我的分享能给您带来帮助,也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见