【Redis高手修炼之路】②Redis的五大数据类型

网友投稿 239 2022-11-05


【Redis高手修炼之路】②Redis的五大数据类型

目录

​​1.字符串​​

​​1.1 常用命令:​​

​​1.1.1 添加、查询、获取长度、字符串的追加​​​​1.1.2 批量插入和查询​​​​1.1.3 设置key值的生存时间​​​​1.1.4 key值的自增和自减​​

​​1.2 使用场景​​

​​2.哈希​​

​​2.1 常用命令​​

​​2.1.1 添加、查询、删除、获取长度以及是否存在​​​​2.1.2 key值的增加​​​​2.1.3 批量添加字段​​

​​2.2 三种存储方式的区别​​

​​3.列表​​

​​3.1 常用命令​​

​​3.1.1 列表的插入、移除及查询​​​​3.1.2 对已有列表进行更新、截取元素​​

​​3.2 使用场景​​

​​4.集合​​

​​4.1 常用命令​​

​​4.1.1 添加、删除​​​​4.1.2 交集、并集、差集​​​​4.1.3 随机数​​

​​4.2 使用场景​​

​​5.有序集合​​

​​5.1 常用命令​​

​​5.1.1 添加、查询​​​​5.1.2 排序、成员值的更新​​​​5.1.3 交集​​

​​5.2 使用场景​​

1.字符串

字符串是Redis最基础的数据类型:字符串类型实际可以存储字符串、数字、二进制数据;Redis中的键都是字符串类型,值也支持字符串类型;字符串类型的存储空间是有限的,最大可以存放512M的数据。

1.1 常用命令:

1.1.1 添加、查询、获取长度、字符串的追加

​​set key value​​设置指定 key 的值

​​get key​​获取指定 key 的值

​​getrange key start end​​返回 key 中字符串值的子字符

​​setrange key offset value​​用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。

​​strlen key​​返回 key 所储存的字符串值的长度

​​append key value​​如果 key 已经存在并且是一个字符串,将 value 追加到 key 原来的值的末尾

127.0.0.1:6379> set name tomOK127.0.0.1:6379> get name"tom"#当值为字符串时要加双引号,或者之间加逗号隔开,空格代表命令结束127.0.0.1:6379> set address "bei jing" OK127.0.0.1:6379> set hobby basketball,footballOK127.0.0.1:6379> get address"bei jing"127.0.0.1:6379> get hobby"basketball,football"127.0.0.1:6379> append hobby "music" #追加字符串(integer) 24127.0.0.1:6379> get hobby"basketball,footballmusic"127.0.0.1:6379> getrange address 0 2 #截取字符串,下标从0开始"bei"127.0.0.1:6379> strlen address(integer) 8

1.1.2 批量插入和查询

​​mset key value [key value ...]​​同时设置一个或多个 键值对

​​mget key1 [key2...]​​获取一个或多个给定key的值

​​msetnx key value [key value ...]​​同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在

127.0.0.1:6379> mset a 1 b 2 c 3OK127.0.0.1:6379> mget a b c1) "1"2) "2"3) "3"127.0.0.1:6379> msetnx weight "170" height "100"(integer) 1127.0.0.1:6379> mget weight height1) "170"2) "100"

1.1.3 设置key值的生存时间

​​setex key seconds value​​设置key-value ,并设置key的生存时间(秒)

​​psetex key milliseconds value​​设置key-value ,并设置key的生存时间(毫秒)

​​setnx key value​​在 key 不存在时设置 key 的值

127.0.0.1:6379> setex id 10 "1001"OK127.0.0.1:6379> get id"1001"127.0.0.1:6379> get id #10s之后就过期了(nil)127.0.0.1:6379> psetex key 10000 abcOK127.0.0.1:6379> get key"abc"127.0.0.1:6379> get key(nil)127.0.0.1:6379> setnx id "1002"(integer) 1127.0.0.1:6379> get id"1002"

1.1.4 key值的自增和自减

​​incr key key​​值自动增一

​​decr key key​​值自动减一

​​incrby key increment​​将 key 所储存的值加上给定的增量值(increment)

​​incrbyfloat key increment​​将 key 所储存的值加上给定的浮点增量值(increment)

​​decrby key decrementkey​​所储存的值减去给定的减量值(decrement)

127.0.0.1:6379> set age "15"OK127.0.0.1:6379> get age"15"127.0.0.1:6379> incr age(integer) 16127.0.0.1:6379> incrby age 5(integer) 21127.0.0.1:6379> decr age(integer) 20127.0.0.1:6379> decrby age 5(integer) 15127.0.0.1:6379> incrbyfloat age 1.5"16.5"

