我的Redis学习笔记

1. 关于set的覆盖问题

在默认情况下,对一个已经设置了值的字符串键执行SET命令将导致键的旧值被新值覆盖。

从Redis2.6.12版本开始,用户可以通过向SET命令提供可选的NX选项或者XX选项来指示SET命令是否要覆盖一个已经存在的值:SET key value [NX|XX]

如果用户在执行SET命令时给定了NX选项,那么SET命令只会在键没有值的情况下执行设置操作,并返回OK表示设置成功;如果键已经存在,那么SET命令将放弃执行设置操作,并返回空值nil表示设置失败。

以下代码展示了带有NX选项的SET命令的行为:

redis> SET password "123456" NX # OK 对尚未有值的password键进行设置,成功

redis> SET password "999999" NX # (nil) password键已经有了值,设置失败

如果用户在执行SET命令时给定了XX选项,那么SET命令只会在键已经有值的情况下执行设置操作,并返回OK表示设置成功;如果给定的键并没有值,那么SET命令将放弃执行设置操作,并返回空值表示设置失败。

举个例子,如果我们对一个没有值的键mongodb-homepage执行以下SET命令,那么命令将因为XX选项的作用而放弃执行设置操作:

redis> SET mongodb-homepage "mongodb.com" XX # (nil) 

因为第二条SET命令没有改变password键的值,所以password键的值仍然是刚开始时设置的"123456"。

相反,如果我们对一个已经有值的键执行带有XX选项的SET命令,那么命令将使用新值去覆盖已有的旧值:

redis> SET mysql-homepage "mysql.org" # OK为键mysqlhomepage设置一个值
redis> SET mysql-homepage "mysql.com" XX # OK对键的值进行更新

在第二条SET命令执行之后,mysql-homepage键的值将从原来的"mysql.org"更新为"mysql.com"。

2.字符串总结

  • Redis的字符串键可以把单独的一个键和单独的一个值在数据库中关联起来,并且这个键和值既可以存储文字数据,又可以存储二进制数据。
  • SET命令在默认情况下会直接覆盖字符串键已有的值,如果我们只想在键不存在的情况下为它设置值,那么可以使用带有NX选项的SET命令;相反,如果我们只想在键已经存在的情况下为它设置新值,那么可以使用带有XX选项的SET命令。
  • 使用MSETMSETNX以及MGET命令可以有效地减少程序的网络通信次数,从而提升程序的执行效率。
  • Redis用户可以通过制定命名格式来提升Redis数据的可读性并避免键名冲突。·字符串值的正数索引以0为开始,从字符串的开头向结尾不断递增;字符串值的负数索引以1为开始,从字符串的结尾向开头不断递减。
  • GETRANGE key start end命令接受的是闭区间索引范围,位于start索引和end索引上的值也会被包含在命令返回的内容当中。
  • SETRANGE命令在需要时会自动对字符串值进行扩展,并使用空字节填充新扩展空间中没有内容的部分。
  • APPEND命令在键不存在时执行设置操作,在键存在时执行追加操作。
  • Redis会把能够被表示为long long int类型的整数以及能够被表示为long double类型的浮点数当作数字来处理。

3. 存取散列

info = {
        'name': 'ChiOS',
        'age': 29,
        'sex': 'M'
}
client = Redis(decode_responses=True)
result = client.hmset('user_info', info) # 存
print(result)
result = client.hgetall('user_info') # 取
print(result)

4.散列总结

  • 散列键会将一个键和一个散列在数据库中关联起来,用户可以在散列中为任意多个字段设置值。与字符串键一样,散列的字段和值既可以是文本数据,也可以是二进制数据。
  • 用户可以通过散列键把相关联的多项数据存储到同一个散列中,以便对其进行管理,或者针对它们执行批量操作。
  • 因为Redis并没有为散列提供相应的减法操作命令,所以如果用户想对字段存储的数字值执行减法操作,就需要将负数增量传递给HINCRBY命令或HINCRBYFLOAT命令。
  • Redis散列包含的字段在底层是以无序方式存储的,根据字段插入的顺序不同,包含相同字段的散列在执行HKEYSHVALSHGETALL等命令时可能会得到不同的结果,因此用户在使用这3个命令时,不应该对命令返回元素的排列顺序作任何假设。
  • 字符串键和散列键虽然在操作方式上非常相似,但是因为它们都拥有各自独有的优点和缺点,所以在一些情况下,这两种数据结构是没有办法完全代替对方的。因此用户在构建应用程序的时候,应该根据实际需要来选择相应的数据结构。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,367评论 0 5
  • redis的诞生 redis的创建者 是一个叫做antriez的意大利男士,个人网站http://invece.o...
    指向远方的灯塔阅读 787评论 0 1
  • Key(键) 1. DEL 时间复杂度:O(N), N 为被删除的 key 的数量。删除单个字符串类型的 key...
    one_zheng阅读 530评论 0 0
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,691评论 0 11
  • Redis从入门到精通:中级篇 本文目录 上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启第二...
    叨唧唧的阅读 672评论 0 0