字符串类型是和键关联的最简单的类型。它是Memcached中唯一的数据类型,因此对于新手来说,在Redis中使用它也是很容易的。键是字符串类型,当我们也使用字符串类型作为值时,我们会可以从一个字符串映射到另一个字符串。字符串数据类型有很多应用场景,例如缓存HTML片段或页面。
下面简单介绍一下字符串的命令(在redis-cli中使用):
> set one-more-key OneMoreStudy
OK
> get one-more-key
"OneMoreStudy"
使用SET和GET命令来设置和查询字符串值的方式。
需要注意的是,如果当前键已经和字符串值相关联,SET命令将会替换已存储在键中的现有值。字符串可以是任意的二进制数据,比如jpeg图像。字符串最多不能大于512MB。SET命令还有一些实用的可选参数,比如:
> set one-more-key Java nx #如果key存在,则设置失败。
(nil)
> set one-more-key Java xx #如果key存在,才设置成功。
OK
虽然字符串是Redis的基本值,但也可以使用它们执行一些实用的操作。比如:
> set one-more-counter 50
OK
> incr one-more-counter #自增加1
(integer) 51
> incr one-more-counter #自增加1
(integer) 52
> incrby one-more-counter 5 #自增加5
(integer) 57
INCR命令将字符串值解析为整数,将其自增加1,最后将获得的值设置为新值。还有其他类似的命令,例如INCRBY,DECR和DECRBY等命令。INCR命令是原子操作,即时有多个客户端同时同一个key的INCR命令,也不会进入竞态条件。比如,上面的例子先设置one-more-counter的值为50,即使两个客户端同时发出INCR命令,那么最后的值也肯定是52。
可以使用MSET和MGET命令在单个命令中设置或查询多个键的值,对于减少延迟也很有用。比如:
> mset a 1 b 2 c 3
OK
> mget a b c
1) "1"
2) "2"
3) "3"
使用MGET命令时,Redis返回一个值的数组。
使用DEL命令可以删除键和相关联的值,存在指定的键则返回1,不存在指定的键则返回0。使用EXISTS命令判断Redis中是否存在指定的键,存在指定的键则返回1,不存在指定的键则返回0。比如:
> set one-more-key OneMoreStudy
OK
> exists one-more-key
(integer) 1
> del one-more-key
(integer) 1
> exists one-more-key
(integer) 0
使用TYPE命令,可以返回存储在指定key的值的数据类型,比如:
> set one-more-key OneMoreStudy
OK
> type one-more-key
string
> del one-more-key
(integer) 1
> type one-more-key
none
在讨论更复杂的数据结构之前,我们需要讨论另一个功能,该功能无论值类型是什么都适用,它就是EXPIRE命令。它可以为键设置到期时间,当超过这个到期时间后,该键将自动销毁,就像对这个键调用了DEL命令一样。比如:
> set one-more-key OneMoreStudy
OK
> expire one-more-key 5
(integer) 1
> get one-more-key #立刻调用
"OneMoreStudy"
> get one-more-key #5秒钟后调用
(nil)
上面的例子,适用了EXPIRE命令设置了过期时间,也可以使用PERSIST命令移除键的过期时间,这个键将持久保持。除了EXPIRE命令,还可以使用SET命令设置过期时间,比如:
> set one-more-key OneMoreStudy ex 10 #设置过期时间为10秒
OK
> ttl one-more-key
(integer) 9
上面的例子,设置了一个字符串值OneMoreStudy的one-more-key,该键的到期时间为10秒。之后,调用TTL命令以检查该键的剩余生存时间。
到期时间可以使用秒或毫秒精度进行设置,但到期时间的分辨率始终为1毫秒。实际上,Redis服务器上存储的不是到期时间长度,而是该键到期的时间。
|