1.2 使用场景

2.哈希

Redis的键所对应的值本身又是一个键值对结构

与关系型数据库的区别:

1.关系型数据库是结构化的,若添加新的列,会影响到所有的行,而哈希类型是稀疏的,每个键可以有不同的哈希数据;

2.关系型数据库则可以支持复杂的关系查询

2.1 常用命令

2.1.1 添加、查询、删除、获取长度以及是否存在

​​hset key field value​​将哈希表 key 中的字段 field 的值设为 value

​​hget key field​​获取存储在哈希表中指定字段的值/td>

​​hdel key field2 [field2]​​删除一个或多个哈希表字段

​​hkeys key​​获取所有哈希表中的字段

​​hvals key​​获取哈希表中所有值

​​hgetall key​​获取在哈希表中指定 key 的所有字段和值

​​hlen key​​获取哈希表中字段的数量

​​hexists key field​​查看哈希表 key 中,指定的字段是否存在

127.0.0.1:6379> hset user name tom age "18"(integer) 2127.0.0.1:6379> hget user name"tom"127.0.0.1:6379> hgetall user1) "name"2) "tom"3) "age"4) "18"127.0.0.1:6379> hdel user age(integer) 1127.0.0.1:6379> hgetall user1) "name"2) "tom"127.0.0.1:6379> hkeys user1) "name"127.0.0.1:6379> hlen user(integer) 1127.0.0.1:6379> hexists user name(integer) 1127.0.0.1:6379> hexists user age(integer) 0127.0.0.1:6379> hvals user1) "tom"

2.1.2 key值的增加

​​hincrby key field increment​​为哈希表 key 中的指定字段的整数值加上增量 increment

​​hincrbyfloat key field increment​​为哈希表 key 中的指定字段的浮点数值加上增量 increment

127.0.0.1:6379> hset user score "85"(integer) 1127.0.0.1:6379> hincrby user score 5(integer) 90127.0.0.1:6379> hincrbyfloat user score 1.5"91.5"

2.1.3 批量添加字段

​​hsetnx key field value​​在字段 field 不存在时,设置哈希表字段的值

​​hmget key field1 [field2]​​获取所有给定字段的值

​​hmset key field1 value1 [field2 value2]​​同时将多个域值对设置到哈希表中

127.0.0.1:6379> hsetnx user grade 3(integer) 1127.0.0.1:6379> hmget user name age grade1) "tom"2) "20"3) "3"127.0.0.1:6379> hmset user gender M class 1OK127.0.0.1:6379> hgetall user 1) "name" 2) "tom" 3) "age" 4) "20" 5) "score" 6) "91.5" 7) "grade" 8) "3" 9) "gender"10) "M"11) "class"12) "1"

2.2 三种存储方式的区别

常规的字符串 优点:每个键都可以单独设置过期时间; 缺点:键占用大量内存,信息内聚性差;序列化字符串 优点︰编程简单; 缺点:全量更新(反序列化->更新->序列化);哈希类型 优点:每个键都可以单独更新; 缺点:如果没有控制好编码,会消耗更多内存。

3.列表

1.列表是线性有序的数据结构; 2.列表中的元素是可以重复的; 3.—个列表最多能存储232-1个元素。

3.1 常用命令

3.1.1 列表的插入、移除及查询

​​lpush key value1 [value2]​​将一个或多个值插入到列表头部(左插入)

​​rpush key value1 [value2]​​在列表尾部添加一个或多个值(右插入)

​​rpop key​​移除并输出列表最后一个元素

​​lpop key​​移出并输出列表的第一个元素

​​llen key​​获取列表长度

​​lindex key index​​ 通过索引获取列表中的元素

​​lrange key start stop​​获取列表指定范围内的元素

127.0.0.1:6379> lpush list 3 2 1(integer) 3127.0.0.1:6379> rpush list 4 5 6(integer) 6127.0.0.1:6379> lrange list 0 -1 # 相当于lrange list 0 5 ,-1表示末尾1) "1"2) "2"3) "3"4) "4"5) "5"6) "6"127.0.0.1:6379> rpop list"6"127.0.0.1:6379> lpop list"1"127.0.0.1:6379> llen list(integer) 4127.0.0.1:6379> lindex list 3"5"

3.1.2 对已有列表进行更新、截取元素

​​lrem key count value​​根据value移除指定数量的值

​​lset key index value​​通过索引更新元素

​​linsert key before|after pivot value​​在列表的元素前或者后插入元素

