Redis Note(三)日常高频操作

(三)日常高频操作

A. 键管理

  • 键重命名:修改key的名字,若改后的key本已存在,会被覆盖本来key的value,具体可参考下方案例
    1. set a b,初次设置a的value为b;
    2. set c d,初次设置c的value为d;
    3. rename a c,将a重命名为c;
    4. get c,获取c的值,此时得到的c的value是b,覆盖了原来d,且get a获得的结果时nil。
    5. 补充说明:rename本质新建一个new key,把old key的value拷贝到new key,然后删除old key。所以如果rename的key过大,会有阻塞redis的可能性。
  • 键过期: key的过期时间仅支持string、hash、list、set这类一级数据结构,不能单独hash等内部二级的某个值(field)去设置过期时间。关于key过期删除策略可参考第(五)篇的内存理解部分。
    1. expire key seconds & pexpire key milliseconds: 设置过期时长,二者精度不一样。
    2. 使用set命令会抹掉过期时间(源码可见到这一步骤)。
    3. 建议使用setex命令,原子性,直接一步完成value的设置和过期时间设置。
  • 键迁移
    1. move: redis内部迁移,对内部db0 到db15,move key db;
    2. dump + restore
      • 第一步在源redis上dump key;
      • 然后目标redis上restore key ttl value,完成redis不同实例间迁移。
      • 注意,value是dump生成代码;
    3. migrate: 具有原子性,仅在源redis上执行即可,migrate target_host target_port key db timeout
      • migrate 192.18.4.1 6379 hello 0 1000,向192.18.4.1的redis迁移数据内容。
      • 注意,可在key前加copy(源不删除)和replace(强制覆盖目标)。
  • 遍历键
    1. keys: keys * OR keys h?ll*
    2. scan: 渐进式遍历,每次遍历部分。
      • scan 0,会返回一个游标(比如6),然后给出本次渐进式遍历得到的结果;
      • 第二次,scan 6,慢慢重复。直到游标给0结束。

B. 发布订阅(MQ)功能

  • 概述:redis可以实现消息中间件的功能,承接生产者 & 消费者。
  • 发布消息
    • 语法:publish channel message
    • 案例:publish xxx “we are the champion!”,返回结果是订阅者个数。
  • 订阅消息
    • 语法:subscribe channel
    • 案例:subscribe xxx,订阅上方channel,若后续生产者publish内容,则使用该命令的客户端会受到对应信息。
  • 总结:路人甲打开redis客户端1号,开始进行publish发布,此时甲是生产者。路人乙和丙打开redis客户端2,3号,对甲的channel订阅,那么乙和丙是消费者。若甲开始publish,后续乙和丙会收到信息,同时甲收到返回结果为2,表示两个客户端收到信息。

C. 其他类型操作

  • 主从模式(包括cluster sentinel)下脏数据问题

    • 预防出现:确保slave节点在分流功能上仅负责读的流量分担,新写入或变更数据的操作直接和master节点交互,由master同步给所有的slave。

    • 解决方案:若脏数据已写入或主从数据已经不一致,则需要进行重新同步,共需三步完成。

      1. slave节点使用flushall清空数据;
      2. slave节点使用slaveof no one解除主从关系;
      3. slave节点使用slaveof masterip port再次进行主从关系绑定,激活重新同步。
    • 说明:若不手动解除主从关系,新版本下master不会更新slave的rid和offset,只会将增量的key同步到slave节点。

  • 动态修改配置

    • 概述:在生产环境下需要在不重启redis的情况下进行配置更新,且为了确保日后重启后保持本次配置的效果。
    • 具体操作案例
      1. 查看当前所有配置:config get *
      2. 修改配置内容:config set maxmemory 10g,设置redis最大内存为10g
      3. 修改内容持久化:config rewrite,保障redis后期若重启,本次的参数修改依然生效
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容

  • Redis 开发规范 转载说明:文章转载自云栖社区,为了方便自己查看,如有侵权请告知本人阿里云Redis开发规范 ...
    哪吒小子阅读 375评论 0 7
  • 1.什么是 Redis? Redis 是完全开源免费的,遵守BSD协议,是性能极高的nosql数据库,Key-Va...
    python与数据分析阅读 2,351评论 0 80
  • 简介 Redis is an in-memory database that persists on disk. ...
    Whyn阅读 370评论 0 0
  • 1. 慢查询 许多存储系统(例如MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就...
    云师兄阅读 422评论 0 0
  • . 简述: Redis由Salvatore Sanfilippo使用C语言编写的一种支持网络、可基于内存亦可持久化...
    zhglance阅读 501评论 0 3