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---五种数据类型的主要内容,如果未能解决你的问题,请参考以下文章