不得不了解的知识!redis五大数据类型介绍!

一.string数据类型

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

1.set、get、append、strlen

set 修改

get获取 更新并覆盖

append 注入追加,追加键值并返回追加后的长度,若键不存在相当于创建并返回追加后的长度

strlen 判断字符串的长度

exists 判断该键是否存在,存在返回1,否则返回0

127.0.0.1:6379> keys *
1) "b22"
2) "counter:__rand_int__"
3) "key:__rand_int__"
4) "a3"
5) "bb1"
6) "c1"
7) "myset:__rand_int__"
8) "aaa"
9) "mylist"
127.0.0.1:6379> get a3
"1"
127.0.0.1:6379> set a3 11
OK
127.0.0.1:6379> get a3					#get 获取,覆盖
"11"
127.0.0.1:6379> append a3 22			#append 注入追加,追加键值并返回追加后的长度,若键不存在相当于创建并返回追加后的长度
(integer) 4
127.0.0.1:6379> get a3
"1122"
127.0.0.1:6379> exists a1
(integer) 0
127.0.0.1:6379> append a1 55
(integer) 2
127.0.0.1:6379> get a1
"55"
127.0.0.1:6379> strlen a1				#判断字符串长度
(integer) 2

2.incr、 decr、incrby、decrby

incr 递增1

decr 递减1

del 删除

自增自减 无法对非整数操作 key值必须为整数
针对不存在的键自增自减基数为0

incrby decrby 自增自减可以指定增加减少的整数值

127.0.0.1:6379> set mykey 0.1
OK
127.0.0.1:6379> get mykey
"0.1"
127.0.0.1:6379> incr mykey
(error) ERR value is not an integer or out of range
127.0.0.1:6379> get a1
"55"
127.0.0.1:6379> incr a1
(integer) 56
127.0.0.1:6379> get a1
"56"
127.0.0.1:6379> decr a1
(integer) 55
127.0.0.1:6379> get a1
"55"
127.0.0.1:6379> exists cc
(integer) 0
127.0.0.1:6379> incr cc
(integer) 1
127.0.0.1:6379> get cc
"1"
127.0.0.1:6379> exists dd
(integer) 0
127.0.0.1:6379> decr dd
(integer) -1
127.0.0.1:6379> get dd
"-1"
127.0.0.1:6379> incrby dd 15
(integer) 14
127.0.0.1:6379> get dd
"14"
127.0.0.1:6379> decrby dd 5
(integer) 9
127.0.0.1:6379> get dd
"9"

3.getset

获取key值并且返回,再给key设置新值

设置新的值 并且告诉你原来的值

127.0.0.1:6379> get dd
"9"
127.0.0.1:6379> getset dd 66
"9"
127.0.0.1:6379> get dd
"66"

4.setex

设置key的过期时间

-2表示已过期,失效
-1 表示永不过期 -1表示的最大值,表示的是一个上限

127.0.0.1:6379> get dd
"qw"
127.0.0.1:6379> setex dd 20 qw
OK
127.0.0.1:6379> ttl dd					#ttl查看键的生命周期,剩余存货时间,值为-2时表示值失效
(integer) 16
127.0.0.1:6379> ttl dd
(integer) 6
127.0.0.1:6379> ttl dd
(integer) -2
127.0.0.1:6379> get dd
(nil)
127.0.0.1:6379> get a1
"55"
127.0.0.1:6379> ttl a1
(integer) -1

5.setnx

修改键做判断,不存在键时set ,存在则不执行操作

127.0.0.1:6379> del a1
(integer) 1
127.0.0.1:6379> exists a1
(integer) 0
127.0.0.1:6379> setnx a1 hello
(integer) 1
127.0.0.1:6379> get a1
"hello"
127.0.0.1:6379> setnx a1 good
(integer) 0
127.0.0.1:6379> get a1
"hello"

6.mset、mget、msetnx

m代表批量

msetnx 批量操作时 判断只要有一个存在就都不会执行操作

127.0.0.1:6379> mset f1 77 f2 88
OK
127.0.0.1:6379> mget f1 f2
1) "77"
2) "88"
127.0.0.1:6379> msetnx f1 66 f2 66 f3 66
(integer) 0
127.0.0.1:6379> mget f1 f2 f3
1) "77"
2) "88"
3) (nil)

