Redis五种数据类型实践

本文参考《Redis实战》

1.字符串

字符串可以存储三种类型的值:字节串(byte string),整数浮点数

存储方式:键值对

字符串命令

命令描述
get获取存储在给定键中的值
set设置存储在给定键中的值
del(这个命令适用于5种数据结构)删除存储在给定键中的值
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> del key1
(integer) 0

自增和自减命令

命令描述
incr将键存储的值加1
decr将键存储的值减1
incrby将键存储的值加上整数
decrby将键存储的值减去整数
incrbyfloat将键存储的值加上浮点数
127.0.0.1:6379> incr key1
(integer) 1
127.0.0.1:6379> incrby key1 10
(integer) 11
127.0.0.1:6379> decr key1
(integer) 10
127.0.0.1:6379> decrby key1 5
(integer) 5
127.0.0.1:6379> incrbyfloat key1 10.5
"15.5"
127.0.0.1:6379> incrby key1 10.5
(error) ERR value is not an integer or out of range

处理子串和二进制位的命令

命令描述
append将值追加到给定键当前存储的末尾
getrange获取一个由偏移量start到偏移量end范围内所有字符组成的子串,包括start和end在内(闭区间)
setrange将从start偏移量开始的子串设置为给定值
getbit将字节串看作是二进制位串,并返回位串中偏移量为offset的二进制位的值
setbit将字节串看作是二进制位串,并将位串中偏移量为offset的二进制位的值设置为value
bitcount统计二进制位串里面值为1的二进制位的数量,可设置start和end指定查询范围
bitop可对一个或多个二进制位串执行and、or、异或(xor)、not等按位运算操作,并将结果保存在键里
127.0.0.1:6379> append key1 a
(integer) 1
127.0.0.1:6379> append key1 1
(integer) 2
127.0.0.1:6379> get key1
"a1"
127.0.0.1:6379> getrange key1 0 1
"a1"
127.0.0.1:6379> setrange key1 1 bbb
(integer) 4
127.0.0.1:6379> get key1
"abbb"
127.0.0.1:6379> del key1
(integer) 1
//A对应的十进制为65,二进制为01000001
127.0.0.1:6379> set key1 A
OK
127.0.0.1:6379> get key1
"A"
127.0.0.1:6379> getbit key1 0
(integer) 0
127.0.0.1:6379> getbit key1 1
(integer) 1
127.0.0.1:6379> getbit key1 2
(integer) 0
127.0.0.1:6379> getbit key1 3
(integer) 0
127.0.0.1:6379> getbit key1 4
(integer) 0
127.0.0.1:6379> getbit key1 5
(integer) 0
127.0.0.1:6379> getbit key1 6
(integer) 0
127.0.0.1:6379> getbit key1 7
(integer) 1
//现在把从左往右数下标为6的位改为1,二进制为010000110,十进制为67,字符为C
127.0.0.1:6379> setbit key1 6 1
(integer) 0
127.0.0.1:6379> get key1
"C"
127.0.0.1:6379> bitcount key1
(integer) 3

2.列表

列表和数据结构中的队列类似。

常用命令

命令描述
rpush将一个或多个值推入列表的右端
lpush将一个或多个值推入列表的左端
rpop移除并返回列表最左端的元素
lpop移除并返回列表最右端的元素
lindex返回列表中偏移量offset的元素
lrange返回列表中偏移量从start到end范围内的所有元素,闭区间
ltrim只保留偏移量start到end范围内的元素,闭区间
127.0.0.1:6379> rpush key1 r1 r2 r3
(integer) 3
127.0.0.1:6379> lpush key1 l1 l2 l3
(integer) 6
127.0.0.1:6379> lrange key1 0 -1
1) "l3"
2) "l2"
3) "l1"
4) "r1"
5) "r2"
6) "r3"
127.0.0.1:6379> rpop key1
"r3"
127.0.0.1:6379> lpop key1
"l3"
127.0.0.1:6379> lrange key1 0 -1
1) "l2"
2) "l1"
3) "r1"
4) "r2"
127.0.0.1:6379> lindex key1 1
"l1"
127.0.0.1:6379> ltrim key1 1 2
OK
127.0.0.1:6379> lrange key1 0 -1
1) "l1"
2) "r1"

阻塞式的列表弹出命令以及在列表之间移动元素的命令

