七天玩转Redis | 打卡第2天 Redis 五大数据类型

孤ゥ辰 2022-01-22 23:57:50

Redis的五大数据类型:String,List,Set,Hash,Zset

String类型:

Redis中最常用的数据类型,但是需要注意不能只会使用String类型,应该根据实际情况灵活的定数数据的数据类型

设置指定key的值:

Redis中给String类型的数据设置指定key的方法就是最基本的设置key-value的方法

语法:SET key value

例:SET k3 v3

获取指定key的值

上面设置基本的数据,需要使用时,如何取出设置的数据?

语法;GET key

例:GET k3

如果没有指定key的值则会返回(nil)若有则返回指定key的value值

返回key中字符串值的子串

这个命令的作用时获取redis中已经存在的字符串的子串,同时可以指定一个下标索引,指定要获取哪一段字符

语法:GETRANGE key start end

Start:为截取的起始下标

End:为截取的终止下标

例:GETRANGE  mykey 2

如果要截取某一个字符到最后部分的子串,那么可以直接将最后一个参数设置为-1

如果设置的获取子串的范围比较大,超过了字符串的长度,那么只会返回到字符串的最后一个字符

获取多个给定key的值

与GET命令不同,GET命令只能获取一个key对应的值,而这个命令可以用于获取多个key对应的值,

语法:MGET key1 [key2...] ---> MGET key1 key2

例:MGET mykey mykey1 mykey2

返回key所对应字符串的长度

这个命令的作用就是获取当前索引对应的字符串的长度

语法:STRLEN key

例:STRLEN mykey

设置一个或多个键值对

SET是设置单个键值对的,同时设置多个键值对则需要使用MSET命令

语法:MSET key1 value1 key2 value2

扩展:还有一个命令与MSET命令相似,都能够设置多个键值对,但是必须要保证key不存在,负责所有的key-value都会赋值失败

语法:MSETNX key1 value1 key2 value2

将key中所存储的数值加1

INCR命令会将value的值加1并返回运算后的value的值,但需要注意需要是数才能加1,负责会报错

语法:INCR key

 

扩展:为指定的key加上指定的增量

语法:INCRBY key increment

Increment为要增加的值

同样会返回改变后的value的值

将key中存储的值减一

语法:DECR key

会返回改变后的value的值

将指定key中存储的值减去指定的值

语法:DECRBY key increment

会返回改变后的value的值

字符串追加

如果key已经存在并且是一个字符串,那么可以使用APPEND命令将指定的value追加到该key原来值的名为,会返回追加之后值的长度

APPEND key value

key为索引

Value为需要追加的字符串

Hash类型

Hash类型是一个String类型的field(字段)和value的映射表,他的作用是可以用来存储我们定义的数据对象,简而言之,一个key下存储了多个key-value的情况

 

关于HashMap底层实现

图解HashMap底层实现 HashMap高频面试题1,Map接口和List接口是什么关系?2、Map有哪些常用的实现类?3、请阐述HashMap的put过程?4、链表中是按照怎样的顺序存放数据的?5、Hash(key)方法是如何实现的?6、为什么HashMap的容量一直是2的倍数?7、Hash冲突如何解决?8、HashMap是如何扩容的?9、扩容后元素怎么存放的?10、JDK1.7和JDK1.8对HashMap的实现比较Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!Map接 https://huixiaoyuan.blog.csdn.net/article/details/117629081

 

设置一个Hash数据

设置Hash数据所使用的命令不是SET,而是HMSET

语法:HMSET key field1 value1 [field2 value2...]

Field为下面存储的一个键值对的键

Value为该键值对应的值

获取指定哈希表中所有的字段和值

语法:HGETALL key

获取存储在哈希表中指定字段的值

语法:HGET key field

Field:value中的key

删除一个或多个哈希表字段

语法:HDEL key field1 [field2...]

获取哈希表中字段的数量

语法:HLEN key

