Redis数据类型(String&List&Hash&Set&Sorted Sed)

Posted TaKe___Easy

tags:

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

Redis数据类型

一、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,所以列表头部的两个元素均已被弹出,因此现在列表中元素的数量为1192.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后返回值为5192.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]> lrange qz1 0 -1      【查

以上是关于Redis数据类型(String&List&Hash&Set&Sorted Sed)的主要内容,如果未能解决你的问题,请参考以下文章

Redis数据类型(String&List&Hash&Set&Sorted Sed)

Redis数据结构之string类型和list类型

JavaWeb之redis&Jedis

Redis中的数据结构-String与List

Redis五大数据类型之List

laravel-- 在laravel操作redis数据库的数据类型(string哈希无序集合list链表有序集合)