Redis 值的五种数据类型练习

Posted 奋斗的蜗牛灬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 值的五种数据类型练习相关的知识,希望对你有一定的参考价值。


前言

Redis介绍

键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。

下面介绍五种类型的值

在这里插入图片描述

一、String 数据类型

  • String 是 Redis 最基本的类型,最大能存储 512MB 的数据,String类型是二进制安全的,即可以存储任何数据,比如数字、图片、序列化对象等。
  • 常用操作命令如下:

set、get、append、strlen

set key value  #存放数据
get key value  #获取数据
append key value   #Redis的append命令是往一个key追加value。如果没有key,则创建一个并且设置value
strlen key     #获取指定Key的字符长度

在这里插入图片描述

incr、decr、incrby 、decrby

incr key	#该Key的值递增1
decr key 	#该Key的值递减1
incrby key increment	#增加指定的整数
decrby key increment    #减少指定的整数

在这里插入图片描述

getset、setex、setnx

getset key value       #获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成

#

setex key seconds value   #设置指定Key的值为value,过期时间为seconds 秒,就是这个字符串的值seconds 秒之后过期
ttl key                   #查看键的剩余存活时间

#

setnx key value          #创建指定键,若该键存在则不执行,不存在则执行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mset、mget、msetnx

mset key value		#批量设置键的值
mget key		    #批量获取键的值
msetnx key value	#批量设置键值,若有存在的键则不执行

在这里插入图片描述

二、List 数据类型

  • 列表中存放的元素类型为 String,按照插入的顺序排序,在列表的头部或尾部添加元素。

lpush、lpushx、lrange

lpush listname value 	  #该命令会创建该键及与其关联的List,之后在将参数中的values【从左到右】依次插入到表头
lpushx listname value      #该命令仅当listname存在时,将value值【从左到右】依次插入到表头
lrange listname start stop	#返回列表中指定区间内的元素,0 表示第一个元素,1 表示第二个元素,-1 表示最后一个元素

在这里插入图片描述

lpop、llen、del

lpop listname	#移除并返回第一个元素,从头开始
llen listname	#查看列表中元素个数


del listname	#删除列表

在这里插入图片描述

lrem、lset、lindex、ltrim

lrem listname count value	#从头部(left)向尾部(right)变量链表,删除count次值等于value的元素,返回值为实际删除的数量
lset listname index value    #将索引值为index的元素值设置为新值value    
lindex listname index    	#获取索引值为index的元素值。
ltrim listname start stop	#仅保留索引值start到stop的元素

在这里插入图片描述
在这里插入图片描述

linsert

linsert key BEFORE|AFTER value1 value2	#在value1元素前|后插入新元素value2

如果列表中有重复的元素 value1 ,则只会在第一个元素的 after before 执行操作

在这里插入图片描述
在这里插入图片描述

rpush、rpushx、rpop、rpoplpush

rpush key value		#将值从右往左依次插入到表尾
rpushx key value	#指定键存在时从右往左执行,否则不执行
rpop key		    #移除并返回键的第一个元素,从尾开始
rpoplpush source destination	#将键1尾部元素xxx弹出,同时再插入到键2的头部(原子性的完成这两步操作)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Hash 数据类型(散列类型)

  • Hash 用于存储对象。可以采用这样的命名方式:对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
  • 如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
  • 优势:能存储海量数据,占用极少空间。

hset、hget、 hdel、hexists、hlen、hsetnx

hset key field value     #给key键设置字段为field,值为value
hget key field		     #获取key键,字段为field的值
hdel key field		     #删除key键的field字段,成功返回1
hexists key field	     #判断key键中的field字段是否存在,存在返回1
hlen key		         #获取key键的字段数量
hsetnx key field value	 #给key键添加新字段,是否执行基于此字段是否存在,不管键是否存在,返回1表示执行成功

在这里插入图片描述

hincrby

hincrby key field increment		#给field字段值加increment,适用于整数

在这里插入图片描述

hmset 、hmget、hgetall、hkeys、hvals

hmset key field value   #批量为xxx键创建字段和赋值
hmget key field		    #获取指定多个字段值
hgetall key		        #返回所有字段及其值,是逐对列出的
hkeys key		        #仅获取所有字段名(key)
hvals key		        #仅获取所有字段值(value)