命令描述
blpop从第一个非空列表中弹出位于最左端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现
brpop从第一个非空列表中弹出位于最右端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现
rpoplpush从source列表中弹出位于最左端的元素,并推入dest列表的最右端,并向用户返回这个元素
brpoplpush从source列表中弹出位于最左端的元素,并推入dest列表的最右端,并向用户返回这个元素,如果source列表为空,那么在timeout秒之内阻塞并等待可弹出的元素出现
127.0.0.1:6379> lrange key1 0 -1
1) "1"
2) "2"
127.0.0.1:6379> blpop key1 5
1) "key1"
2) "1"
127.0.0.1:6379> blpop key1 5
1) "key1"
2) "2"
127.0.0.1:6379> blpop key1 5
(nil)
(5.06s)
127.0.0.1:6379> lrange key2 0 -1
1) "6"
2) "7"
3) "8"
4) "9"
5) "0"
127.0.0.1:6379> blpop key1 key2 5
1) "key2"
2) "6"
127.0.0.1:6379> rpoplpush key2 key1
"0"
127.0.0.1:6379> lrange key1 0 -1
1) "0"
127.0.0.1:6379> lrange key2 0 -1
1) "7"
2) "8"
3) "9"
127.0.0.1:6379> brpoplpush key1 key2 5
"0"
127.0.0.1:6379> brpoplpush key1 key2 5
(nil)
(5.00s)
127.0.0.1:6379> lrange key1 0 -1
(empty array)
127.0.0.1:6379> lrange key2 0 -1
1) "0"
2) "7"
3) "8"
4) "9"
3.集合

集合与列表的不同之处在于,列表可以存储多个相同的字符串,而集合则通过使用散列表来保证每个字符串都是不相同的,集合使用无序的方式存储元素,不能像列表一样从一端插入,另一端弹出。

常用命令

命令描述
sadd将一个或多个元素添加到集合,并返回与集合元素不重复的元素数量
srem将一个或多个元素从集合移除,并返回被移除元素的数量
sismember检查某个元素是否存在于集合中
scard返回集合包含的元素的数量
smembers返回集合包含的所有元素
srandmember从集合里随机返回一个或多个元素,当count为正数时,返回的随机元素不会重复,当count为负数时,返回的随机元素可能会重复
spop随机的移除集合中的一个元素,并返回被移除的元素
smove如果source集合包含元素item,则从source集合移除元素item,并将元素添加到集合dest,移除成功返回1,失败返回0
127.0.0.1:6379> sadd key1 1 2 3 4
(integer) 4
127.0.0.1:6379> srem key1 1 2
(integer) 2
127.0.0.1:6379> sismember key1 2
(integer) 0
127.0.0.1:6379> sismember key1 3
(integer) 1
127.0.0.1:6379> scard key1
(integer) 2
127.0.0.1:6379> smembers key1
1) "3"
2) "4"
127.0.0.1:6379> srandmember key1 1
1) "4"
127.0.0.1:6379> srandmember key1 2
1) "3"
2) "4"
127.0.0.1:6379> srandmember key1 -1
1) "4"
127.0.0.1:6379> srandmember key1 -2
1) "3"
2) "3"
127.0.0.1:6379> srandmember key1 -2
1) "3"
2) "4"
127.0.0.1:6379> spop key1
"4"
127.0.0.1:6379> smembers key1
1) "3"
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> sadd key1 a b c d
(integer) 4
127.0.0.1:6379> sadd key2 e f g h
(integer) 4
127.0.0.1:6379> smove key1 key2 a
(integer) 1
127.0.0.1:6379> smove key1 key2 z
(integer) 0
127.0.0.1:6379> smembers key1
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> smembers key2
1) "h"
2) "g"
3) "f"
4) "e"
5) "a"

用于组合和处理多个集合的命令

命令描述
sdiff返回那些存在于第一个集合但不存在于其他集合中的元素(差集)
sdiffstore将那些存在于第一个集合但不存在于其他集合中的元素存储到dest键里面(差集)
sinter返回那些同时存在于所有集合中的元素(交集)
sinterstore将那些同时存在于所有集合中的元素存储到dest键里(交集)
sunion返回那些至少存在于一个集合中的元素(并集)
sunionstore将那些至少存在于一个集合中的元素存储到dest键里(并集)
127.0.0.1:6379> sadd key1 a b c d e f g
(integer) 7
127.0.0.1:6379> sadd key2 a b c h i j k
(integer) 7
127.0.0.1:6379> sdiff key1 key2
1) "g"
2) "e"
3) "f"
4) "d"
127.0.0.1:6379> sdiffstore dest key1 key2
(integer) 4
127.0.0.1:6379> smembers dest
1) "g"
2) "e"
3) "f"
4) "d"
127.0.0.1:6379> sinter key1 key2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> sinterstore dest2 key1 key2
(integer) 3
127.0.0.1:6379> smembers dest2
1) "b"
2) "c"
3) "a"
127.0.0.1:6379> sunion key1 key2
 1) "g"
 2) "d"
 3) "e"
 4) "i"
 5) "j"
 6) "b"
 7) "f"
 8) "a"
 9) "k"
