springboot怎么整合redis修改分区


springboot整合redis修改分区

问题由来

最近使用springboot整合redis,一个系统动态数据源连接不同数据库,缓存使用的redis,那么就需要将不同数据库的数据缓存到redis不同的分区,也就是不同的库中。

老版解决

这里的老版指的是2.0之前的,我使用的1.5.9是ok的。

redis的配置类这里就不贴了,网上很多。

1.使用JedisConnectionFactory修改

@Autowired
JedisConnectionFactory jedisConnectionFactory;
jedisConnectionFactory.setDatabase(database);

2.使用redisTemplate修改

redisTemplate.getConnectionFactory().getConnection().select(database);

以上两种方式不需要再redis配置类中特意添加bean

新版解决

这里的新版指的是2.0之后的,我用的是2.0.3

redis配置类中需要添加以下bean

@Bean
    RedisStandaloneConfiguration redisStandaloneConfiguration() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName("localhost");
        redisStandaloneConfiguration.setPort(6379);
        redisStandaloneConfiguration.setDatabase(0);
        return redisStandaloneConfiguration;
    }
    @Bean
    JedisConnectionFactory jedisConnectionFactory(RedisStandaloneConfiguration redisStandaloneConfiguration) {
        //redisStandaloneConfiguration.setPassword(RedisPassword.of(password));
        JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
        jedisClientConfiguration.connectTimeout(Duration.ofMillis(0));//  connection timeout
        JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration,
                jedisClientConfiguration.build());
        return factory;
    }

使用RedisStandaloneConfiguration修改

@Autowired
RedisStandaloneConfiguration redisStandaloneConfiguration;
redisStandaloneConfiguration.setDatabase(database);

redis分区

数据是怎样分布在多个Redis实例上的

分区是将你的数据分布在多个Redis实例上,以至于每个实例只包含一部分数据。

为什么分区是有用的呢

Redis分区有两个主要目标:

  1. 它允许更大的数据库,用许多计算机的内存总和。如果不进行分区,你将会受限于单台计算机的内存。

  2. 它允许将计算能力扩展到多核和多台计算机,将网络带宽扩展到多台计算机和网络适配器。

假设我们有4个Redis实例(R0, R1, R2, R3),其上有许多代表用户的key,比如user:1, user:2, ... 等等,那么在存储一个key的时候我们有多种方式。

最简单的一种方式是按照范围分区,即根据对象的映射范围将数据分配到指定的Redis实例上。例如,我们规定ID为0~10000的就分到R0,10001~20000到R1,以此类推。这种方式是可以的,但是有一个缺点是需要一张表来维护这个映射关系。这个表需要管理起来,而且每一个key都需要一个这样的表,因此Redis中的范围分区通常是不受欢迎的,因为它比其他分区方法效率低得多。

除了范围分区以外,另一种方法是哈希分区(hash partitioning):

第1步、取key,并应用哈希函数将其转换为一个数。例如,如果key是foobar,哈希函数式crc32,那么crc32(foobar)将输出93024922。

AILOGO AILOGO

LOGO123旗下的AI智能LOGO生成器,只需输入品牌名称就能免费在线生成公司logo设计及配套企业VI,轻松打造您的个性品牌!

AILOGO 139 查看详情 AILOGO

第2步、对这个数字使用模运算(取模)将它转换成0到3直接的数字,这样这个数字就可以映射到我的四个Redis实例之一。例如,93024922 % 4 = 2,因此foobar应该存储到R2实例上。

(PS:首先,对key做哈希运算,得到一个数字,然后对这个数字取模,以决定最终数据应该存放在哪个实例上)

分区的方法还有很多种,通过上面两个示例,你应该可以理解。哈希分区的一种高级形式称为一致性哈希,由几个Redis客户端和代理实现。

不同的分区实现

客户端分区 : 对于一个给定的key,客户端直接选择正确的节点来进行读写。许多Redis客户端都实现了客户端分区。

代理分区 : 客户端发送请求到一个代理,由代理来和Redis通信,代理会根据我们的配置来选择正确的Redis实例。

查询路由 : 你可以将你的查询发送到任何一个Redis实例,实例会将你的查询重定向到正确的服务器。

(PS:对于一个给定的key,分区的工作就是选择一个正确的Redis实例,那么这个选择的过程可以由客户端、代理 或者 Redis实例来做)

分区的不足之处

1、涉及多个key的操作通常是不支持的。对于映射到两个不同的Redis实例的key,你不能往这两个上执行插入操作。

