Redis数据类型(String&List&Hash&Set&Sorted Sed)
Posted TaKe___Easy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis数据类型(String&List&Hash&Set&Sorted Sed)相关的知识,希望对你有一定的参考价值。
一、String数据类型
- String是redis最基本的数据类型,最大能存储512MB的数据
- String数据类型是二进制安全的。可以存储任何数据(比如数字、图片、序列化对象等等)
1.1 APPEND & STRLEN
- STRLEN:获取指定键的字符长度
- APPEND:用于为指定的Key追加值
- 如果该Key已经存在并且是一个字符串,append命令将value追加到Key原来的值末尾
- 如果该Key不存在,append就简单的给该Key设为value,就像执行set key value一样
【STRLEN】
[root@localhost ~]# redis-cli -h 192.168.131.10 -p 6379 【登录数据库】
192.168.131.10:6379> keys * 【查询所有key】
(empty list or set)
192.168.131.10:6379> exists q 【判断该键是否存在】
(integer) 0 【存在返回1,不存在返回0】
【APPEND】
192.168.131.10:6379> append q 10 【因为q键不存在,所以append命令返回当前值的长度】
(integer) 2
192.168.131.10:6379> append q 100 【因为q键已经存在,所以返回追加完“100”后的总长度】
(integer) 5
192.168.131.10:6379> get q 【通过get命令获取q键,用来判断appedn的结果】
"10100"
192.168.131.10:6379> set q 20 【通过set命令为q键设置新值,并覆盖原有值】
OK
192.168.131.10:6379> get q 【获取q键的值】
"20"
192.168.131.10:6379> STRLEN q 【获取指定键的字符长度】
(integer) 2
1.2 INCR & DECR & INCRBY & DECRBY
- INCR:递增
- DECR:递减
- INCRBY:减少指定整数
- DECRBY:增加指定整数
【INCR】
192.168.131.10:6379> set q1 100 【设置q1键的值为100】
OK
192.168.131.10:6379> incr q1 【q1键的值递增1】
(integer) 101
【DECR】
192.168.131.10:6379> decr q1 【q1键的值递减1】
(integer) 100
192.168.131.10:6379> del q1 【删除已经的q键】
(integer) 1 【返回1说明删除成功】
192.168.131.10:6379> decr q1 【对空值的键进行递减操作,因为其原值被设定为0,所以递减后的值为-1】
(integer) -1
192.168.131.10:6379> get q2 【获取q2的值】
(nil)
192.168.131.10:6379> incr q2 【对空值的键进行递增操作,因为其原值被设定为0,所以递减后的值为1】
(integer) 1
192.168.131.10:6379> set q1 hello 【将q1键的值设为普通字符串】
OK
192.168.131.10:6379> incr q1 【因为q1键的值为不能转换为整形的字符串】
(error) ERR value is not an integer or out of range
192.168.131.10:6379> set q1 100 【将q1键的值设定为100】
OK
【DECRBY】
192.168.131.10:6379> decrby q1 50 【减少指定的整数】
(integer) 50
【INCRBY】
192.168.131.10:6379> incrby q1 30 【增加指定的指数】
(integer) 80
1.3 GETSET & SETEX & SETNX
- GETSET: 获取指定键的值同时并将其设置为新值,这两个操作同时完成
- SETEX:设置指定键的过期时间(返回值-1:永不过期;返回值-2:已经过期)
- SETNX:在指的键不存在时,为该键设置指的的值
【Getset】
192.168.131.10:6379> set qz 30 【设置qz键的值为30】
OK
192.168.131.10:6379> get qz 【获取qz键的值】
"30"
192.168.131.10:6379> INCR qz 【将qz键的值递增1】
(integer) 31
192.168.131.10:6379> GETSET qz 300 【获取qz键的值的同时并将其设置为新值,这两个操作同时完成】
"31"
192.168.131.10:6379> get qz 【查看qz键的新值】
"300"
【Setex】
192.168.131.10:6379> setex qz1 15 take-easy 【设置qz1键的过期时间为15秒,值为take-easy】
OK
192.168.131.10:6379> ttl qz1 【查看qz1键的剩余存活时间(秒数)】
(integer) 13
192.168.131.10:6379> ttl qz 【返回值-1表示永不过期】
(integer) -1
192.168.131.10:6379> get qz1 【在qz1键的存活期内我们依旧可以获取到值】
"take-easy"
192.168.131.10:6379> ttl qz1 【返回值-2表示已经过期】
(integer) -2
192.168.131.10:6379> get qz1 【获取过期的qz1键的值则返回nil】
(nil)
【Setnx】
192.168.131.10:6379[1]> SELECT 1 【切换到1号库】
OK
192.168.131.10:6379[1]> keys * 【该库无键】
(empty list or set)
192.168.131.10:6379[1]> SETNX qz take-easy 【因为qz键不存在,所以setnx命令执行成功】
(integer) 1
192.168.131.10:6379[1]> SETNX qz take 【因为qz键已经存在,所以本次设置不会产生或者替换旧值,即没有任何效果】
(integer) 0
192.168.131.10:6379[1]> get qz 【核实返回的值仍为第一次设置的值】
"take-easy"
1.4 MSET & MGET & MSETNX
- MSET:批量设置
- MGET:批量获取
- MSETNX:批量设置,但如有重复的键则设置失败
【MSET&MGET】
192.168.131.10:6379[1]> mset qz1 take qz2 easy 【批量设置qz1和qz2两个键的值】
OK
192.168.131.10:6379[1]> mget qz1 qz2 【批量获取qz1和qz2两个键的值】
1) "take"
2) "easy"
【MSETNX】
192.168.131.10:6379[1]> msetnx qz3 good qz4 luck 【批量设置2个键的值,但是因为之前并无这2个键,所以命令执行成功】
(integer) 1
192.168.131.10:6379[1]> mget qz3 qz4 【批量获取qz3和qz4键的值】
1) "good"
2) "luck"
192.168.131.10:6379[1]> msetnx qz3 good qz5 luck 【批量设置2个键的值,但是qz3键已经存在,所以命令执行失败】
(integer) 0
192.168.131.10:6379[1]> mget qz3 qz5 【获取刚才批量设置的qz3和qz5两个键的值,由于qz5键没有设置成功,所以返回nil】
1) "good"
2) (nil)
二、List数据类型
- List(列表)的元素类型为string。安装插入顺序排序,在列表的头部或尾部添加元素
2.1 LPUSH &L PUSHX & LRANGE
- LPUSH:创建键及其关联的列表,之后将参数中的值从左到右依次插入
- LPUSHX:插入数据时当该键不存在,则不做任何操作。如果该键存在则插入成功并返回列表中当前元素的数量
- LRANGE:取列表中的元素(0:第一个元素,-1:最后一个元素)
【LPUSH】
192.168.131.10:6379[1]> SELECT 2 【切换到2号库】
OK
192.168.131.10:6379[2]> keys * 【查询该库无键】
(empty list or set)
【因为qz键不存在,所以lpush会创建qz键及其关联的列表,之后将参数中的值从左到右依次插入】
【因为此处的“l”代表左,所以列表显示的将会是e w q r】
192.168.131.10:6379[2]> lpush qz q w e r
(integer) 4
192.168.131.10:6379[2]> lrange qz 1 3 【取从位置1到位置3结束的3个元素】
1) "e"
2) "w"
3) "q"
192.168.131.10:6379[2]> LRANGE qz 0 -1 【取列表中全部元素。0:第一个元素,-1:最后一个元素】
1) "r"
2) "e"
3) "w"
4) "q"
【LPUSHX】
192.168.131.10:6379[2]> lpushx qz2 e 【因为该键不存在,所以lpushx命令不会进行任何操作,并返回值0】
(integer) 0
192.168.131.10:6379[2]> lpushx qz t 【因为该键存在,所以lpush命令插入成功,并返回列表中当前元素的数量】
(integer) 5
【LRANGE】
192.168.131.10:6379[2]> lrange qz 0 0 【读取该键的列表中所有值的头部元素】
1) "t"
192.168.131.10:6379[2]> lrange qz 0 -1
1) "t"
2) "r"
3) "e"
4) "w"
5) "q"
2.2 LPOP & LLEN
- LPOP:移除键关联列表的第一个元素并返回,即从右往左第一个
- LLEN:获取键关联列表中元素数量
【LPOP】
192.168.131.10:6379[2]> keys *
(empty list or set)
192.168.131.10:6379[2]> lpush qz q w e 【创建qz键及其关联的表】
(integer) 3
192.168.131.10:6379[2]> lrange qz 0 -1 【获取qz列表中全部数据】
1) "e"
2) "w"
3) "q"
192.168.131.10:6379[2]> lpop qz 【移除qz键关联列表的第一个元素并返回,即从右往左第一个】
"e"
192.168.131.10:6379[2]> lpop qz
"w"
【LLEN】
【获取qz键的表中元素数量。因为执行了两次lpop,所以列表头部的两个元素均已被弹出,因此现在列表中元素的数量为1】
192.168.131.10:6379[2]> llen qz
(integer) 1
192.168.131.10:6379[2]> lrange qz 0 -1
1) "q"
2.3 LREM & LSET & LINDEX & LTRIM
- LREM:在列表中删除指定元素
- LSET:将列表中某个元素设为新值
- LINDEX:查看某索引的值
- LTRIM:仅保留索引值x-y之间的元素(第x个和第y个元素均被保留)
【LREM】
192.168.131.10:6379> SELECT 5 【切换到5号库】
OK
192.168.131.10:6379[5]> keys * 【查看当前库所有键】
(empty list or set)
192.168.131.10:6379[5]> LPUSH qz q w e r q e 【创建qz键以及与其关联的列表,并将参数插入】
(integer) 6
192.168.131.10:6379[5]> lrem qz 2 q 【从头部(left)向尾部(right)变量列表中删除2个值为q的元素】
(integer) 2 【返回的值为实际删除的数量】
192.168.131.10:6379[5]> LRANGE qz 0 -1 【查看删除后列表中的全部元素】
1) "e"
2) "r"
3) "e"
4) "w"
【LSET&LINDEX】
192.168.131.10:6379[5]> LINDEX qz 3 【获取索引值为3(头部的第二个元素)的元素值】
"w"
192.168.131.10:6379[5]> LSET qz 3 www 【将索引值为3(头部的第二个元素)的元素值设为新值www】
OK
192.168.131.10:6379[5]> LINDEX qz 3 【查看设置后的索引3的值】
"www"
【LTRIM】
192.168.131.10:6379[5]> LINDEX qz 6 【索引值6超过了列表中元素的数量,所以返回nil】
(nil)
192.168.131.10:6379[5]> lset qz 6 wwwwww 【设置的索引值6超过了列表中元素的数量,索引设置失败并返回错误信息】
(error) ERR index out of range
192.168.131.10:6379[5]> ltrim qz 0 2 【仅保留索引值0-2之间的3个元素(第0和第2个元素均被保留)】
OK
192.168.131.10:6379[5]> LRANGE qz 0 -1 【查看保留后的结果】
1) "e"
2) "r"
3) "e"
2.4 LINSERT
- LINSERT:在元素前/后插入值
- 如果被插入的元素不存在,则操作失败,并返回值为-1
- 为不存在的键插入新元素,命令操作失败,返回值为0
192.168.131.10:6379[5]> SELECT 6 【切换到6号库】
OK
192.168.131.10:6379[6]> keys * 【查看该库所有键】
(empty list or set)
192.168.131.10:6379[6]> lpush qz q w e r t 【创建qz键以及与其关联的列表,并将参数插入】
(integer) 5
192.168.131.10:6379[6]> linsert qz before q q10 【在元素q前面插入新元素q10】
(integer) 6
192.168.131.10:6379[6]> lrange qz 0 -1 【查看结果】
1) "t"
2) "r"
3) "e"
4) "w"
5) "q10"
6) "q"
192.168.131.10:6379[6]> linsert qz after r r20 【在元素r后面插入新元素r20】
(integer) 7
192.168.131.10:6379[6]> lrange qz 0 -1 【查看结果】
1) "t"
2) "r"
3) "r20"
4) "e"
5) "w"
6) "q10"
7) "q"
192.168.131.10:6379[6]> linsert qz after rr r20 【如果被插入的元素不存在,则操作失败,并返回值为-1】
(integer) -1
192.168.131.10:6379[6]> keys *
1) "qz"
192.168.131.10:6379[6]> linsert qz1 after rr r20 【为不存在的键插入新元素,命令操作失败,返回值为0】
(integer) 0
2.5 RPUSH & RPUSHX & RPOPLPUSH
- RPUSH:在键关联的列表中插入数据,顺序是从右往左
- RPUSHX:将元素插入到键关联的列表尾部
- RPOPLPUSH:将键1关联列表尾部的元素插入到键2关联列表的头部(原子性的完成这两步操作。若2个键一样则将列表中的尾部元素移到头部,并返回移动的元素)
【RPUSH】
192.168.131.10:6379[6]> keys *
1) "qz"
192.168.131.10:6379[6]> rpush qz1 q w e r 【在qz1关联的列表中插入数据,顺序是从右往左】
(integer) 4
192.168.131.10:6379[6]> lrange qz1 0 -1 【查看qz1关联的列表以及插入顺序】
1) "q"
2) "w"
3) "e"
4) "r"
【RPUSHX】
192.168.131.10:6379[6]> rpushx qz1 u 【将元素u插入到qz1关联的列表尾部】
(integer) 5 【因为之前有4个元素,索引插入u后返回值为5】
192.168.131.10:6379[6]> lrange qz1 0 -1 【查看,核对】
1) "q"
2) "w"
3) "e"
4) "r"
5) "u"
192.168.131.10:6379[6]> keys *
1) "qz2"
2) "qz1"
3) "qz"
192.168.131.10:6379[6]> rpushx qz3 u 【因为qz3键不存在,所以不会插入数,并且返回值为0】
(integer) 0
192.168.131.10:6379[6]> lrange qz1 0 -1 【查看qz1键的列表】
1) "q"
2) "w"
3) "e"
4) "r"
5) "u"
192.168.131.10:6379[6]> rpop qz1 【移除并返回qz键关联的列表中从右往左的第一个元素】
"u"
192.168.131.10:6379[6]> lrange qz1 0 -1 【查看,核对】
1) "q"
2) "w"
3) "e"
4) "r"
【RPOPLPUSH】
192.168.131.10:6379[6]> lrange qz1 0 -1 【查看qz1键关联的列表值】
1) "q"
2) "w"
3) "e"
4) "r"
192.168.131.10:6379[6]> RPOPLPUSH qz1 qz3 【将qz1键关联列表尾部的元素r插入到qz3键关联列表的头部(原子性的完成这两步操作)】
"r"
192.168.131.10:6379[6以上是关于Redis数据类型(String&List&Hash&Set&Sorted Sed)的主要内容,如果未能解决你的问题,请参考以下文章