(Ryan的Redis系列博客)5.Redis的键字符串类型

前言

字符串类型是Redis最简单的数据类型,可以用于缓存HTML片段和页面等场景。由于Redis的键值也是字符串,因此使用字符串类型就是通过一个字符串的键值映射到另一个字符串上。另外,字符串是Memcached这类缓存数据库的唯一数据类型,因此,Redis字符串类型也非常适合那些“有经验”的Redis菜鸟使用。

操作实例

SET和GET

> set mykey somevalue
OK
> get mykey
"somevalue"

1.通过set设置值
2.在不添加任何命令选项的情况下,对同一个键值使用set命令,会将原值替换。(当然,没有值的情况下是新增一个键-值对)
3.在Redis中,字符串也是二进制安全的,因此,存储图片的二进制内容
4.值的大小不能超过512MB
5.通过get命令检索值

SET的参数

注意:此处Redis的官网翻译存在非常大的错误,请看我的翻译,或者直接查看英文原文。

> set mykey newval nx
(nil)
> set mykey newval xx
OK

set命令可以附加参数,本例中,nx参数表示如果存在键值,则set命令失败,xx表示只有存在键值set命令才成功。

SET的原子操作

> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152

本例展示的是原子增长。原子增长是利用incr命令来完成的,原子增长命令解析字符串的值为整型,然后为这个整型加一。其他的类似的操作命令有incrby、decr、decrby等。实际上他们在内部就是同一个命令,只是看上去有点儿不同。

INCR是原子操作意味着什么呢?就是说即使多个客户端对同一个key发出INCR命令,也决不会导致竞争的情况。例如如下情况永远不可能发生:客户端1和客户端2同时读出“10”,他们俩都对其加到11,然后将新值设置为11。最终的值一定是12,同时在读取-增长-赋值(read-increment-set)的操作完成之前,其他的客户端不会在同一时间执行任何命令。

有很多命令都是用来操作字符串的,例如GETSET命令,为键设置新值并且返回原值。该命令有一个很有用的场景,例如:你的系统每当有新用户访问时就用INCR命令操作一个键。你希望每小时对这个信息收集一次。你就可以GETSET这个键并给其赋值0并读取原值。

使用mset和mget命令,可以一次存储或获取多个key对应的值。mget返回的值是一个数组。

> mset a 10 b 20 c 30
OK
> mget a b c
1) "10"
2) "20"
3) "30"

后记

关于set、get、getset、mset、mget等命令,我会专门开一个讲解命令的系列文章,此处制作最简单的分析和讲解。

你可能感兴趣的:(Redis)