Redis---五种数据类型

Posted 袁❈晔

tags:

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

一、String类型

概述: String是redis 最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等

1、SET/GET/APPEND/STRLEN

redis-cli		
exists dzw				#判断该键是否存在,存在返回1,否则返回0
append dzw "hello"		#该键不存在,因此append命令返回当前value的长度
append dzw " world"		#该键已经存在,因此返回追加后value的长度
get dzw					#通过get命令获取该键,以判断append的结果
set dzw "hello world"	#通过set命令为键设置新值,并覆盖原有值
get dzw
strlen dzw				#获取指定key的字符长度

2、INCR/ DECR/ I NCRBY/ DECRBY

exists dzw			#判断该键是否存在
del dzw				#删除原有键,返回1说明删除成功
set dzw 100			#为键设置新值
incr dzw			#该键的值递增1
decr dzw			#该键的值递减1
incrby dzw 10		#该键的值递增固定值
decrby dzw -20		#该键的值减少固定值
decrby dzw 30
get dzw				#查看键的值

set dzw "hello"	    #该键的值设置为字符串
get dzw				#查看值
incr dzw			#进行自增长操作

3.getset

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

4.setex

setex dzw seconds 15     #设置指定Key的过期时间为15秒
ttl key    	 		#通过ttl命令查看指定key的剩余存活时间(秒),-2表示已过期,-1表示永不过期
get dzw							
ttl dzw
ttl dzw

5、setnx

del dzw
setnx dzw 100 #创建指定键,若该键存在则不执行,不存在则执行
setnx dzw 150
get dzw

6、mset / mget / msetnx

mset ll "hello" jj "world"		#批量设置键的值
mget ll jj		                #批量获取键的值
msetnx mm 100 nn 200	        #批量设置键值,若有存在的键则不执行
msetnx ll 150 mm 250

二、List类型

列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素

1、lpush / lpushx / lrange

lpush  	#该命令会创建该键及与其关联的List,之后在将参数中的values从左到右依次插入到表头
lpushx	#该命令仅当key存在时,将value值插入表头
lrange	#返回列表中指定区间内的元素,0表示第一个元素,1表示第二个元素
例:
del dzw
lpush dzw a b c d
lrange dzw 0 -1
lpushx dzw1 d e
lpushx dzw e
lrange dzw 0 -1

2、lpop / llen

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

lpop dzw
llen dzw

3、lrem / lset / lindex / ltrim

lrem		#从头部(left)向尾部(right)变量链表,删除2个值等于a的元素,返回值为实际删除的数量
lset		#将索引值为xxx的元素值设置为新值xxx
lindex	#获取索引值为xxx的元素值。
ltrim	#仅保留索引值xxx到xxx的元素
例:
del dzw
lpush dzw 1 2 3 4 2 1
lrange dzw 0 -1
lrem dzw 2 2
lrange dzw 0 -1

lset dzw 1 1
lrange dzw 0 -1

lindex dzw 3
ltrim dzw 0 2
lrange dzw 0 -1

4、linsert

linsert		#在键的xxx元素前|后插入新元素元素

127.0.0.1:6379> lpush dzw 1 2 3 4 5 6		#新键kl
(integer) 6
127.0.0.1:6379> linsert dzw before 1 a		#在元素1前面插入a
(integer) 7
127.0.0.1:6379> lrange dzw 0 -1		    #从结果看已经插入成功
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "a"
7) "1"
127.0.0.1:6379> lset dzw 1 4		    #修改索引1位置改为4
OK
127.0.0.1:6379> lrange dzw 0 -1		    #查询已经修改成功
1) "6"
2) "4"
3) "4"
4) "3"
5) "2"
6) "a"
7) "1"
127.0.0.1:6379> linsert dzw after 4 b	 #在元素4后面插入元素b
(integer) 8
127.0.0.1:6379> lrange dzw 0 -1	         #查询是在第一个4后面插入
1) "6"
2) "4"
3) "b"
4) "4"
5) "3"
6) "2"
7) "a"
127.0.0.1:6379>  linsert dzw after 8 q	 #在元素8后面插入q;元素8并不存在,linsert命令操作失败,返回-1
(integer) -1
127.0.0.1:6379> linsert dzw1 after 8 q	 #为不存在的键插入新元素,linsert命令操作失败,返回0
(integer) 0

5、BPUSH/RPUSHX/RPOP/RPOPLPUSH

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

127.0.0.1:6379> rpush dzw 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange dzw 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> rpushx dzw a		    #dzw键尾部插入a,并返回元素数量
(integer) 6
127.0.0.1:6379> lrange dzw 0 -1		    #查询插入成功
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "a"
127.0.0.1:6379> rpop dzw		        #移除并返回dzw键的第一个元素,从右取
"a"
127.0.0.1:6379> lrange dzw 0 -1	        #查询最右的元素a已被移除
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> rpoplpush dzw kl2		#将dzw键的尾部元素弹出插入到kl2键的首部
"4"
127.0.0.1:6379> lrange dzw 0 -1		    #查询显示dzw键尾部元素4已被弹出
1) "5"
2) "1"
3) "2"
4) "3"
127.0.0.1:6379> lrange dzw1 0 -1		#查询显示dzw1键首部元素4已被插入
1) "4"