​​lpushx key value​​ 将一个或多个值插入到已存在的列表头部

​​rpushx key value​​将一个或多个值插入到已存在的列表尾部

​​ltrim key start stop​​裁剪列表元素,只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

​​rpoplpush source destination​​移除列表的最后一个元素,并将该元素添加到另一个列表并返回

127.0.0.1:6379> lpush mylist a 1 a 2 b 3 b 4 c 5 a 6(integer) 12127.0.0.1:6379> lrem mylist 2 a #删除前两个a(integer) 2127.0.0.1:6379> lrange mylist 0 -1 1) "6" 2) "5" 3) "c" 4) "4" 5) "b" 6) "3" 7) "b" 8) "2" 9) "1"10) "a"127.0.0.1:6379> lset mylist 1 12OK127.0.0.1:6379> linsert mylist before 3 111 #在3前面插入111(integer) 11127.0.0.1:6379> lrange mylist 0 -1 1) "6" 2) "12" 3) "c" 4) "4" 5) "b" 6) "111" 7) "3" 8) "b" 9) "2"10) "1"11) "a"127.0.0.1:6379> lpushx mylist aaa(integer) 12127.0.0.1:6379> rpushx mylist bbb(integer) 13127.0.0.1:6379> lrange mylist 0 -1 1) "aaa" 2) "6" 3) "12" 4) "c" 5) "4" 6) "b" 7) "111" 8) "3" 9) "b"10) "2"11) "1"12) "a"13) "bbb"127.0.0.1:6379> ltrim mylist 0 5OK127.0.0.1:6379> lrange mylist 0 -11) "aaa"2) "6"3) "12"4) "c"5) "4"6) "b"127.0.0.1:6379> rpoplpush mylist newlist"b"

3.2 使用场景

消息队列:生产者通过lpush命令从列表左侧插入元素;消费者通过brpop命令从列表右侧弹出元素;内容列表:有序存储用户的待办事项、收藏文章等内容;

4.集合

1.集合中的元素是无序、不可重复的,一个集合最多能存储232-1个元素; 2.集合除了支持对元素的增删改查之外,还支持对多个集合取交集、并集、差集。

4.1 常用命令

4.1.1 添加、删除

​​sadd key member1 member2​​向集合中添加一个或多个成员

​​scard key​​获取集合成员数

​​spop key​​移除并返回集合中的一个随机元素

​​smembers key​​返回集合中的所有成员

​​sismember key member​​判断member是否是集合key的成员

​​srem key member1 member2​​移除集合中的一个或多个成员

​​smove source destination member​​将 member 元素从 source 集合移动到 destination 集合

127.0.0.1:6379> sadd myset1 a b c d e f(integer) 6127.0.0.1:6379> sadd myset2 d e f g h i(integer) 6127.0.0.1:6379> scard myset1(integer) 6127.0.0.1:6379> smembers myset11) "b"2) "a"3) "c"4) "f"5) "d"6) "e"127.0.0.1:6379> spop myset1 2 # 随机移除2个成员1) "e"2) "b"127.0.0.1:6379> sismember myset1 c #查询集合中是否存在c(integer) 1127.0.0.1:6379> srem myset1 f #将集合中的f移除(integer) 1127.0.0.1:6379> smove myset1 newset a #将a从集合myset1移动到newset(integer) 1127.0.0.1:6379> smembers newset1) "a"

4.1.2 交集、并集、差集

​​sinter key1 key2返​​回给定的集合的交集

​​sunion key1 key2​​返回给定的集合的并集

​​sdiff key1 key2​​返回给定的集合的差集

​​sinterstore destination key1 key2​​返回给定的集合的交集并存到destination中

​​sunionstore destination key1 key2​​返回给定的集合的并集并存到destination中

​​sdiffstore destination key1 key2​​返回给定的集合的差集并存到destination中

127.0.0.1:6379> sinter myset1 myset21) "d"2) "e"127.0.0.1:6379> sunion myset1 myset21) "d"2) "e"3) "a"4) "c"5) "g"6) "h"7) "f"8) "b"9) "i"127.0.0.1:6379> sdiff myset1 myset21) "a"2) "b"3) "c"127.0.0.1:6379> sinterstore newset1 myset1 myset2(integer) 2127.0.0.1:6379> smembers newset11) "d"2) "e"127.0.0.1:6379> sunionstore newset2 myset1 myset2(integer) 9127.0.0.1:6379> smembers newset21) "d"2) "e"3) "a"4) "c"5) "g"6) "h"7) "f"8) "b"9) "i"127.0.0.1:6379> sdiffstore newset3 myset1 myset2(integer) 3127.0.0.1:6379> smembers newset31) "a"2) "b"3) "c"