二.list数据类型

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

1.lpush、lpushx、lrange

lpush 左插入 倒序

lpushx 键必须存在才能插入

lrange 取从位置索引start到位置索引stop的所有元素(索引以0开始)

127.0.0.1:6379> lpush qq a b c d e
(integer) 5
127.0.0.1:6379> lrange qq 0 -1			#查询整个列表;0:第一个元素;-1:最后一个元素
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> get qq					#使用get是无法查询的,需要使用lrange
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lpush qq 1 2
(integer) 7
127.0.0.1:6379> lrange qq 0 -1
1) "2"
2) "1"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
127.0.0.1:6379> lpushx qq8 8			#在qq8键插入元素8,因为键不存在,返回0
(integer) 0
127.0.0.1:6379> lrange qq8 0 -1
(empty list or set)
127.0.0.1:6379> lpushx qq 8				#在左侧插入元素8,返回元素的数量
(integer) 8
127.0.0.1:6379> lrange kl 0 -1
1) "8"
2) "2"
3) "1"
4) "e"
5) "d"
6) "c"
7) "b"
8) "a"

2.lpop、llen

lpop移除键并返回键的第一个元素

llen 获取表中元素数量

127.0.0.1:6379> lrange qq 0 -1
1) "2"
2) "1"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
8) "7"
9) "8"
127.0.0.1:6379> lpop qq					#移除键并返回第一个元素
"2"
127.0.0.1:6379> lpop qq
"1"
127.0.0.1:6379> lrange qq 0 -1			
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
6) "7"
7) "8"
127.0.0.1:6379> llen qq					#获取元素数量
(integer) 7

3.lrem、lset、lindex、ltrim

lerm key count value 从列表头部开始删除count个值为value的元素,并返回实际删除数量

lset key index value 将位置索引为index的元素设置新值value

lindex key iindex 获取索引为index的元素

ltrim key start stop 仅保留从为止所有start到索引stop的元素

127.0.0.1:6379> lpush kk 1 2 3 4 2 5
(integer) 6
127.0.0.1:6379> lrange kk 0 -1
1) "5"
2) "2"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> lrem kk 2 2
(integer) 2
127.0.0.1:6379> lrange kk 0 -1
1) "5"
2) "4"
3) "3"
4) "1"
127.0.0.1:6379> lindex kk 1
"4"
127.0.0.1:6379> lset kk 1 8
OK
127.0.0.1:6379> lindex kk 1
"8"
127.0.0.1:6379> lindex kk 7
(nil)
127.0.0.1:6379> lset kk 7 9
(error) ERR index out of range

4.linsert

linsert key before|after pivot value: 在元素pivot的前面(做左)或后面(右)插入新元素value

127.0.0.1:6379> lpush bb 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange bb 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> linsert bb before 1 qq
(integer) 6
127.0.0.1:6379> lrange bb 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "qq"
6) "1"
127.0.0.1:6379> lrange bb 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "qq"
6) "1"
127.0.0.1:6379> lset bb 1 3
OK
127.0.0.1:6379> lrange bb 0 -1
1) "5"
2) "3"
3) "3"
4) "2"
5) "qq"
6) "1"
127.0.0.1:6379> linsert bb after 3 yy				#在元素3后面插入元素yy
(integer) 7
127.0.0.1:6379> lrange bb 0 -1						#查询发现是在第一个3后面插入
1) "5"
2) "3"
3) "yy"
4) "3"
5) "2"
6) "qq"
7) "1"
127.0.0.1:6379> linsert bb after 9 tt				#在元素8后面插入q;元素9并不存在,linsert命令操作失败,返回-1
(integer) -1
127.0.0.1:6379> linsert bb8 after 9 tt				#为不存在的键插入新元素,linsert命令操作失败,返回0
(integer) 0

5.rpush、rpushx、rpop、rpoppush

rpush key value [value …] 在列表的尾部依次插入value;l:list

rpushx key value ##key必须存在才可执行,将value从尾部插入,并返回所有元素数量

rpop key 在尾部弹出(移除)一个元素,并返回该元素

rpoplpush source destination 在key1的尾部弹出一个元素并返回,将它插入key2的头部

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

三.hash数据类型(散列类型)