三、Hash类型

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

1、hset / hget / hdel / hexists / hlen / hsetnx

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

例:
127.0.0.1:6379> hset dzw field 1		#设置dzw键字段field的值为1
(integer) 1
127.0.0.1:6379> hget dzw field			#查询dzw键的字段field的值
"1"
127.0.0.1:6379> hget dzw field		#dzw键中不存在field字段,因此返回nil
(nil)
127.0.0.1:6379> hlen dzw		#获取dzw键的字段数量;返回2
(integer) 2
127.0.0.1:6379> hexists dzw field	#查询dzw键内存在字段field,返回1
(integer) 1
127.0.0.1:6379> hexists dzw field3	#查询dzw键内不存在字段field,返回0
(integer) 0
127.0.0.1:6379> hdel dzw field		#删除dzw键的field字段
(integer) 1
127.0.0.1:6379> hget dzw field		#查询没有dzw键的field字段
(nil)	
127.0.0.1:6379> hsetnx dzw field1 2		#dzw字段field1存在,未添加成功返回0
(integer) 0
127.0.0.1:6379> hsetnx dzw field 2		#dzw键字段field不存在,添加成功返回1
(integer) 1

2、hincrby

hincrby		#给xxx键的xxx字段值加x

127.0.0.1:6379> hincrby dzw field 1		#给kl键的field字段的值加1,返回加后的结果
(integer) 1
127.0.0.1:6379> hincrby dzw field 5		#给kl键的field字段的值加5,返回加后的结果
(integer) 6
127.0.0.1:6379> hincrby dzw field -15	#给kl键的field字段的值减15,返回加后的结果
(integer) -9

3、hmset / hmget / hgetall / hkeys / hvals

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


127.0.0.1:6379> hmset dzw field 1 name zhangsan add nj 	##修改kl键的field字段值为1,name字段值为zhangsan,add字段值为nj;返回值为字段数量
(integer) 3
127.0.0.1:6379> hgetall dzw	    #查询所有键值对
1) "field"
2) "1"
3) "name"
4) "zhangsan"
5) "add"
6) "nj"
127.0.0.1:6379> hkeys dzw		#获取dzw键的所有字段
1) "field"
2) "name"
3) "add"
127.0.0.1:6379> hmget dzw field name add age	#获取dzw键的字段的值,没有的字段返回nil
1) "1"
2) "zhangsan"
3) "nj"
4) (nil)
127.0.0.1:6379> hvals dzw		#获取dzw键的字段值
1) "1"
2) "zhangsan"
3) "nj"
127.0.0.1:6379> hkeys dzw		#获取dzw键的所有字段
1) "field"
2) "name"
3) "add"
127.0.0.1:6379> hmget dzw field name add age	#获取dzw键的字段的值,没有的字段返回nil
1) "1"
2) "zhangsan"
3) "nj"
4) (nil)
127.0.0.1:6379> hvals dzw		#获取dzw键的字段值
1) "1"
2) "zhangsan"
3) "nj"

四、Set类型(无序集合)

 

1、sadd / smembers / scard / sismember

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

例:
127.0.0.1:6379> sadd dzw 1 2 3 4		#添加dzw键的元素1234
(integer) 4
127.0.0.1:6379> sadd dzw 1 3 5 6		#添加dzw键的元素1356,返回值为2,因为13已存在,不会重复添加
(integer) 2
127.0.0.1:6379> smembers dzw		    #查看指定dzw键的成员
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> sismember dzw 1		    #查询dzw键的元素1,存在返回1
(integer) 1
127.0.0.1:6379> sismember dzw 11		#查询dzw键的元素11,不存在返回0
(integer) 0
127.0.0.1:6379> scard dzw		        #查看dzw键的元素个数
(integer) 6

2、spop / srem / srandmember / smove

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

127.0.0.1:6379> sadd dzw 1 2 3 4 5 	#添加dzw键和元素1 2 3 4 5
(integer) 3
127.0.0.1:6379> srandmember dzw 1	#随机弹出dzw键的值,返回5
1) "5"
127.0.0.1:6379> smembers dzw	   #查询dzw键的成员
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> spop dzw		    #指定dzw键弹出1位成员并移除
"2"
127.0.0.1:6379> smembers dzw	    #查询已移除成员2
1) "1"
2) "3"
3) "4"
4) "5"
5) "6"
127.0.0.1:6379> srem dzw 1 2		#移除dzw键的成员1 2 ,其中成员2不存在,只会移除1
(integer) 1
127.0.0.1:6379> smembers dzw	    #查询已移除成员1
1) "3"
2) "4"
3) "5"
4) "6"
127.0.0.1:6379> smove dzw dzw1 3	#移动kl键内的成员3到dzw1键内
(integer) 1
127.0.0.1:6379> smembers dzw	    #查询dzw键内已无成员3
1) "4"
2) "5"
3) "6"
127.0.0.1:6379> smembers dzw1	    #查询dzw1键内已有成员3
1) "3"

