字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习奠定基础。如图2-7所示,字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB
目录
set
1.语法:
set key value [EX seconds] [PX milliseconds] [NX|XX]
将字符串的value关联到key.如果存在的话,直接覆盖掉
2.参数解析:
EX seconds:设置键的过期时间秒。执行set key value Ex seconds和setex key seconds value一样。
PX milliseconds:过期时间用毫秒设置。set key value PX milliseconds和psetex key milliseconds value一样。
NX:只在键不存在的时候,才对键进行设置操作,相当于添加。set key value NX和setnx key value一样。
XX:只在键已经存在时,才对键进行设置操作,相当于更新。
set可以通过参数实现setnx、setex、psetex,所以未来版本可能会移除掉。
3.返回值:
2.6.12以前总是返回OK
2.6.12开始,成功时返回OK ,否则返回空回复
4.代码示例:
不存在的键进行设置:
set m "Hello"
get m
已存在的键进行设置:
set m "World"
get m
返回:"World"
使用EX选项(设置过期时间秒):
set m "hello" EX 300
get m
TTL m(查看还剩多少秒过期)
使用PX选项(设置过期时间毫秒):
set m "hello" PX 456654
get m
PTTL m(查看还剩多少毫秒过期)
使用NX选项(键不存在时设置,已经存在的话设置无效):
set m "hello" NX
get m
set m "world" NX
get m
返回:"hello"
使用XX选项(键存在时设置,不存在时设置无效):
exists m
set m "hello" XX
set m "hello"
set m "world" XX
get m
返回:"world"
setnx
1.语法:
setnx key value
只在键不存在的情况下,将键key的值设置为value.
若键存在,不做任何动作
2.返回值:
成功时返回1,否则0
3.例子:
exists m
setnx m "hello"
setnx m "world"
get m
返回:"hello"
setex
1.语法
setex key seconds value
将键key的值设置为value,并将key的生存时间设置为seconds秒
如果键存在,将会被覆盖掉。
setex和下面两个命令类似:
set key value
expire key seconds
不同之处:
setex是一个原子性的操作,它可以在同一时间内完成设置值和过期时间这两个操作,因此它在存储缓存的时候非常实用
2.返回值:
成功返回OK,当时间不合法时,返回一个错误。
3.例子:
在键key不存在的时候,执行setex:
setex m 60 "hello"
get m
TTL m
键已经存在,实用setex覆盖旧值:
set m "hello"
setex m 60 "world"
get m
TTL m
psetex:
1.语法
psetex key milliseconds value
和setex类似,它的单位是毫秒
2.返回值:
成功返回OK
3.例子:
psetex m 10000 "hello"
PTTL m
get m
setnx和setxx实际中应用场景:
以setnx为例子:由于Redis单线程命令处理机制,如果有多个客户端同时设置setnx key value,setnx特性只有一个客户端能设置成功,setnx可以作为分布锁的一种实现方案,Redis官方给出了使用setnx实现分布式锁的方法:http://redis.io/topics/distlock