文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

springboot整合redis修改分区的操作方法

2023-06-20 13:42

关注

这篇文章主要讲解了“springboot整合redis修改分区的操作方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot整合redis修改分区的操作方法”吧!

springboot整合redis修改分区

问题由来

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

老版解决

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

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

1.使用JedisConnectionFactory修改

@AutowiredJedisConnectionFactory 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修改

@AutowiredRedisStandaloneConfiguration 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。

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

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

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

不同的分区实现

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

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

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

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

分区的不足之处

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

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

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

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

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

数据存储还是缓存?

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

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

感谢各位的阅读,以上就是“springboot整合redis修改分区的操作方法”的内容了,经过本文的学习后,相信大家对springboot整合redis修改分区的操作方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