string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
它能存储任何形式的字符串,包括二进制数据,邮箱,json化的对象,甚至是一张图片。允许存储数据最大是 512MB。
使用场景 : 缓存,计数器,微博数,粉丝数,分布式锁
set
设置给定key的值,如果已存在覆盖,无视类型.set命令执行后,之前设置的过期时间失效.正常返回ok,如果加了nx或者xx,没有设置条件,返回nil
从2.6.12版本开始,redis为SET命令增加了一系列选项:
EX seconds –设置键key的过期时间,单位时秒
PX milliseconds –设置键key的过期时间,单位时毫秒
NX – 只有键key不存在的时候才会设置key的值
XX – 只有键key存在的时候才会设置key的值
- setxx : 指定key存在,为key设置给定的值(成功1,失败0)
127.0.0.1:6379> set yhq qhh xx (nil) 127.0.0.1:6379> set yhq qhh OK 127.0.0.1:6379> set yhq qhh1 xx OK 127.0.0.1:6379> get yhq "qhh1"
-
setnx : 指定的key不存在时,为key设置给定的值(成功1失败0)
> setnx yhq 123
(integer) 1
> setnx yhq 123
(integer) 0
- ex : 设置key的过期时间,单位秒
> set yhq qhh ex 10 OK > get yhq "qhh" > get yhq # 超时 (nil)
-
setex : 设置key的过期时间,如果值存在覆盖
> setex yhq 20 qhh OK > get yhq "qhh" > setex yhq 10 qqqq OK > get yhq "qqqq" > get yhq #超时 (nil)
expire : 设置key的过期时间,成功返回1,失败或者key不存在返回0
> expire yhq 10 (integer) 0 > set yhq qhh OK > expire yhq 5 (integer) 1 > get yhq # 超时 (nil)
px : 设置key的过期时间,单位毫秒
> set yhq qhh px 10000 OK > get yhq "qhh" > get yhq #超时 (nil)
psetex : 设置key的过期时间,单位毫秒
> psetex yhq 10000 qhh OK > get yhq "qhh" > get yhq #超时 (nil)
pexpire : 设置key的过期时间,单位毫秒,成功返回1,失败或者不存在返回0
> pexpire yhq 10000 (integer) 0 > set yhq qhh OK > pexpire yhq 10000 (integer) 1 > get yhq (nil)
ttl
以秒为单位返回key的剩余获取时间,当key不存在时返回-2,当key没有过期时间时返回-1
> set yhq 123
OK
> ttl yhq
(integer) -1
> expire yhq 10
(integer) 1
> ttl yhq
(integer) 7
> ttl yhq
(integer) -2
pttl : 以毫秒为单位返回key的剩余获取时间,当key不存在时返回-2,当key没有过期时间时返回-1
> set yhq 123
OK
> pexpire yhq 10086
(integer) 1
> pttl yhq
(integer) 3263
> pttl yhq
(integer) -2
persist : 移除给定key的过期时间,使其永不过期(成功移除返回1,key不存在或者没有过期时间返回0)
> expire qhhyhq 100
(integer) 1
> ttl qhhyhq
(integer) 96
> persist qhhyhq
(integer) 1
> ttl qhhyhq
(integer) -1
- nx : 只有key不存在时才能设置
> set yhq qhh nx OK > set yhq 666 nx (nil) > set yhq 666 OK > get yhq "666"
- xx : 只有key存在时才能设置
> set yhq qhh xx (nil) > set yhq qhh OK > set yhq 666 xx OK
dump : 序列化给定key,返回被序列化的值,使用restore反序列化,key不存在返回nil
- 它带有64位的校验和,用于检测错误,restore在进行反序列化之前会先检查校验和
- 值的编码和RDB文件保持一致
- RDB版本会被编码在序列化值中,如果因为redis版本不用造成RDB格式不兼容,nameredis会拒绝对这个值进行反序列化操作
> dump yhq (nil) > set yhq qhh OK > dump yhq "\x00\x03qhh\x06\x00\xa1\xc2\xcd\\\xe2\x96\xbd\xe3"
restore : 反序列化给定的序列化值,并将它和给定的key关联,参数ttl以毫秒为单位为key设置生存时间,如果ttl为0,那么不设置生存时间(restore在执行反序列化之前会先对序列化值的RDB版和数据进行检查,如果RDB版本不完整的话,那么restore会拒绝进行反序列化,并返回一个错误)
> restore yhq-msg 0 "\x00\x03qhh\x06\x00\xa1\xc2\xcd\\\xe2\x96\xbd\xe3" OK > get yhq-msg "qhh"
strlen : 获取key的长度(key不存在返回0,key不是字符串类型返回一个错误)
> strlen yhq (integer) 3 > strlen yhqqhh (integer) 0
setrange : 用给定的字符串覆盖key,从offset开始
> setrange yhq 6 qhh
(integer) 9
> get yhq
"012345qhh"
> get yhq
"012345"
> setrange yhq 7 qhh
(integer) 10
> get yhq
"012345\x00qhh"
> set yhq 012345
OK
> get yhq
"012345"
> setrange yhq 2 yhqqhhhhh
(integer) 11
> get yhq
"01yhqqhhhhh"
getset : 设置给定key的值,并返回key的旧值(没有旧值返回nil,当key存在但不是一个字符串类型时,返回一个错误)
> get yhq "6" > getset yhq 666 "6" > get yhq "666"
mset : 设置一个或者多个键值对
> mset yhq 123 qhh 321
OK
mget : 获取一个或者多个键值对(如果某个key不存在,返回nil)
> mget yhq qhh yhqqhh
1) "123"
2) "321"
3) (nil)
getrange : 获取key的子字符串
> get yhq "123" > getrange yhq 0 1 "12" > getrange yhq 0 -1 "123"
msetnx : 设置多个key,当所有key设置成功(不存在)返回1,如果失败(至少有一个存在)返回0
> msetnx q 132 y 123 (integer) 1 > msetnx q 132 yhq 123 (integer) 0
append : 给定key追加val,如果不存在则set,返回val的长度
> append yhq 123 (integer) 3 > get yhq "123" > append yhq '-666' (integer) 7 > get yhq "123-666"
incr : 给定key数值+1,如果key不存在,先set key 0再+1
> incr yhq (integer) 1 > incr qhh (error) ERR value is not an integer or out of range
decr : 给定key数值-1,如果key不存在,先set key 0再-1
> decr yhq (integer) -1 > decr qhh (error) ERR value is not an integer or out of range
incrby / decrby : 增加/减少给定值
> get yhq "-1" > incrby yhq 666 (integer) 665 > decrby yhq 555 (integer) 110
incrbyfloat: 增加给定浮点值
> get yhq "110" > incrbyfloat yhq 6.6 "116.6"
位操作 : 一个字节由8个二进制位组成
> set yhq bar
OK
> get yhq
"bar"
bar 在ASCII码中分别是 01100010 , 01100001 , 01110010
getbit : 获取字符串指定二进制位的值,索引从0开始,超出索引默认为0
> getbit yhq 6 (integer) 1 > getbit yhq 600 (integer) 0
将a转换为A A在ASCII码中是 65 0100 0001
setbit : 设置字符串指定二进制位的值,返回值是该位置旧的值,索引从0开始,超出长度,自动将中间的二进制设置为0,不存在的键会将其前面的赋值0
> setbit yhq 10 0 (integer) 1 > get yhq "bAr"
01100010 , 01000001 , 01110010
bitcount : 统计二进制位是1的个数,可以指定范围(bA 0-1),不存在返回0
> bitcount yhq (integer) 9 > bitcount yhq 0 1 (integer) 5