10) "c"
11) "h"
127.0.0.1:6379> sunionstore dest3 key1 key2
(integer) 11
127.0.0.1:6379> smembers dest3
 1) "g"
 2) "d"
 3) "e"
 4) "i"
 5) "j"
 6) "b"
 7) "f"
 8) "a"
 9) "k"
10) "c"
11) "h"
4.散列

Redis的散列可以存储多个键值对之间的映射,和字符串一样,散列存储的值既可以是字符串也可以是数字值,并且同样可以对数字值执行自增和自减的操作。

常用命令

命令描述
hset在散列里面关联起给定的键值对
hget获取指定散列键的值
hgetall获取散列包含的所有键值对
hdel如果给定键存在于散列里面,那么移除这个键
127.0.0.1:6379> hset key1 k1 v1
(integer) 1
127.0.0.1:6379> hset key1 k2 v1
(integer) 1
127.0.0.1:6379> hset key1 k3 v3
(integer) 1
127.0.0.1:6379> hgetall key1
1) "k1"
2) "v1"
3) "k2"
4) "v1"
5) "k3"
6) "v3"
127.0.0.1:6379> hget key1 k2
"v1"
127.0.0.1:6379> hdel key1 k2
(integer) 1
127.0.0.1:6379> hgetall key1
1) "k1"
2) "v1"
3) "k3"
4) "v3"

用于添加和删除键值对的散列操作

命令描述
hmget从散列里面获取一个或多个键的值
hmset为散列里面的一个或多个键设置值
hdel删除散列里面的一个或多个键值对,返回成功找到并删除的键值对的数量
hlen返回散列包含的键值对数量
127.0.0.1:6379> hmset key2 k1 v1 k2 v2 k3 v3 k4 v4
OK
127.0.0.1:6379> hmget key2 k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> hlen key2
(integer) 4
127.0.0.1:6379> hdel key2 k1 k2 k3 k4
(integer) 4
127.0.0.1:6379> hlen key2
(integer) 0

散列更高级的特性

命令描述
hexists检查给定键是否存在与散列中
hkeys获取散列包含的所有键
hvals获取散列包含的所有值
hgetall获取散列包含的所有键值对
hincrby将键key存储的值加上整数increment
hincrbyfloat将键key存储的值加上浮点数increment
127.0.0.1:6379> hmset key1 k1 1 k2 2 k3 3 k4 4
OK
127.0.0.1:6379> hexists key1 k3
(integer) 1
127.0.0.1:6379> hkeys key1
1) "k1"
2) "k2"
3) "k3"
4) "k4"
127.0.0.1:6379> hvals key1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> hgetall key1
1) "k1"
2) "1"
3) "k2"
4) "2"
5) "k3"
6) "3"
7) "k4"
8) "4"
127.0.0.1:6379> hincrby key1 k1 10
(integer) 11
127.0.0.1:6379> hincrbyfloat key1 k1 10
"21"
127.0.0.1:6379> 
5.有序集合

有序集合的键称为成员(member),值称为分值(score),分值必须为浮点数,有序集合成员不允许重复,但分值却可以重复,有序集合通过分值为集合中的成员进行从大到小的排序。

常用命令

命令描述
zadd将带有给定分值的成员添加到有序集合里面
zrem从有序集合里面移除给定的成员,并返回被移除成员的数量
zcard返回有序集合包含的成员数量
zincrby将member成员的分值加上increment
zcount返回分值介于min和max(这里指的是分值)之间的成员数量
zrank返回成员member在有序集合中的排名
zscore返回成员member的分值
zrange返回有序集合中排名介于start和stop(这里指的是下标索引,而不是分值)之间的成员,如果给定了可选的withscores选项,那么命令会将成员的分值也一并返回
127.0.0.1:6379> zadd key1 5 m5 4 m4 3 m3 2 m2 1 m1
(integer) 5
127.0.0.1:6379> zcard key1
(integer) 5
127.0.0.1:6379> zrange key1 0 4 withscores
 1) "m1"
 2) "1"
 3) "m2"
 4) "2"
 5) "m3"
 6) "3"
 7) "m4"
 8) "4"
 9) "m5"
