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后期若重启,本次的参数修改依然生效
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容