4.1.3 随机数

​​srandmember key count​​随机返回集合中的一个或多个元素

127.0.0.1:6379> srandmember myset1 2 #随机返回两个元素1) "b"2) "a"127.0.0.1:6379> srandmember myset1 "a"127.0.0.1:6379> srandmember myset1 "d"

4.2 使用场景

点赞:统计一篇文章的点赞数量

命令:scard like

抽奖:在一组数据中随机弹出一个元素以达到抽奖的目的

命令:spop user

共同关注:通过求两个集合的交集来达到目的

命令:sinterstore follow follow1 follow2

5.有序集合

1.有序集合保留了集合元素不能重复的特点; 2.有序集合会给每个元素设置一个分数,并以此作为排序的依据; 3.有序集合不能包含相同的元素,但是不同元素的分数可以相同。

5.1 常用命令

5.1.1 添加、查询

​​zadd key score1 member1 score2 member2​​向有序集合添加一个或多个成员,或者更新已存在成员的分数

​​zrange key start stop [WITHSCORES]​​通过索引区间返回有序集合成指定区间内的成员

​​zrangebyscore key min max [WITHSCORES] [LIMIT]​​通过分数返回有序集合指定区间内的成员

​​zcount key min max​​计算在有序集合中指定区间分数的成员数

127.0.0.1:6379> zadd scores 70 tom(integer) 1127.0.0.1:6379> zadd scores 80 lucy 85 lily(integer) 2127.0.0.1:6379> zrange scores 0 -11) "tom"2) "lucy"3) "lily"127.0.0.1:6379> zrange scores 0 -1 withscores1) "tom"2) "70"3) "lucy"4) "80"5) "lily"6) "85"127.0.0.1:6379> zrangebyscore scores 70 85 withscores1) "tom"2) "70"3) "lucy"4) "80"5) "lily"6) "85"127.0.0.1:6379> zrangebyscore scores -inf 80 withscores #负无穷到801) "tom"2) "70"3) "lucy"4) "80"127.0.0.1:6379> zrangebyscore scores 80 +inf withscores #80到正无穷1) "lucy"2) "80"3) "lily"4) "85"127.0.0.1:6379> zcount scores 70 80(integer) 2

5.1.2 排序、成员值的更新

​​zrevrange key start stop [WITHSCORES]​​返回有序集中指定区间内的成员,由大到小

​​zrevrangebyscore key max min [WITHSCORES]​​返回有序集中指定分数区间内的成员,分数由大到小

​​zrank key member​​返回有序集合中指定成员的索引

​​zscore key member​​返回有序集中,成员的分数值

​​zincrby key increment member​​有序集合中对指定成员的分数加上增量 increment

​​zcard key​​获取有序集合的成员数

​​zrem key member [member...]​​移除有序集合中的一个或多个成员

127.0.0.1:6379> zrevrange scores 0 -1 withscores 1) "jery" 2) "90" 3) "dady" 4) "88" 5) "lily" 6) "85" 7) "lucy" 8) "80" 9) "tom"10) "70"127.0.0.1:6379> zrevrangebyscore scores 88 801) "dady"2) "lily"3) "lucy"127.0.0.1:6379> zrank scores tom(integer) 0127.0.0.1:6379> zscore scores lucy"80"127.0.0.1:6379> zincrby scores 5 lucy"85"127.0.0.1:6379> zcard scores(integer) 5127.0.0.1:6379> zrem scores jery(integer) 1

5.1.3 交集

​​zunionstore destination numkeys key [key ...]​​计算给定的一个或多个有序集的并集,并将结果存储在新的 key 中

127.0.0.1:6379> zunionstore newscores 2 scores scores1 aggregate max(integer) 5127.0.0.1:6379> zrange newscores 0 -1 withscores 1) "das" 2) "56" 3) "tom" 4) "70" 5) "lily" 6) "85" 7) "lucy" 8) "85" 9) "dady"10) "88"

5.2 使用场景

排行榜:根据文章或帖子的点赞数、评论数、浏览量等的权重来统计

命令zrevrange key 0 -1

延时队列:轮询集合中的数据,根据分数判断是否超时,若超时则做出处理并移除数据

命令:zrange key 0 0 , zremrangebyrank key 0 0 / zpopmin


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:长沙天气预报15天查询API(长沙天气预报15天查询30天)
下一篇:深圳社保个人查询API(深圳社保个人查询电话号码)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~