当前位置: 首页 > article >正文

【Redis优化——如何优雅的设计key,优化BigKey,Pipeline批处理Key】

Redis优化——如何优雅的设计key,优化BigKey,Pipeline批处理Key

  • 一、Key的设计
    • 1. 命名规范
    • 2. 长度限制在44字节以内
  • 二、BigKey优化
    • 1. 查找bigkey
    • 2. 删除BigKey
    • 3. 优化BigKey
  • 三、Pipeline批处理Key
    • 1. 单节点的Pipeline
    • 2. 集群下的Pipeline

一、Key的设计

1. 命名规范

业务名+数据名+id
例如存储用户登录信息:login:user:id

2. 长度限制在44字节以内

如果使用的时Redis6.0版本以上,Key的编码规则有三个,int, enbstr, raw 44字节内的Key会用int或身体乳mb编码,内存占用小

二、BigKey优化

1. 查找bigkey

  • 可以使用scan 0 扫描所有的Key,然后使用strlen查出大Key,这里不要使用keys *命令,会阻塞主线程
  • 可以是使用Redis的第三方工具进行检测

2. 删除BigKey

  • 使用unlink key 命令删除,不要使用Del key 这也会阻塞

3. 优化BigKey

  • 对于大的JSON对象可以使用Hash数据结构存储,因为Hash的底层用到了ZipList,节约内存
  • 对于大的Hash呢,比如一个Hash表有100万条数据,key从0-100万,此时我们可以打散Hash,就是让每100个key存储到一个hash表,让key/100,value%100,类似于分片了

三、Pipeline批处理Key

原理:建立一次网络连接,执行多条Redis命令

1. 单节点的Pipeline

    @Test
    void testPipleLine(){
        Jedis jedis = new Jedis("host", 6379);
        jedis.auth("xxx");
        Pipeline pipeline = jedis.pipelined();

        for (int i = 0; i < 1000; i++) {
            pipeline.set("nb:key" + i, "value" + i);
            if (i % 100 == 0){ // 每次放入100行命令
                pipeline.sync();
            }
        }
    }

2. 集群下的Pipeline

  • 集群部署Redis,插入Key,每一个Key又有一个 slot插槽,这个插槽分布在所有Redis节点中,所以如果批量插入的key的插槽不在同一个节点,那么还是会有多次网络请求,最坏又变成了每次连接执行一条命令
  • 解决方案采用并行slot方式
    并行Slot
	//使用springredistemplate封装好的工具类
    @Test
    void testslotPipeline(){
        Map<String, String> map = new HashMap<>();
        map.put("name", "111");
        map.put("age", "222");
        map.put("gemder", "333");
        redisTemplate.opsForValue().multiSet(map);

    }

http://www.kler.cn/a/375241.html

相关文章:

  • ReentrantLock底层原理、源码解析
  • 三.统一异常Exception拦截处理
  • 【GO环境安装】mac系统+GoLand使用
  • Spring(三)-SpringWeb-概述、特点、搭建、运行流程、组件、接受请求、获取请求数据、特殊处理、拦截器
  • 如何利用Python爬虫获得1688按关键字搜索商品
  • 任务2 配置防火墙firewalld
  • 力扣每日一题 超级饮料的最大强化能量 动态规划(dp)
  • python后端框架登录入门
  • Java期末考试
  • Git介绍及用法
  • 微服务day01
  • 10.31OpenCV_图像预处理习题
  • 推荐一款功能强大的思维导图制作工具:MindMaster
  • React.js教程:从JSX到Redux的全面解析
  • C/C++每日一练:实现选择排序
  • 大语言模型及LangChain介绍
  • 【oracle】正则表达式
  • 蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,途游游戏,埃科光电25秋招内推
  • Bolt.new: 终极自动化全栈编程工具,吊打 cursor
  • 【ZZULI】数据库第二次实验
  • C# 结构型设计模式----外观模式
  • 图像的特征类别
  • 2024前端面试训练计划-高频题-JavaScript基础篇
  • ubuntu禁止自动更新设置
  • 新浪新闻探索大会|赵世奇:文心智能体解锁AI浪潮中的商业新范式
  • 《别傻等外卖了!Java 中的 CompletableFuture 比 Future 香十倍!》