10) "5"
127.0.0.1:6379> zrem key1 m5
(integer) 1
127.0.0.1:6379> zrange key1 0 3 withscores
1) "m1"
2) "1"
3) "m2"
4) "2"
5) "m3"
6) "3"
7) "m4"
8) "4"
127.0.0.1:6379> zincrby key1 10 m1
"11"
127.0.0.1:6379> zrange key1 0 3 withscores
1) "m2"
2) "2"
3) "m3"
4) "3"
5) "m4"
6) "4"
7) "m1"
8) "11"
127.0.0.1:6379> zcount key1 0 11
(integer) 4
127.0.0.1:6379> zrank key1 m2
(integer) 0
127.0.0.1:6379> zrank key1 m3
(integer) 1
127.0.0.1:6379> zrank key1 m4
(integer) 2
127.0.0.1:6379> zrank key1 m1
(integer) 3
127.0.0.1:6379> zscore key1 m1
"11"

有序集合的范围型数据获取命令和范围型数据删除命令,以及并集命令的交集命令

命令描述
zrevrank返回有序集合里成员member的排名,成员按照分值从大到小排序
zrevrange返回有序集合给定排名范围内的成员,成员按照分值从大到小排序
zrangebyscore返回有序集合中分值介于min和max之间的所有成员,从小到大
zrevrangebyscore返回有序集合中分值介于max和min之间的所有成员,从大到小
zremrangebyrank移除有序集合中排名介于start和stop之间的所有成员
zremrangebyscore移除有序集合中分数介于min和max之间的所有成员
zinterstore对指定的有序集合执行类似于集合的交集运算,这里的交集运算表示对指定数量的有序集合中键的分值相加,并把结果输出到destination组成新的有序集合
zunionstore对给定的有序集合执行类似于集合的并集运算,这里的并集运算指在指定数量个有序集合都包含同一个成员的情况下,可在末尾加上 aggregate sum|min|max,会将 和|最小|最大 的那个分值输出到destination组成新的有序集合
127.0.0.1:6379> zadd key1 1 k1 3 k3 2 k2 5 k5 4 k4
(integer) 5
127.0.0.1:6379> zrevrank key1 k5
(integer) 0
127.0.0.1:6379> zrevrank key1 k1
(integer) 4
127.0.0.1:6379> zrevrange key1 0 4
1) "k5"
2) "k4"
3) "k3"
4) "k2"
5) "k1"
127.0.0.1:6379> zrevrange key1 0 4 withscores
 1) "k5"
 2) "5"
 3) "k4"
 4) "4"
 5) "k3"
 6) "3"
 7) "k2"
 8) "2"
 9) "k1"
10) "1"
127.0.0.1:6379> zrangebyscore key1 1 5
1) "k1"
2) "k2"
3) "k3"
4) "k4"
5) "k5"
127.0.0.1:6379> zrangebyscore key1 1 5 withscores
 1) "k1"
 2) "1"
 3) "k2"
 4) "2"
 5) "k3"
 6) "3"
 7) "k4"
 8) "4"
 9) "k5"
10) "5"
127.0.0.1:6379> zrevrangebyscore key1 5 1 withscores
 1) "k5"
 2) "5"
 3) "k4"
 4) "4"
 5) "k3"
 6) "3"
 7) "k2"
 8) "2"
 9) "k1"
10) "1"
127.0.0.1:6379> zremrangebyrank key1 1 2
(integer) 2
127.0.0.1:6379> zrange key1 0 -1 withscores
1) "k1"
2) "1"
3) "k4"
4) "4"
5) "k5"
6) "5"
127.0.0.1:6379> zremrangebyscore key1 4 5
(integer) 2
127.0.0.1:6379> zrange key1 0 -1 withscores
1) "k1"
2) "1"

127.0.0.1:6379> del key1
(integer) 1

127.0.0.1:6379> zadd key1 1 k1 2 k2 3 k3 4 k4 5 k5
(integer) 5
127.0.0.1:6379> zadd key2 1 k1 2 k2 3 k3 4 k4 5 k5
(integer) 5
127.0.0.1:6379> zinterstore dest 2 key1 key2	//这里的数字2表示后面跟的键的个数
(integer) 5
127.0.0.1:6379> zrange dest 0 -1 withscores
 1) "k1"
 2) "2"
 3) "k2"
 4) "4"
 5) "k3"
 6) "6"
 7) "k4"
 8) "8"
 9) "k5"
10) "10"