概述: hash用于存储对象。可以采用这样的命名方式(hash格式) :对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。

如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对

1.hest、hget、hdel、hexists、hlen、hsetnx

hset key field value 设置键值对;h:哈希数据类型;field:字段

hget key field 查询键的值

hdel key field [field …]删除键中字段名为field的字段,删除成功返回1;不成功返回0

hexists key field 判断键中是否存在字段名为field的字段,若存在返回值为1,不存在返回0

hlen key 获取键的字段数量

hsetnx key field value 添加新字段field和值,字段不存在添加成功返回1,字段存在未添加成功返回0

127.0.0.1:6379> hset aa field 6
(integer) 1
127.0.0.1:6379> hget aa field
"6"
127.0.0.1:6379> hget aa8 field
(nil)
127.0.0.1:6379> hlen aa
(integer) 1
127.0.0.1:6379> hexists aa field
(integer) 1
127.0.0.1:6379> hset aa field1 hello
(integer) 1
127.0.0.1:6379> hget aa field1
"hello"
127.0.0.1:6379> hexists aa field3
(integer) 0
127.0.0.1:6379> hdel aa field
(integer) 1
127.0.0.1:6379> hget aa field
(nil)
127.0.0.1:6379> hsetnx aa field 1
(integer) 1
127.0.0.1:6379> hsetnx aa field 1
(integer) 0

2.hincrby

hincrby key field increment 指定键的字段自增/自减

127.0.0.1:6379> hget aa field1
"2"
127.0.0.1:6379> hincrby aa field1 2
(integer) 4
127.0.0.1:6379> hincrby aa field1 8
(integer) 12
127.0.0.1:6379> hincrby aa field1 -5
(integer) 7

3.hgetall、hkeys、hvals、hmget、hmset

hgetall key 获取所有键值对

hkeys key 获取键内所有字段

hvals key 获取键的字段值

hmget key field [field …] 获取键指定字段的值

hmset key field value [field value …] 批量设置键指定字段的值

127.0.0.1:6379> hmset jj field 1 name lisi add hz
OK
127.0.0.1:6379> hgetall jj								#获取所有键值对
1) "field"
2) "1"
3) "name"
4) "lisi"
5) "add"
6) "hz"
127.0.0.1:6379> hkeys jj								#获取键内所有字段
1) "field"
2) "name"
3) "add"

127.0.0.1:6379> hmget jj field name add age				#获取键指定字段的值
1) "1"
2) "lisi"
3) "hz"
4) (nil)
127.0.0.1:6379> hvals jj								#获取键的字段值
1) "1"
2) "lisi"
3) "hz"

四.set数据类型(无序集合)

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

应用范围:

1)可以使用Redis的Set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。

2)充分利用Set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中, 而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set的intersections 命令就可以充分发挥它的方便和效率的优势了

1.sadd、smembers、scare、sismember

常用格式

sadd key member [member …] 添加键和元素;若元素已存在不会重复添加

smembers key 查看指定键的成员

scard key 查看指定键的元素个数

sismember key member 判断元素是否存在,存在返回1,不存在返回0

scare元素数量

sismember 判断该无序集合中成员是否存在

127.0.0.1:6379> sadd pp 4 5 6 7				#添加元素
(integer) 4
127.0.0.1:6379> sadd pp 2 3 4 5
(integer) 2
127.0.0.1:6379> smembers pp					#查看所有成员
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"
6) "7"
127.0.0.1:6379> sismember pp 3				#判断元素3是否存在,存在返回1
(integer) 1
127.0.0.1:6379> sismember pp 20				#判断元素20是否存在,不存在返回0
(integer) 0
127.0.0.1:6379> scard pp					#查看键的元素个数
(integer) 6

2.spop、srem、srandmember、smove

spop key [count] 随机移除键的指定数量的元素,不加数量默认1

srem key member [member …] 移除键的指定成员

smembers key 查看指定键的所有成员

srandmember key [count] 随机返回一个成员

smove source destination member 可以把无序集合中的元素移动到另一个无须集合