2、涉及多个key的操作不能用Redis事务

3、分区粒度是key,因此不可能将一单个非常巨大的key(比如,一个非常大的sorted set)去切分数据

4、当使用分区的时候,数据处理会更复杂,对于实例你必须处理多个RDB/AOF文件,为了备份数据,需要从多个实例和主机聚合持久文件。

5、增加和删除容量(空间)变得更复杂。例如,Redis集群支持在运行时添加和删除节点的透明数据再平衡,但其他系统如客户端分区和代理不支持此功能。然而,一种叫做预分片的技术在这方面有帮助。

数据存储还是缓存?

当Redis用作数据存储时,给定的key必须总是映射到相同的Redis实例。当作为缓存时,如果给定节点不可用它不是一个大问题。

如果给定key的首选节点不可用,一致哈希实现通常能够切换到其他节点。类似地,如果添加一个新节点,部分新keys将开始存储在新节点上。

  • 如果使用Redis作为缓存,使用一致哈希很容易进行伸缩。

  • 如果Redis用作存储,则使用固定的keys-to-nodes映射,因此节点的数量必须是固定的,且不能改变。如果需要重新平衡节点之间的key,那么Redis集群是一种可行的系统。

以上就是springboot怎么整合redis修改分区的详细内容,更多请关注其它相关文章!


# SpringBoot  # 多个  # 客户端  # 网络带宽  # 不支持  # 多核  # 指的是  # 多台  # 不可用  # redis  # seo在菲律宾  # 电脑优化设计师推荐网站  # 江西抚州网站建设  # 德州线上seo方案  # 小说自动优化网站  # 商户网站建设多少钱  # 360网站优化工具  # 互联网推广和营销成本  # 大话问仙网站建设 discuz  # 穷游网站建设目标分解  # 如何实现  # 扩展到 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示  被称为海蜈蚣的海洋动物是  更换小红书群背景怎么换?小红书群规则怎么设置?  睡觉时心跳快是什么原因 夜间心悸如何应对  B站怎么快速升级 B站用户等级提升攻略【详解】  智慧职教mooc平台登录网址 智慧职教mooc官网直达  处理含命名空间的XML文件 Power Query中的高级技巧  SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南  PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】  创客贴登录页面入口 创客贴网页版最新网址链接  Google Drive API服务器端访问指南:服务账户认证详解  123网页端官方登录页 123邮箱网页版即时通讯服务  Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解  哔哩哔哩在线观看入口 B站官网免费进入  oppo手机如何通过下拉通知栏截图_oppo手机通知栏快捷截图方法  如何查询个人病历记录  抖音网页版地址直接进入_抖音网页版在线观看入口  抖音评论无法发送如何修复 抖音评论功能操作指南  《全民k歌》音乐怎么下载到本地2025  智云Q3和Q2有什么升级_智云Q3与Q2手持云台功能与性能对比分析  荣耀magicv5怎么上手测评  12306售票时间最新规定 | 网上订票和车站窗口时间一样吗  J*aScript文本高亮功能优化:解决多词匹配错误与精确分割策略  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  C++ switch case字符串_C++如何实现字符串switch匹配  视频转蓝光m2ts格式  花生壳内网映射新方案  抖音手机分身两个账号怎么切换?分身两个系统是一样的吗?  Go语言中方法与接收器:指针和值类型的调用机制详解  C++ bind函数使用教程_C++参数绑定与函数适配器的应用  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  KFC邀请码怎么使用领额外优惠_KFC邀请码输入方式与额外优惠代码获取方法  Win11如何分屏操作_Win11多窗口分屏技巧  mysql如何限制远程访问_mysql远程访问限制方法  《爱笔思画x》魔棒工具抠图教程  Eclipse开发J*a快速入门  《撕歌》会员开通方法  《随手记》备份数据方法  QQ网站入口直接登录 QQ官方正版登录页面  PDF如何批量加注释_PDF多文件批注高亮操作教程  win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】  如何使用 Optional 类型并满足 Pylint 的类型检查  纯CSS实现自适应宽度与响应式布局的水平按钮组  《全民k歌》网页版最新登录入口一览  Yandex世界探索 最新官方免登录入口全知道  谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达  解决Go encoding/json 将JSON大数字解析为浮点数的问题  中通快递官网指定查询 中通快递单号查询平台入口  《优志愿》修改手机号方法  BunnyStream TUS视频上传指南:解决401认证错误与参数配置 

 2023-05-27

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.