五、Sorted Set类型(zset、有序集合)

  • 有序集合,元素类型为String,元素具有唯一性,不能重复。
  •  每个元素都会关联一个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同。

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

   zadd			#将一个或多个成员元素及其分数值加入到有序集当中
   zcard		#获取键中成员的数量
   zcount		#分数满足表达式x <= score <= x的成员的数量
   zrem		 	#删除成员xxx、xxx,返回实际删除成员的数量
   zincrby	 	#成员xxx不存在,zincrby命令将添加该成员并假设其初始分数为0
   zscore		#获取成员xxx的分数
   zrank		#获取成员xxx的位置索引值


127.0.0.1:6379> zadd dzw 1 zs		  #添加dzw键的zs的分数为1
(integer) 1
127.0.0.1:6379> zadd dzw 2 ls 3 qt	  #可以批量添加
(integer) 2
127.0.0.1:6379> zrange dzw 0 -1		  #查询dzw键的成员
1) "zs"
2) "ls"
3) "qt"
127.0.0.1:6379> zrange dzw 0 -1 withscores	#查询dzw键的成员和分数
1) "zs"
2) "1"
3) "ls"
4) "2"
5) "qt"
6) "3"
127.0.0.1:6379> zrank dzw zs		#返回dzw键zs成员的索引
(integer) 0
127.0.0.1:6379> zcard dzw		    #返回dzw键的成员数量
(integer) 3
127.0.0.1:6379> zcount dzw 1 3		#返回dzw键的分数符合1≤score≥3的成员数量
(integer) 3
127.0.0.1:6379> zrem dzw 1 zs 2 wq	#指定删除2个成员,2不存在,返回实际删除的数量1
(integer) 1
127.0.0.1:6379> zscore dzw qt		#查看指定成员的分数,返回字符串3
"3"

2、zrangebyscore / zremrangebyrank / zremrrangebyscore

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


127.0.0.1:6379> zrangebyscore dzw 1 2	#获取分数满足表达式1 <=score <= 2的成员
1) "one"
2) "two"
127.0.0.1:6379> zrangebyscore dzw (1 2	#获取分数满足表达式1 <score <= 2的成员
1) "two"
127.0.0.1:6379> zrangebyscore dzw -inf +inf limit 2 3	#-inf:第一 个成员(位置索引值最低的,即0),+inf:最后一个成员(位置索引值最高的),limit后面的参数用于限返回成员的值,2表示从位置索引等于2的成员开始,取后而3个成员
1) "there"
2) "four"
3) "five"
127.0.0.1:6379> zrangebyscore dzw 1 2	 #删除分数满足表达式1 <= score <=2的成员,并返回实际删除的数量
1) "one"
2) "two"
127.0.0.1:6379> zremrangebyrank dzw 0 1	 #删除位置索引满足表达式0 <= rank <= 1的成员
(integer) 2
127.0.0.1:6379> zrange dzw 0 -1	         #查询已删除成功
1) "there"
2) "four"
3) "five"
4) "six"
5) "seven"

3、zrevrange / zrevrangebyscore / zrevrank

   zrevrange			#以位置索引从高到低的方式获取并返回此区间内的成员
   zrevrangebyscore		#获取分数满足表达式x >= score >= x 的成员,并以从高到底的顺序输出。
   zrevrank	 			#获取成员索引

127.0.0.1:6379> zadd dzw 1 one 2 two 3 three 4 four
(integer) 4
127.0.0.1:6379> zrevrange dzw 0 -1 withscores	#返回dzw键的索引的成员和分数,从高到低排队
1) "four"
2) "4"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
8) "1"
127.0.0.1:6379> zrevrange dzw 1 3	#由于是从高到低的排序,所以位置等于0的是four,1是three, 并以此类推
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zrevrank dzw two	#由于是从高到低的排序,所以two的位置/索引下标是2
(integer) 2
127.0.0.1:6379> zrevrangebyscore dzw 3 1 	#dzw键获取分数满足1≤score≥3,并从高到低输出
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zrevrangebyscore dzw 4 0 limit 1 2	#zrevrangebyscore命令支持limit选项,其含义等同于zrangebyscore中的该选项,只是在计算位置时按照相反的顺序计算和获取。
1) "three"
2) "two"

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

Redis入门详解之五种基本数据结构

redis 五种数据类型

Redis五种数据类型应用场景

SpringBoot Redis五种数据类型的简单操作

redis的五种数据类型

redis五种数据类型以及其常用指令