一、简介:string: 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M.
二、应用场景:
实时记录网站每天的的PV和UV
实时新浪微博每个账号关注和被关注人数。
三、常用操作:
1、set方法:
set key value
将key的值设为value。
如果key已经存在,set就覆盖旧值。
例如:redis> set color red
redis> get color
"red"
redis> set color black
redis> get color
"black"
2、setnx方法:
setnx key value
将key的值设为value,当且仅当key不存在。
若key已经存在,则SETNX不覆盖旧值,即保持原值。
SETNX是”SET if Not eXists”(如果不存在,则SET)的简写。
例如:
redis> SETNX job "programmer"
(integer) 1 job设置成功
redis> SETNX job "code-farmer"
(integer) 0 job设置失败
redis> GET job
"programmer" 没有被覆盖
3、setex方法:
SETEX key seconds value
将key的值设为value,并将key的生存时间设为seconds(以秒为单位)。
如果key 已经存在,SETEX命令将覆盖旧值。
注意:这个命令类似于以下两个命令:
SET key value
EXPIRE key seconds # 设置生存时间
不同之处是,SETEX是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在Redis用作缓存时,非常实用。
4、setrange方法:
setrange key offset value
用value参数覆写给定key所储存的字符串值,从下标offset开始。
redis> set email [email protected]
redis> get email
redis> setrange email 5 google.com
redis> get email
redis> setrange email 5 sina.cn
redis> get email
5、mset方法:
MSET key value [key value ...]
同时设置一个或多个key-value对。
当发现同名的key存在时,MSET会用新值覆盖旧值,如果你不希望覆盖同名key,请使用MSETNX命令。
MSET是一个原子性(atomic)操作,所有给定key都在同一时间内被设置,某些给定key被更新而另一些给定key没有改变的情况,不可能发生。
redis> MSET date "2015.11.11" time "9.09a.m." weather "sunny" OK
6、append方法:
APPEND key value
如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值之后。
如果key不存在,APPEND就简单地将给定key设为value,就像执行SET key value一样。
# 情况1:对不存在的key执行APPEND redis> EXISTS myphone # 确保myphone不存在 (integer) 0 redis> APPEND myphone "mi" # 对不存在的key进行APPEND,等同于SET myphone "mi" (integer) 5 # 字符长度 # 情况2:对字符串进行APPEND redis> APPEND myphone " - 1110" (integer) 12 # 长度从5个字符增加到12个字符 redis> GET myphone # 查看整个字符串 "mi - 1110"
7、get方法:
get key
返回key所关联的字符串值。
如果key不存在则返回特殊值nil。
假如key储存的值不是字符串类型,返回一个错误,因为GET只能用于处理字符串值。
redis> GET animate (nil) redis> SET animate "anohana" OK redis> GET animate "anohana"
8、mget方法:
MGET key [key ...]
返回所有(一个或多个)给定key的值。
如果某个指定key不存在,那么返回特殊值nil。因此,该命令永不失败。
9、getrange方法:
GETRANGE key start end
返回key中字符串值的子字符串,字符串的截取范围由start和end两个偏移量决定(包括start和end在内)。
负数偏移量表示从字符串最后开始计数,-1表示最后一个字符,-2表示倒数第二个,以此类推。
GETRANGE通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
备注:在<=2.0的版本里,GETRANGE被叫作SUBSTR。
redis> SET greeting "hello, my friend" OK redis> GETRANGE greeting 0 4 # 返回索引0-4的字符,包括4。 "hello" redis> GETRANGE greeting -1 -5 # 不支持回绕操作,必须从前往后截取 "" redis> GETRANGE greeting -3 -1 # 负数索引 "end" redis> GETRANGE greeting 0 -1 # 从第一个到最后一个 "hello, my friend" redis> GETRANGE greeting 0 1008611 # 值域范围不超过实际字符串,超过部分自动被符略"hello, my friend" GETSET key value 将给定key的值设为value,并返回key的旧值。 当key存在但不是字符串类型时,返回一个错误。 redis> GETSET mail [email protected] # 因为mail之前不存在,没有旧值,返回nil (nil) redis> GETSET mail [email protected] # mail被更新,旧值被返回 "[email protected]" strlen key 返回key所储存的字符串值的长度。 当key储存的不是字符串值时,返回一个错误。 当 key不存在时,返回0。
redis> SET mykey "Hello world" OK redis> STRLEN mykey (integer) 11 redis> STRLEN nonexisting # 不存在的key长度视为0 (integer) 0
12、incr方法:
INCR key
将key中储存的数字值+1。
如果key不存在,以0为key的初始值,然后执行INCR操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在64位(bit)有符号数字表示之内。
redis> SET page_view 20 OK redis> INCR page_view (integer) 21 redis> GET page_view # 数字值在Redis中以字符串的形式保存 "21"
13、incrby方法:
INCRBY key increment
将key所储存的值加上增量increment。
如果key不存在,以0为key的初始值,然后执行INCRBY命令。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在64位(bit)有符号数字表示之内。
关于更多递增(increment)/递减(decrement)操作信息,参见INCR命令。
# 情况1:key存在且是数字值 redis> SET rank 50 # 设置rank为50 OK redis> INCRBY rank 20 # 给rank加上20 (integer) 70 redis> GET rank "70" redis> INCRBY rank -20 # 给rank加上-20 (integer) 50 # 情况2:key不存在 redis> EXISTS counter (integer) 0 redis> INCRBY counter 30 (integer) 30 redis> GET counter "30" # 情况3:key不是数字值 redis> SET book "long long ago..." OK redis> INCRBY book 200 (error) ERR value is not an integer or out of range key中储存的数字值-1。 如果key不存在,以0为key的初始值,然后执行DECR操作。 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 本操作的值限制在64位(bit)有符号数字表示之内。 关于更多递增(increment)/递减(decrement)操作信息,参见INCR命令。
情况1:对存在的数字值key进行DECR redis> SET failure_times 10 OK redis> DECR failure_times (integer) 9 # 情况2:对不存在的key值进行DECR redis> EXISTS count (integer) 0 redis> DECR count (integer) -1 # 情况3:对存在但不是数值的key进行DECR redis> SET company YOUR_CODE_SUCKS.LLC OK redis> DECR company (error) ERR value is not an integer or out of range
15、decrby方法:
DECRBY key decrement
将key所储存的值减去减量decrement。
如果key不存在,以0为key的初始值,然后执行DECRBY操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在64位(bit)有符号数字表示之内。
关于更多递增(increment)/递减(decrement)操作信息,参见INCR命令
# 情况1:对存在的数值key进行DECRBY redis> SET count 100 OK redis> DECRBY count 20 (integer) 80 # 情况2:对不存在的key进行DECRBY redis> EXISTS pages (integer) 0 redis> DECRBY pages 10 (integer) -10 redis> DECRBY pages -20 (integer) 10