Redis数据库——Redis数据类型
Posted 水木,年華
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis数据库——Redis数据类型相关的知识,希望对你有一定的参考价值。
Redis数据库(二)——Redis数据类型
一、String类型
String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等
1.1、set / get / append / strlen
127.0.0.1:6379> append k1 hello #该键不存在,因此append创建
(integer) 5
127.0.0.1:6379> append k1 word #该键已经存在,因此返回追加后value的长度值
(integer) 9
127.0.0.1:6379> get k1 #通过get命令获取该键值
"helloword"
127.0.0.1:6379> strlen k1 #获取指定key的字符长度
(integer) 9
127.0.0.1:6379> exists k1 #判断该键是否存在,存在返回1,否则返回0
(integer) 1
127.0.0.1:6379> set k1 "just do it" #
OK
127.0.0.1:6379> get k1 #通过set命令为键设置新值,并覆盖原有值
"just do it"
1.2 、incr / decr / incrby / decrby
127.0.0.1:6379> set k2 100 #为键设置新值
OK
127.0.0.1:6379> incr k2 #该键的值递增1
(integer) 101
127.0.0.1:6379> incr k2
(integer) 102
127.0.0.1:6379> decr k2 #该键的值递减1
(integer) 101
127.0.0.1:6379> incrby k2 10 #该键的值递增固定值
(integer) 111
127.0.0.1:6379> decrby k2 30 #该键的值减少固定值
(integer) 81
127.0.0.1:6379> get k2
"81"
127.0.0.1:6379> set k2 "hello" #该键的值设置非数字
OK
127.0.0.1:6379> get k2
"hello"
127.0.0.1:6379> incr k2 #非数字无法实现自增长,必须为整数
(error) ERR value is not an integer or out of range
1.3、getset
获取key值返回,并给key设置新值
127.0.0.1:6379> get k2
"hello"
127.0.0.1:6379> getset k2 1 #获原有值的同时,并将其设置为新值,这两个操作原子性的同时完成.
"hello"
127.0.0.1:6379> get k2
"1"
1.4、setex
设置key值的过期时间为seconds
127.0.0.1:6379> setex k3 20 10 #设定k3的值为10,存活时间为20S
OK
127.0.0.1:6379> ttl k3 #通过ttl命令查看指定key的剩余存活时间(秒),-2表示已过期,-1表示永不过期
(integer) 12
127.0.0.1:6379> ttl k3
(integer) 9
127.0.0.1:6379> get k3
"10"
127.0.0.1:6379> ttl k3
(integer) -2
127.0.0.1:6379> get k3 #过期的key返回为nil
(nil)
1.5、setnx
创建指定键,若该键存在则不执行,不存在则执行
127.0.0.1:6379> setnx k9 10
(integer) 1
127.0.0.1:6379> get k9
"10"
127.0.0.1:6379> setnx k9 100
(integer) 0
127.0.0.1:6379> get k9
"10"
1.6、mset / mget / msetnx
批量指令
127.0.0.1:6379> mset aa "hello" bb "world" #批量设置键的值
OK
127.0.0.1:6379> mget aa bb #批量获取键的值
1) "hello"
2) "world"
127.0.0.1:6379> msetnx cc 100 dd 200
(integer) 1
127.0.0.1:6379> mget cc dd
1) "100"
2) "200"
127.0.0.1:6379> msetnx aa 200 mm 100 #批量设置键值,若有存在的键则不执行
(integer) 0
二、List类型
列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素
2.1、lpush / lpushx / lrange
lpush:#该命令会创建该键及与其关联的List,之后在将参数中的values从左到右依次插入到表头
lpushx:#该命令仅当key存在时,将value值插入表头
lrange:#返回列表中指定区间内的元素,0表示第一个元素,1表示第二个元素
127.0.0.1:6379> lpush k2 a b c d e
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lpush k3 a b c d e
(integer) 5
127.0.0.1:6379> lpush k3 f
(integer) 6
127.0.0.1:6379> lrange k3 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lpushx k3 g #将g插入表头
(integer) 7
127.0.0.1:6379> lrange k3 0 -1
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"
127.0.0.1:6379> lrange k3 3 6 #第一个元素到第七个元素
1) "d"
2) "c"
3) "b"
4) "a"
2.2、lpop / llen
lpop #移除并返回第一个元素,从头开始
llen #查看列表中元素个数
127.0.0.1:6379> lpop k3
"g"
127.0.0.1:6379> llen k3
(integer) 6
127.0.0.1:6379> lpop k3
"f"
127.0.0.1:6379> lrange k3 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
2.3、lrem / lset / lindex / ltrim
lrem key count value:从列表头部开始删除count个值为value的元素,并返回实际删除数量
lset key index value:将位置索引为index的元素设置新值value
lindex key index:获取索引为index的元素
ltrim key start stop:仅保留从位置索引start到索引stop的元素
127.0.0.1:6379> lpush k4 a b c d b a #创建一个list
(integer) 6
127.0.0.1:6379> lrange k4 0 -1
1) "a"
2) "b"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lrem k4 2 a #从头部(left)向尾部(right)变量链表,删除2个值等于a的元素,返回值为实际删除的数量。
(integer) 2
127.0.0.1:6379> lrange k4 0 -1
1) "b"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> lset k4 2 f #将第三个元素设置为f
OK
127.0.0.1:6379> lrange k4 0 -1
1) "b"
2) "d"
3) "f"
4) "b"
127.0.0.1:6379> lindex k4 3 #获取索引为3的元素
"b"
127.0.0.1:6379> lrange k4 0 -1
1) "b"
2) "d"
3) "f"
4) "b"
127.0.0.1:6379> ltrim k4 0 2 #仅保留索引为0到索引为2的元素,相当于保留删除
OK
127.0.0.1:6379> lrange k4 0 -1
1) "b"
2) "d"
3) "f"
2.4、linsert
linsert #在键的xxx元素前|后插入新元素元素
127.0.0.1:6379> lrange k4 0 -1
1) "b"
2) "d"
3) "f"
127.0.0.1:6379> linsert k4 before b 1
(integer) 4
127.0.0.1:6379> lrange k4 0 -1
1) "1"
2) "b"
3) "d"
4) "f"
127.0.0.1:6379> linsert k4 after f 2
(integer) 5
127.0.0.1:6379> lrange k4 0 -1
1) "1"
2) "b"
3) "d"
4) "f"
5) "2"
127.0.0.1:6379> linsert k4 before 1 e
(integer) 6
127.0.0.1:6379> lrange k4 0 -1
1) "e"
2) "1"
3) "b"
4) "d"
5) "f"
6) "2"
127.0.0.1:6379>
2.5、rpush / rpushx / rpop / rpoplpush
rpush #将值从左往右依次插入到表尾
rpushx #指定键value从尾部插入,键存在时执行,否则不执行
rpop #移除并返回键的第一个元素,从尾开始
rpoplpush #将键1尾部元素xxx弹出,同时再插入到键2的头部(原子性的完成这两步操作)
127.0.0.1:6379> rpush k5 a b c d e
(integer) 5
127.0.0.1:6379> lrange k5 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> rpushx k5 f #将元素f在尾部插入键k5
(integer) 6
127.0.0.1:6379> lrange k5 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> rpop k5 #移除k5键的最后一个元素
"f"
127.0.0.1:6379> lrange k5 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> rpoplpush k5 k6 #将键K5的最后一个元素弹出,同时在K6键的头部插入
"e"
127.0.0.1:6379> lrange k6 0 -1
1) "e"
127.0.0.1:6379> lrange k5 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> rpoplpush k5 k6
"d"
127.0.0.1:6379> lrange k5 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lrange k6 0 -1
1) "d"
2) "e"
三、Hash类型
hash用于存储对象。可以采用这样的命名方式:对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
3.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 k7 zhangsan1 a zhangsan2 b zhangsan3 c
(integer) 3
127.0.0.1:6379> get k7 zhangsan1
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> hget k7 zhangsan1
"a"
127.0.0.1:6379> hget k7 zhangsan2
"b"
127.0.0.1:6379> hexists k7 zhangsan4
(integer) 0
127.0.0.1:6379> hlen k7
(integer) 3
127.0.0.1:6379> hget k7 zhangsan3
"c"
127.0.0.1:6379> hsetnx k7 zhangan3 d
(integer) 0
127.0.0.1:6379> hget k7 zhangsan3
"c"
127.0.0.1:6379> hsetnx k8 zhangan3 d
(integer) 0
3.2、hincrby
hincrby #给xxx键的xxx字段值加x
127.0.0.1:6379> hset k7 lisi1 100 #追加的方式
(integer) 1
127.0.0.1:6379> hget k7 lisi1
"100"
127.0.0.1:6379> hget k7 zhangsan1
"a"
127.0.0.1:6379> hincrby k7 lisi1 5
(integer) 105
127.0.0.1:6379> hincrby k7 lisi1 -10
(integer) 95
127.0.0.1:6379> hget k7 lisi1
"95"
3.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 k8 zhaoliu1 a zhaoliu2 b
OK
127.0.0.1:6379> hmget k8 zhaoliu1 zhaoliu2
1) "a"
2) "b"
127.0.0.1:6379> hgetall k8
1) "zhangan3"
2) "d"
3) "zhangan4"
4) "d"
5) "zhangan5"
6) "f"
7) "zhaoliu1"
8) "a"
9) "zhaoliu2"
10) "b"
127.0.0.1:6379> hget k8 zhangsan3
(nil)
127.0.0.1:6379> hget k8 zhaoliu1
"a"
127.0.0.1:6379> hkeys k8
1) "zhangan3"
2) "zhangan4"
3) "zhangan5"
4) "zhaoliu1"
5) "zhaoliu2"
127.0.0.1:6379> hvals k8
1) "d"
2) "d"
3) "f"
4) "a"
5) "b"
127.0.0.1:6379> hget k8 zhaoliu1 zhaoliu2
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hmget k8 zhaoliu1 zhaoliu2
1) "a"
2) "b"
以上是关于Redis数据库——Redis数据类型的主要内容,如果未能解决你的问题,请参考以下文章