127.0.0.1:6379> zadd key3 1 k1 2 k2 3 k3
(integer) 3
127.0.0.1:6379> zadd key4 0 k4 1 k3 4 k2
(integer) 3
127.0.0.1:6379> zunionstore dest2 2 key3 key4 aggregate sum
(integer) 4
127.0.0.1:6379> zrange dest2 0 -1 withscores
1) "k4"
2) "0"
3) "k1"
4) "1"
5) "k3"
6) "4"
7) "k2"
8) "6"
127.0.0.1:6379> zunionstore dest3 2 key3 key4 aggregate min
(integer) 4
127.0.0.1:6379> zrange dest3 0 -1 withscores
1) "k4"
2) "0"
3) "k1"
4) "1"
5) "k3"
6) "1"
7) "k2"
8) "2"
127.0.0.1:6379> zunionstore dest4 2 key3 key4 aggregate max
(integer) 4
127.0.0.1:6379> zrange dest4 0 -1 withscores
1) "k4"
2) "0"
3) "k1"
4) "1"
5) "k3"
6) "3"
7) "k2"
8) "4"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、安装文档 2、 实验:(1) 启动redis(2) 停止redis(3)测试连接(发送命令的两种方法) 字符串类型: (4)设置一个键,获得该键值,并判断一个键是否存在 (5)删除键 (6)增和减 (7) 向尾部追加值 (8) 获取字符串长度 (9) 同时获得/设置多个键值 (10) 位操作 散列类型: (11) 为键值car设置price、name、model等“属性” (12) 判断model字段是否存在,不存在的话添加该字段,最后删除 列表类型: (13)向列表添加元素、弹出元素、获取表中元素个数、获得列表片段 (14)获得/设置指定索引的元素值 集合类型: (16) 增加或删除元素以及获得集合中所有元素: (17) 判断元素是否存在于集合中: (18) 集合的运算差sdiff,交sinter,并sunion 有序集合类型: (19) 增加元素、获得元素分数、获得排名在某个范围的元素列表、获得制定分数范围的元素 事务: (20)MULTI开启事务,EXEC结束事务 (21)错误处理:语法错误(命令本身错误)和运行错误(命令使用类型错误) (22)watch命令(监控作用) (23)Expire,ttl,persist命令控制键的存活时间 (24)Sort排序命令 (25)构造如图表结构: (26) Sort key1 by key2 将key1按照key2的大小进行排序 (27)get:sort key1 get key2 按照key1大小进行排序,将key2结果显示出来 (28)sort、by、get结合使用: (29)获取外部键但不进行排序: (30)将下表存在哈希结构中,并使用sort、by、get方法进行操作 (31)Store:将排完序的结果进行存储 (32)订阅者-发布者模式 任务队列: (33)优先级队列:
### 回答1: Redis是一款高性能、内存型的键值对数据库,具有持久化、高并发、分布式等特性。《Redis核心原理与实践》是一本非常经典的Redis学习资料,包含了Redis的核心原理、实现细节、性能优化以及应用案例等方面的内容,对于Redis的学习和应用具有很大的帮助。 如果想要获取《Redis核心原理与实践》这本书的PDF资料,可以在网盘上搜索下载。不过在下载之前需要注意一些问题,如文件来源是否可靠、文件的安全性等。建议选择知名的云盘平台或者官方渠道下载,避免下载病毒或者包含其他不良内容的文件。 在学习Redis的过程中,不仅需要掌握其核心原理和实践技巧,还要了解其在实际应用中的使用场景和经验。同时还需要多实践和练习,以更好地掌握Redis使用和优化技巧。 ### 回答2: Redis是当前非常流行的内存缓存中间件,它有很多优秀的特性,如高效的操作、支持多种数据结构、数据持久化等。但是,想要深入理解Redis,需要对Redis的核心原理有一定的认识。为此,很多开发者都希望能够通过网络资源获取到Redis核心原理与实践的相关资料。 其中,Redis核心原理与实践PDF是一个非常不错的资源。它详细介绍了Redis的核心原理和实践技巧,包括Redis内部网络模型、键值对的存储结构、数据类型的操作等等。通过学习这些内容,可以帮助开发者更好地理解Redis的运行机制,并且能够在实践中掌握更多的技巧。 如果想要获取Redis核心原理与实践PDF,可以通过各种网盘搜索资源。常见的网盘有百度云、蓝奏云、微盘等等,这些网盘上都有不少Redis相关的资源分享。需要注意的是,获取资源是需要付费的,因此还需要谨慎选择可信的资源提供者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素履、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值