一、String数据类型
概述:String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等
1. SET/GET/APPEND/STRLEN:
append命令:append key value,将value值追加到已存在的value值的后面,并追加操作之后的新value的长度。特殊的,当之前redis中没有该键值对存在的话,返回0,并将此value设置为key的值,相当于set key value
strlen命令:strlen key 返回key键的value字符串的长度。
当键值对存在时包括3种情况:
a.当value为空字符串时返回0
b.当value非字符串类型时,报错
c.当value为字符串时,返回value字符串的长度
当不存在该key键的时候,返回0
redis 127.0.0.1:6379> exists mykey #判断该键是否存在,存在返回1,否则返回0。
(integer) 0
redis 127.0.0.1:6379> append mykey "hello" #该键并不存在,因此append命令返回当前Value的长度。
(integer) 5
redis 127.0.0.1:6379> append mykey " world" #该键已经存在,因此返回追加后Value的长度。
(integer) 11
redis 127.0.0.1:6379> get mykey #通过get命令获取该键,以判断append的结果。
"hello world"
redis 127.0.0.1:6379> set mykey "this is a test" #通过set命令为键设置新值,并覆盖原有值。
OK
redis 127.0.0.1:6379> get mykey
"this is a test"
redis 127.0.0.1:6379> strlen mykey #获取指定Key的字符长度。
(integer) 14
2. INCR/DECR/INCRBY/DECRBY:
redis中incr、incrby、decr、decrby属于string数据结构,它们是原子性递增或递减操作。
incr递增1并返回递增后的结果;
incrby根据指定值做递增或递减操作并返回递增或递减后的结果(incrby递增或递减取决于传入值的正负);
decr递减1并返回递减后的结果;
decrby根据指定值做递增或递减操作并返回递增或递减后的结果(decrby递增或递减取决于传入值的正负);
redis 127.0.0.1:6379> set mykey 20 #设置Key的值为20
OK
redis 127.0.0.1:6379> incr mykey #该Key的值递增1
(integer) 21
redis 127.0.0.1:6379> decr mykey #该Key的值递减1
(integer) 20
redis 127.0.0.1:6379> del mykey #删除已有键。
(integer) 1
redis 127.0.0.1:6379> decr mykey #对空值执行递减操作,其原值被设定为0,递减后的值为-1
(integer) -1
redis 127.0.0.1:6379> del mykey
(integer) 1
redis 127.0.0.1:6379> incr mykey #对空值执行递增操作,其原值被设定为0,递增后的值为1
(integer) 1
redis 127.0.0.1:6379> set mykey hello #将该键的Value设置为不能转换为整型的普通字符串。
OK
redis 127.0.0.1:6379> incr mykey
(error) ERR value is not an integer or out of range
redis 127.0.0.1:6379> set mykey 10
OK
redis 127.0.0.1:6379> decrby mykey 5 #减少指定的整数
(integer) 5
redis 127.0.0.1:6379> incrby mykey 10 #增加指定的整数
(integer) 15
3. GETSET:
格式:GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
当 key 存在但不是字符串类型时,返回一个错误。
当key不存在时,返回nil
使用场景:
GETSET 可以和 INCR 组合使用,实现一个有原子性(atomic)复位操作的计数器(counter)。
举例来说,每次当某个事件发生时,进程可能对一个名为 mycount 的 key 调用 INCR 操作,通常我们还要在一个原子时间内同时完成获得计数器的值和将计数器值复位为 0 两个操作。
可以用命令 GETSET mycounter 0 来实现这一目标。
redis 127.0.0.1:6379> incr mycounter #将计数器的值原子性的递增1
(integer) 1
redis 127.0.0.1:6379> getset mycounter 0 #在获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成。
"1"
redis 127.0.0.1:6379> get mycounter #查看设置后的结果。
"0"
4. SETEX:
格式:SETEX key seconds value
该命令相当于将下面两行操作合并为一个原子操作
含义(setex = set expire):
将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。
如果 key 已经存在, SETEX 命令将覆写旧值。
redis 127.0.0.1:6379> setex mykey 15 "hello" #设置指定Key的过期时间为10秒。
OK
redis 127.0.0.1:6379> ttl mykey #通过ttl命令查看一下指定Key的剩余存活时间(秒数),-2表示已经过期,-1表示永不过期。
(integer) 4
redis 127.0.0.1:6379> get mykey #在该键的存活期内我们仍然可以获取到它的Value。
"hello"
redis 127.0.0.1:6379> ttl mykey #该ttl命令的返回值显示,该Key已经过期。
(integer) -2
redis 127.0.0.1:6379> get mykey #获取已过期的Key将返回nil。
(nil)
5. SETNX:
格式:setnx key value
说明:将key的值设定为value,只有当key不存在的时候使用,如果给定的key已经存在,则setnx不做任何操作。
其实setnx就是【SET if Not Exists】
redis 127.0.0.1:6379> del mykey #删除该键,以便于下面的测试验证。
(integer) 1
redis 127.0.0.1:6379> setnx mykey "hello" #该键并不存在,因此setnx命令执行成功。
(integer) 1
redis 127.0.0.1:6379> setnx mykey "world" #该键已经存在,因此本次设置没有产生任何效果。
(integer) 0
redis 127.0.0.1:6379> get mykey #从结果可以看出,返回的值仍为第一次设置的值。
"hello"
6. MSET/MGET/MSETNX:
mset 设置多个键值 如果键已经存在,覆盖该键对应的值 如果执行失败 所有的键都设置失败,成功返回OK 失败返回nil
mget 命令返回所有(一个或多个)给定 key 的值,如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil
MSETNX命令--原子性操作,命令:msetnx key value [key value...],当且仅当所有命令中出现的key不存在的时候才会被执行,返回1。也就是说只要命令中有一个key已经存在,那么操作就不会被执行,返回0
redis 127.0.0.1:6379> mset key1 "hello" key2 "world" #批量设置了key1和key2两个键。
OK
redis 127.0.0.1:6379> mget key1 key2 #批量获取了key1和key2两个键的值。
1) "hello"
2) "world"
redis 127.0.0.1:6379> msetnx key3 "zhang" key4 "san" #批量设置了key3和key4两个键,因为之前他们并不存在,所以msetnx命令执行成功并返回1。
(integer) 1
redis 127.0.0.1:6379> mget key3 key4
1) "zhang"
2) "san"
redis 127.0.0.1:6379> msetnx key3 "hello" key5 "world" #批量设置了key3和key5两个键,但是key3已经存在,所以msetnx命令执行失败并返回0。
(integer) 0
redis 127.0.0.1:6379> mget key3 key5 #批量获取key3和key5,由于key5没有设置成功,所以返回nil。
1) "zhang"
2) (nil)
二、List数据类型
概述:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素
1. LPUSH/LPUSHX/LRANGE:
Redis lpush,命令将一个或多个值插入到列表头部
语法:lpush key value [value ...]
Redis lpush 命令将一个或多个值