字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,它是二进制安全的,可以存储例如图片的二进制编码等.这是因为Reids的字符串类型并没有直接使用C语言风格的字符串(以空字符结尾的字符数组),而是构建了一种简单动态字符串 (simple dynamic string, SDS)的抽象类型.在后面的文章中会详细介绍Redis中字符串类型的实现.
下面我们一起看一下字符串的使用.
set key value
get value
set 和 get分别是设置键的值和获取键的值,例如:
如果我们再次为键名为key的键设置值,将会把原来的值覆盖掉,即键的值为键中最后设置的值.
Redis中可以存储只有整数的字符串,对于这种字符串,Redis提供了INCR命令,其作用是将当前键的值自增1,并返回自增后的值.用法如下:
那么当键的值不是的字符串不是整数,会发生什么情况呢?实践说话:
当键值不是整数时,会报值不是整数或者超出范围的错误.
与INCR命令类似的是DECR命令,后者的作用是将键的值减1,当值不是整数的字符串时,也会出错.
INCRBY key increment
INCRBY 命令可以增加指定的整数.例如:
DECRBY key decrement
DECRBY 命令可以减少指定的整数.例如:
INCRBYFLOAT key increment
INCRBYFLOAT命令的作用是将键的值增加指定的浮点数.例如:
APPEND key value
APPEND 的作用是向key对应的值后面追加字符串,如果键不存在,则创建该键,并将值设为value.该命令的返回值是追加后字符串的总长度.例如:
可以看到loveyou之间是没有空格的,如果我们想让两者中间有个空格分隔,可以这样做:
如果字符串中有空格,需要将字符串包含在引号内.同样,如果字符串中包含回车换行符"\n",也要放在引号内.
STRLEN key
STRLEN命令的作用是获取字符串的长度
前面说过Redis中的字符串是二进制安全的,可以存储空格、0等字符,可以和普通字符串一样计入长度中.(注意key2的值love后面有个空格o~)
mset key0 value0 [key1 value1 ...]
mget key0 [key1 ...]
mse、mget命令的特别之处是它们分别可以同时设置、获取多个键值.例如:
SETBIT key offset value
GETBIT key offset
BITCOUNT key [start] [end]
BITOP operation destkey key1 [key2 ...]
以上四个命令可以对二进制位进行操作,SETBIT可以设置key对应的值的第offset位的值为value;GETBIT则是获取key对应的值的第offset位的值;BITCOUNT是统计key对应的值一段范围(默认是值的全部)中1的个数;BITOP则是对多个字符串进行为运算,如:AND(与)、OR(或)、XOR(亦或)、NOT(非)运算.例如:
在Redis中可以对一个键值对的过期时间,当过期时,Redis会自动将键删除.命令如下:
EXPIRE key seconds
EXPIRE命令是为数据设置过期时间,时间单位为秒.该命令执行成功时返回1,失败或键不存在时返回0.例如:
注: flushall
命令是将数据库中所有键删除.
如果想知道一个键还有多长时间会被删除,可以使用TTL
命令,该命令返回的是键的剩余时间.例如:
当键设置为永久有效时,TTL命令将会返回-1;当键不存在时,返回-2.例如:
Redis中还可以取消键的生存时间,即将有过期时间的键设置为永久键.可以使用PERSIST
命令.例如:
除了PERSIST命令外,使用SET
、MSET
同样也会将键设置为永久键;使用EXPIRE会重新设置键的生存时间.
EXPIRE命令
设置时间的单位是秒,如果想要更精确地设置数据的生存时间,可以使用PEXPIRE
命令,该命令与EXPIRE
命令的唯一区别是前者设置时间的单位是毫秒.
另外还有两个与生存时间有关的命令:EXPIREAT
和PEXPIREAT
,这两个命令与EXPIRE、PEXPIRE的区别在于前者是使用Unix时间戳作为第二参数的,表示数据将在设置的时间点过期,被删除.
参考资料:《Redis入门指南》–李子骅