分类: NOSQL
2015-03-19 13:55:24
Redis字符串
Redis字符串类型是用于和一个Redis关键字相关联的最简单的值类型。它是Memcached中唯一的数据类型,所以对新人来说,在Redis中使用字符串类型也是非常自然的。
由于Redis的关键字都是字符串,当我们使用字符串类型作为值时,我们其实是将一个字符串映射到了另一个字符串。字符串数据类型对许多应用实例都是有用的,像缓存HTML片段或页面。
让我们使用redis-cli来试试字符串类型吧。(本手册中的所有例子都将通过redis-cli来演示)
> set mykey somevalue
OK
> get mykey
"somevalue"
如你所见,我们通过使用SET和GET命令来设置和获取一个字符串值。请注意,如果一个关键字已经存在,SET命令会替换这个关键字中已存储的值,即使该关键字关联的值是非字符串类型的。所以,SET是用来赋值的。
值可以是任何类型的字符串(包括二进制数据),例如你可以把一个jpeg图片存到一个关键字里。一个值的大小不能超过512MB。
SET命令的有一些有趣的选项,这些选项作为附加参数提供。例如,我可以让SET在关键词已存在时返回失败,或者相反的,在已存在时返回成功:
> set mykey newval nx
(nil)
> set mykey newval xx
OK
即使字符串是Redis的基础值类型,我们还是可以执行一些有趣的操作。例如,原子式地增长:
> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152
INCR命令把一个字符串值解析成整型,加上1,最后把获取的值设置为新值。有几个相似的命令,像INCRBY,DECR和DECRBY。它们实质上是相同的命令,只是表现出的作用不同。
怎么理解INCR是原子操作呢?即多个客户端对同一关键字执行INCR,不会进入竞争状态。例如,下面的情况是不会发生的:客户端1和客户端2同时读取“10”,增加到11,把新值设置为11。最后的结果总会是12,读-增加-设置的操作在其他客户端都没有执行命令时才会被执行。
有不少操作字符串的命令,例如,GETSET命令对一个关键字设置新值,返回老值最为结果。你可以这样使用这个命令,比如,你有一个系统,每次你的网站有一个新的访问时,对一个Redis关键字使用INCR进行自增。你可能想每小时收集一次该信息,不丢失每一次自增。你可以GETSET这个关键字,给它赋新值“0”,把旧值读回来。
用同一条命令设置和获取多个关键字的值的能力对降低延迟也是有用的。因此有了MSET和MGET命令:
> mset a 10 b 20 c 30
OK
> mget a b c
1) "10"
2) "20"
3) "30"
当使用MGET时,Redis返回一批值。
修改和查询关键字空间
有些命令并没有定义在特定的类型上,但是对影响关键字的空间是有用的,如此,可以和任何类型的关键字一起使用。
例如,EXISTS命令,返回1或0,用于标识一个指定的关键字是否在数据库中,DEL命令删除一个关键字和相关的值,不管该值是什么。
> set mykey hello
OK
> exists mykey
(integer) 1
> del mykey
(integer) 1
> exists mykey
(integer) 0