Redis五大数据类型
Redis的五大数据类型分别是String、List、Set、Hash、Zset
。
1)String字符串
String类型是Redis中最常用的类型,也是日常生活中应用十分广泛的数据类型。接下来讲解String类型的操作:
注意:还是老样子,我们在启动Redis客户端前,一定确保Redis服务器是开启状态,即开启服务器cmd窗口要保留不能关掉!
-
设置key的值
Redis中给string类型的数据设置指定key的方法就是最基本的设置key-value的方法。
语法:SET key value
![在这里插入图片描述](https://img-blog.csdnimg.cn/341f88dfe6f841cfaf836b9897fa7a17.png)
-
获取key的值
语法:GET key
例如我们获取刚才输入的索引为k1,值为v1的数据,如果该索引存在,那么将会返回对应的值,如果不存在就会返回(nil)也就是null的意思。
![在这里插入图片描述](https://img-blog.csdnimg.cn/13e467af2f6f47f8be4be5f83719da5f.png)
-
返回key中字符串的子串
使用getrange指令查找指定key值中子串
GETRANGE key start end
-
key为字符串的索引
-
start为截取的起始下标
-
end为截取的终止下标
例如我们mykey中的值为diviner,如果我们要截取到末尾,我们可以将end设置为-1
如果我们end设定的值大于原本字符串长度则只会返回到字符串末尾的字符。
![在这里插入图片描述](https://img-blog.csdnimg.cn/3ea2c6c1541f4717905ff1635875b31e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAZGl2aW5lcl9z,size_14,color_FFFFFF,t_70,g_se,x_16)
-
获取多个指定key的值
与GET命令不同,GET命令只能获取一个key对应的值,而MGET
命令则可以用于获取多个key的值
MGET key1 [key2...]
![在这里插入图片描述](https://img-blog.csdnimg.cn/7b25cc873a6f4fd797f591a10407ae9b.png)
-
返回key对应字符串的长度
语法:STRLEN key
![在这里插入图片描述](https://img-blog.csdnimg.cn/ade267c779cf40a8892fcd097b8f9186.png)
-
设置一个或多个键值对
MSET key1 value1 [key2 value2 ...]
![在这里插入图片描述](https://img-blog.csdnimg.cn/4f725b6b54594a3493363011b85980d1.png)
MSETNX key1 value1 [key2 value2 ...]
msetnx指令只能在key不存在的情况下才能设置,否则该指令输入无效。
![在这里插入图片描述](https://img-blog.csdnimg.cn/aa92641f2cb9416aaa99107ac6ac77c5.png)
-
将key中所存储的数值加一
如果key对应的值不是数的话,则不能加一返回错误信息,语法:
INCR key
![在这里插入图片描述](https://img-blog.csdnimg.cn/d8a613369e2c4356978bde5811250542.png)
给key加指定数量的值:
INCRBY key increment
![在这里插入图片描述](https://img-blog.csdnimg.cn/1d578804bb48467984cf64c2599b576c.png)
-
将key中所存储的数值减一
DECR key
![在这里插入图片描述](https://img-blog.csdnimg.cn/2d2db73a416c42a8879327ae6c94efc1.png)
将key所存储的值减指定数值
DECRBY key increment
![在这里插入图片描述](https://img-blog.csdnimg.cn/e3984b10d75749918c2a3b6a778c2dac.png)
-
字符串追加
APPEND key value
在指定key的值后面再加上value
![在这里插入图片描述](https://img-blog.csdnimg.cn/0918c90b08724e08a561efdf5c91f4ed.png)
2)Hash哈希
Hash类型在我看来类似于C语言中struct结构体的亚子,Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储
2
32
−
1
2^{32}-1
232−1 键值对(40多亿)。![在这里插入图片描述](https://img-blog.csdnimg.cn/5cc14b8b70764ac2b7cb3024dbc80829.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAZGl2aW5lcl9z,size_20,color_FFFFFF,t_70,g_se,x_16)
几个常用的命令:
-
设置Hash数据
设置Hash数据使用的指令是HMSET
,H代表Hash,M代表Map,语法:
HMSET key fieId1 value1 [fieId2 value2...]
key为这个Hash数据对应的唯一性索引
field为下面存储的一个键值对的键
value为该键对应的值
我们以key-value对进行存储
例如我们设置一个key为myhash,存储的field【key-value】分别为name-Diviner,sex-man、age-18:
![在这里插入图片描述](https://img-blog.csdnimg.cn/7607f6dd17c44f38b7ceaf05398fec76.png)
-
获取指定哈希表中所有的字段和值
我们使用hgetall取出该hash中所有的数据,语法如下:
HGETALL key
![在这里插入图片描述](https://img-blog.csdnimg.cn/f19742c368564a37abe13544f0cd5e73.png)
正如图所示,一行为key值一行为value。
-
获取存储在哈希表中指定字段的值
语法:HGET key field
![在这里插入图片描述](https://img-blog.csdnimg.cn/c0ae73b2c1e34f88ac2de2bda0066efa.png)
-
删除一个或多个哈希表字段
语法:HDEL key field1 [field2...]
key为指定的哈希表的索引
field为要删除的值对应的字段,如果要删除多个就以空格分开
![在这里插入图片描述](https://img-blog.csdnimg.cn/05e667045c614af1ade4c6d23096a6c6.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/111102adf2894549aca48cde1226fa60.png)
-
获取哈希表中字段的数量
语法:HLEN key
![在这里插入图片描述](https://img-blog.csdnimg.cn/7e10b629ee174d3f836e38835446c12a.png)
-
获取哈希表中的所有字段
语法:HKEYS key
返回的是所有key-value中的key
![在这里插入图片描述](https://img-blog.csdnimg.cn/cb0654fd6f3444458a9e3c4c3516aaed.png)
-
获取哈希表中所有的值
语法:HVALS key
返回的是所有key-value中的value
![在这里插入图片描述](https://img-blog.csdnimg.cn/6472d54e706e49c98caeb2411002b321.png)
3)List列表
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
此时我们的mylist表中元素排列为:{t3,t2,t1,t4,t5,t6}
-
获取列表长度
语法:LLEN key
![在这里插入图片描述](https://img-blog.csdnimg.cn/1756369a58464e00b2896616dd419ba0.png)
-
通过索引获取列表中的元素
语法:LINDEX key index
index为指定的下标
![在这里插入图片描述](https://img-blog.csdnimg.cn/cd2fccb7bc65408a84872940f44f1457.png)
-
移除并获取列表第一个元素
pop操作。移除表头一个元素并返回出移除的值
语法:LPOP key
![在这里插入图片描述](https://img-blog.csdnimg.cn/668dc6b6f3e140abb929439cd562bded.png)
-
移除并获取列表最后一个元素
移除表尾最有一个元素并返回
语法:RPOP key
![在这里插入图片描述](https://img-blog.csdnimg.cn/8cb288603c0a45619a1360fafcbfd940.png)
4) Set集合
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
集合对象的编码可以是 intset 或者 hashtable。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
-
向集合中添加一个或多个成员
语法:SADD key member1 [member2...]
![在这里插入图片描述](https://img-blog.csdnimg.cn/57e145a890144016a7e49455db0b7068.png)
-
获取集合中成员的个数
语法:SCARD key
![在这里插入图片描述](https://img-blog.csdnimg.cn/4315b5e953ce4fc7ab17f242e5de93fc.png)
-
返回第一个集合与其他集合之间的差异
语法:SDIFF key1 [key2..]
![在这里插入图片描述](https://img-blog.csdnimg.cn/90cb63ffe7f341e684721b661bdb524b.png)
注意这里返回的是第一个的与第二个的不同,
第一个myset : {m1,m2,m3}
第二个myset2: {m2,m3,aaa,bbb}
返回的是 ‘m1’
-
返回所给定所有集合的交集
语法:SINTER key1 [key2...]
![在这里插入图片描述](https://img-blog.csdnimg.cn/88149922c03a40aba2b14d7551f348a4.png)
注意这里返回的是第一个与第二个的交集,
第一个myset : {m1,m2,m3}
第二个myset2: {m2,m3,aaa,bbb}
返回的是 “m2”,“m3”
-
返回集合中的所有元素
语法:SMEMBERS key
![在这里插入图片描述](https://img-blog.csdnimg.cn/54116a4fc4d64e4ea8d3f4e377ef3207.png)
5) ZSet有序集合(sorted set)
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
-
向有序集合中添加一个或多个成员
语法:ZADD key score1 member1 [score2 member2...]
- key为有序集合的索引
- score为插入成员的分数,
- member为对应的成员,如果插入多个成员,则以空格分隔
-
获取有序集合的成员数
语法:ZCARD key
![在这里插入图片描述](https://img-blog.csdnimg.cn/3936313990064202979dd52f72de22f0.png)
-
计算有序集合中指定区间分数的成员数
语法:ZCOUNT key min max
- min为区间的最小值
- max为区间的最大值
-
根据分数返回有序集合指定区间内的成员
语法:ZRANGEBYSCORE key min max [WITHSCORES]
- min表示score的最小值
- max表示score的最小值
- [WITHSCORES]是可选的,表示是否带上对应的score
![在这里插入图片描述](https://img-blog.csdnimg.cn/71cf4dd27b8e435f9cb7d64d5f942aae.png)
-
移除有序集合中的一个或多个元素
语法:ZREM key member1 [member2...]
![在这里插入图片描述](https://img-blog.csdnimg.cn/acc2bb2caf1c4cb98d98c7acc7f6ed8a.png)