127.0.0.1:6379> sadd rr 5 6 7 8 9
(integer) 5
127.0.0.1:6379> srandmember rr 1			#随机返回一个成员
1) "8"
127.0.0.1:6379> smembers rr					#查看所有成员
1) "5"
2) "6"
3) "7"
4) "8"
5) "9"
127.0.0.1:6379> spop rr						#随机移除一个成员
"5"
127.0.0.1:6379> smembers rr
1) "6"
2) "7"
3) "8"
4) "9"
127.0.0.1:6379> srem rr 5 7					#移除指定成员
(integer) 1
127.0.0.1:6379> smembers rr
1) "6"
2) "8"
3) "9"
127.0.0.1:6379> smove rr hh 8				#移动元素
(integer) 1
127.0.0.1:6379> smembers rr
1) "6"
2) "9"
127.0.0.1:6379> smembers hh
1) "8"

五.sorted set数据类型(zset,有序集合)

1)有序集合,元素类型为Sting, 元素具有唯一 性,不能重复。

2)每个元素都会关联一个double类型的分数score(表示权重),可以通过权重的大小排序,元素的score可以相同。

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

1.zadd、zcard、zcount、zrem、、zincrby、zscore、zrange、zrank

常用格式:

zadd key [NX|XX] [CH] [INCR] score member [score member …] 添加指定键的成员的分数

zcard key 返回指定键的成员数量

zcount key min max 返回符合筛选权重的成员数量

zrem key member [member …] 指定删除1个/多个成员,返回实际删除的数量

zincrby key increment member 指定自增分数,返回该成员更新后的分数;初始分数为0

zscore key member 查询指定的成员分数,返回值为字符串形式

zrange key start stop [WITHSCORES] 查询键指定位置的成员和分数;0:第一个;-1:最后一个;withscores:返回的结果中包含每个成员及其分数,否则值返回成员

zrank key member 查询键指定成员的索引

127.0.0.1:6379> zadd mm 1 ls					#添加
(integer) 1
127.0.0.1:6379> zadd mm 2 ww 3 zs				#批量添加
(integer) 2
127.0.0.1:6379> zrange mm 0 -1					#查询
1) "ls"
2) "ww"
3) "zs"
127.0.0.1:6379> zrange mm 0 -1 withscores		#查询成员和分数
1) "ls"
2) "1"
3) "ww"
4) "2"
5) "zs"
6) "3"
127.0.0.1:6379> zrank mm ww						#返回对应成员的索引
(integer) 1
127.0.0.1:6379> zcard mm
(integer) 3
127.0.0.1:6379> zcount mm 1 3					#返回分数大于等于1且小于等于3的成员的数量
(integer) 3
127.0.0.1:6379> zrem mm 1 ls 2 zy				#删除索引大于等于1,并且小于等于2的成员
(integer) 1
127.0.0.1:6379> zscore mm ww
"2"

2.zrangebyscore、zrangebyscore、zremrangebyrank

zrangebyscore key min max [WITHSCORES] [LIMIT offset count] 获取分数满足表达式的成员

zrangebyscore key min max [WITHSCORES] [LIMIT offset count] 指定分数范围删除

zremrangebyrank key start stop 删除满足范围位置索引

127.0.0.1:6379> zrange ff 0 -1 withscores					
1) "ls"
2) "1"
3) "zs"
4) "2"
5) "ww"
6) "3"
127.0.0.1:6379> zrangebyscore ff 1 2						#获取分数大于等于1且小于等于2的成员
1) "ls"
2) "zs"
127.0.0.1:6379> zrangebyscore ff (1 2						#获取分数大于1且小于等于2的成员
1) "zs"
127.0.0.1:6379> zrangebyscore ff -inf +inf limit 2 3		#-inf:第一 个成员(位置索引值最低的,即0)+inf:最后一个成员(位置索引值最高的),limit后面的参数用于限返回成员的值,2表示从位置索引等于2的成员开始,取后而3个成员
1) "there"
1) "ww"
127.0.0.1:6379> zremrangebyrank ff 0 1 						#删除索引大于等于0且小于等于1的成员
(integer) 2	
127.0.0.1:6379> zrange ff 0 -1
1) "ww"

3.zrevrange、zrevrank、zrevrangebyscore

zrevrange key start stop [WITHSCORES] 以位置索引从高到低的方式获取并返回此区间内的成员

zrevrank key member 输出指定成员的位置/索引

zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count] 基于分数/权重,并在满足的范围内排序,默认从大到小

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值