渣翻Redis基础命令学习 (上)

最近老板推荐了一个网站:http://try.redis.io/
在这个网站上可以直接使用Redis的一些基础的命令,这样不用自己安装配置数据库了,对于初学者迅速上手Redis很有帮助。
这个网站也附带了最基础的教程,接下来的几篇文章我会尝试翻译这些基础教程。

对键值对的赋值SET, 取值GET, 删除DEL

SET server:name "fido"
GET server:name => "fido"

SET server:name "dido"
GET server:name => "dido"

SETNX server:name "fido"
GET server:name => "dido"

SETNX new:server:name "fido"
GET new:server:name => "fido"

DEL server:name => 1
DEL server:name => 0
GET server:name => (nil)

redis键值都是全是string,返回空为null/nil,返回布尔值为1/0. SETNX(SET-if-not-exists)如果key不存在则赋值

原子增加键值

SET connections 10
INCR connections => 11
INCR connections => 12
DEL connections
INCR connections => 1
GET connections => 1

INCR(increment), 为给定的key的值增1,前提是那个值本身必须是个整数,即使redis本身存储的是string。如果给定的key在库中并不存在,就会创建一个键为给定的key,值为0的键值对,然后再增1。

为什么要做这样一个简单的运算符呢,即使用代码实现也是非常简单的两行,如:

x = GET count
x = x + 1
SET count x

这样似乎没有问题呢。可这是在一个客户端操作这个键值对的情况下。如果有多个客户端同时操作这个值,就会出现问题:

  1. 小明的代码读取了count的值为10,赋给了x.
  2. 同时小红的代码也读取了count的值,赋给了x.
  3. 小明将x的新值11赋给了count.
  4. 小红将x的新值11赋给了count.

我们本愿是count的值应该是12,可现在只有了11了,明明操作了两次,为什么会这样?在高并发的场景下,这种情况很普遍,重新赋值时间即使很短,也不能保证不会出问题啊。所以应该使用原子操作符,直接对数据库进行细粒度的操作。类似这种原子操作符,reids多了去。

设置key过期

redis可以设置一个key的保存时间,过期失效。使用EXPIRE命令设置,搭配TTL命令查询。

SET resource:lock "Redis Demo"
EXPIRE resource:lock 120

于是这个key resource:lock只会存在120秒,你可以用TTL命令查询这个key剩余的存在时间:

TTL resource:lock => 113
// after 113s
TTL resource:lock => -2 

返回-2代表key已经不存在,返回-1代表此key不会过期。注意如果你再次SET这个key的值,那么过期时间也随之消失。

SET resource:lock "Redis Demo 1"
EXPIRE resource:lock 120
TTL resource:lock => 119
SET resource:lock "Redis Demo 2"
TTL resource:lock => -1

生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SETGETSET 命令覆写(overwrite),这意味着,如果一个命令只是修改(alter)一个带生存时间的 key 的值而不是用一个新的 key 值来代替(replace)它的话,那么生存时间不会被改变。

比如说,对一个 key 执行 INCR 命令,对一个列表进行 LPUSH 命令,或者对一个哈希表执行 HSET 命令,这类操作都不会修改 key 本身的生存时间。

另一方面,如果使用 RENAME 对一个 key 进行改名,那么改名后的 key 的生存时间和改名前一样。

RENAME 命令的另一种可能是,尝试将一个带生存时间的 key 改名成另一个带生存时间的 another_key ,这时旧的 another_key (以及它的生存时间)会被删除,然后旧的 key 会改名为 another_key ,因此,新的 another_key 的生存时间也和原本的 key 一样。

使用 PERSIST 命令可以在不删除 key 的情况下,移除 key 的生存时间,让 key 重新成为一个『持久的』(persistent) key 。

EXPIREAT

EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置生存时间。

不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。

redis> SET cache www.google.com
OK

redis> EXPIREAT cache 1355292000     # 这个 key 将在 2012.12.12 过期
(integer) 1

redis> TTL cache
(integer) 45081860
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,873评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,483评论 1 306
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,525评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,595评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,018评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,958评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,118评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,873评论 0 208
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,643评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,813评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,293评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,615评论 3 262
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,306评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,170评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,968评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,107评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,894评论 2 278

推荐阅读更多精彩内容