在这里插入图片描述

四、Set 数据类型(无序集合)

  • Set 无序集合,元素类型为String类型,**元素具有唯一性,不允许存在重复的成员。**多个集合类型之间可以进行并集、交集 和 差集运算。

应用范围:

  • 可以使用 Redis 的 Set 数据类型跟踪一些唯一性数据,比如QQ号对应QQ密码。对于此场景,我们仅需在每次登录QQ时将QQ号存入Redis 中,Set 数据类型会自动保证QQ密码的唯一性。
  • 充分利用 Set 类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set 的 intersections 命令就可以充分发挥它的方便和效率的优势了。

sadd、smembers、scard、sismember

sadd key member			#将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合
smembers key			#通过smembers命令查看插入的结果,输出的顺序与插入顺序无关
scard key			    #获取集合中成员的数量
sismember key member	#判断键中xxx成员是否存在,返回0表示不存在,1表示存在

在这里插入图片描述

spop、 srem、srandmember、smove

spop set1                        #随机的移除并返回键中的某一成员
srem set1 member1 member2 ...	 #从键中移出member1、2成员,并返回移出成员个数
srandmember set1                  #该命令随机的返回某一成员
smove set1 set1 set2 member  #将source的member成员移到destination,成功返回1,失败返回0

在这里插入图片描述

五、Sort Set 数据类型(zset、有序集合)

  • 有序集合,Sortset 和 Set 类型一样,元素类型为 String,元素具有唯一性,不能重复;
  • 不同的是 Sort Set 每个元素都会关联一个权,通过权值(权重)可以有序的获取集合中的元素(通过权重的大小排序)
    在这里插入图片描述

应用范围:

  • 可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行 ZADD 命令更新玩家的分数,此后再通过 ZRANGE 命令获取积分TOP10的用户信息。当然我们也可以利用 ZRANK 命令通过username来获取玩家的排名信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获取和某个玩家积分相近的其他用户的信息。
  • Sorted-Set 类型还可用于构建索引数据。

zadd、zcard、zcount、zrem、zincrby、zscore、zrank

zadd key [NX|XX] [CH] [INCR] score member [score member ...]	#将一个或多个成员元素及其分数值加入到有序集当中
zrange key start stop [withscores]   #查看成员;加withscores可显示成员加分数
zcard key		                #获取键中成员的数量
zcount key min max		        #分数满足表达式x <= score <= x的成员的数量
zrem key member [member ...]	#删除成员xxx、xxx,返回实际删除成员的数量
zincrby key increment value	    #成员value不存在,zincrby命令将添加该成员并假设其初始分数为0
zscore key value		        #获取成员value的分数
zrank key value		        #获取成员alue的位置索引值

在这里插入图片描述
在这里插入图片描述

zrangebyscore、zremrangebyrank、zremrrangebyscore

zrangebyscore key min max		#获取分数满足表达式x <= score <= x的成员
zremrangebyrank key start stop	#删除位置索引满足表达式x <= rank <= x的成员。
zremrangebyscore key min max	#删除分数满足表达式x <= score <= x的成员,并返回实际删除的数量。

在这里插入图片描述
在这里插入图片描述

zrevrange、zrevrangebyscore、zrevrank

zrevrange key start stop [withscores]	#以位置索引从高到低的方式获取并返回此区间内的成员(翻转查看)

zrevrangebyscore key max min	#获取分数满足表达式x >= score >= x 的成员,并以从高到底的顺序输出。

zrevrank key member	 		    #获取成员索引

在这里插入图片描述
在这里插入图片描述

以上是关于Redis 值的五种数据类型练习的主要内容,如果未能解决你的问题,请参考以下文章

Redis的五种对象类型及其底层实现

redis的五种数据类型

Redis NOSQL Redis的五种常见的数据类型 redis持久化方式 Jedis

带你整理面试过程中关于 Redis 的五种数据类型

轻松搞定高并发:详解Redis的五种数据类型及应用场景分析!

轻松搞定高并发:详解Redis的五种数据类型及应用场景分析!