获取哈希表中的所有字段

返回所有的字段,但不会返回字段所对应的值

语法:HKEYS key

获取哈希表中所有的值

返回所有的值,但不会返回值所对应的字段

List类型

列表类型,在redis中列表存储的是一个一个的字符串,按照插入的顺序进行排序,在redis中可以指定实在列表的头部或者尾部插入

将一个或多个元素插入列表表头

在redis中向列表中插入数据的命令是LPUSH,返回值是插入的数据的个数,命令中的L表示left,意思是在表头插入,会返回插入的数据的个数

语法:LPUSH key value1 [value2...]

插入的顺序value1,value2

其在key列表中的排序为value2,value1

将一个或多个元素插入列表尾部

命令中的R表示right,意思是在列表尾部插入

语法:RPUSH key value3 [value4...]

插入的顺序value3,value4

其在key列表中的排序为value3,value4

 

因此其前两轮插入后,key 列表中的元素排列为[value2,value1,value3,value4]

 

获取列表长度

获取列表的长度

语法:LLEN key

会返回key的长度

 

通过索引获取列表中的元素

语法:LINDEX key index

获取key键中下标为index的元素

移除并获取列表第一个元素

LPOP命令可以移除列表中的第一个元素,并且返回该元素的值

语法:LPOP key

获取key列表的第一个值,并删除key列表的第一个值

移除并获取列表最后一个元素

RPOP命令可以移除列表中的最后一个元素,并返回该元素的值

语法:RPOP key

 

 

Set集合

Redis中的Set集合和java中的Set集合所表示的含义是一样的,都是无序集合,且集合中的元素是唯一的,不可重复的

 

向集合中添加一个或多个成员

SADD命令会向集合中添加元素,并且返回插入的成员的个数

语法:SADD key member1 [member2...]

Member1表示要插入的成员

获取集合中成员的个数

SCARD命令会获取集合中成员的个数

语法:SCARD key

返回第一个集合与其他集合之间的差异

SDIFF命令会返回第一个集合相对于其他集合的差异

语法:SDIFF key1 [key2...]

Key1:表示对比的集合

Key2:表示被对比的集合,被对比的可以有多个

会返回:key1于key2而言有哪些不同的成员

返回所给定所有集合的交集

SINTER命令,可以返回所给定的两个或多个集合的交集

语法:SINTER key1 [key2...]

返回集合中的所有元素

语法:SMEMBERS key

ZSet集合

ZSet集合与Set集合类似,也是不允许成员重复,但需要注意,Set集合中成员是无需排列的,而ZSet集合中的成员都是有序排列的

原因是ZSet集合中的每一个元素都会关联一个double类型的分数(也可以理解为权重)redis也正是通过分数来为集合中的成员进行从小到达排序的,所以有序集合的成员是虽然唯一的,但是分数(score)却是可以重复的

向有序集合中添加一个或多个成员

ZADD命令,可以向ZSet集合中插入一个或多个成员,但是如果该成员已经存在,那么就会更新该成员所对应的分数

语法:ZADD key score1 member1 [score2 member2...]

Key 为ZSet集合的索引

Score为插入成员的分数

Member为对应的成员

获取有序集合的成员数

ZCARD命令可以获得指定有序集合的成员变量个数

语法:ZCARD key

计算有序集合中指定区间分数的成员数

语法:ZCOUNT key min max

Min 为区间最小值,max为区间最大值

根据分数返回ZSet集合指定区间内的成员

语法:ZRANGEBYSCORE key min max [WITHSCORES]

[WITHSCORES]:可选,表示是否带上对应的score

移除ZSet集合中的一个或多个元素

语法:ZREM key member1 [member2...]

 

 

 

 

 

 

 

...全文
55 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

151

社区成员

发帖
与我相关
我的任务
社区描述
开源数据库
其他 其他
社区管理员
  • 数据库小助手
  • 灰小猿
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