前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis:切片

redis:切片

作者头像
许喜朝
发布2020-08-11 16:54:12
1.2K0
发布2020-08-11 16:54:12
举报

redis

分片

单台redis的管理内存能力是有限的,如果保存有海量的缓存数据,则一台redis无法操作

那么就要对redis进行扩容,

redis分片主要目的实现redis内存扩容,对用户而言使用的就是一大台redis,但是内部每个redis中保存的数据都是不同的

分片原理

ShardedJedis是通过一致性哈希来实现分布式缓存的,通过一定的策略把不同的key分配到不同的redis server ,达到横向扩展的目的的

hash一致性原理

1、0到2^32-1数字组成一个hash圆环;

2、根据redis的Ip或主机名计算一个hash值,然后对应到圆环位置;

3、然后根据key计算一个hash值,放在对应的圆环上,根据key位置顺时针离圆环最近的redis服务器存取;

4、为了均衡性,通常会虚拟节点服务器;

提问 有12个球如何均匀的放在3个桶里 答:先对球从0开始进行编号0,1,2…11,再对桶进行编号0,1,2 每个球的编号对三取余,得出0,1,2…0,1,2

一致性原理也是这样,一致性算法对2^32-1进行取模

0到232-1组成了一个hash圆环,正上方是0,顺时针依次到232-1

由这2^32个点组成的圆环,被称为hash环

redis的hash原理

采用服务器的ip或者主机名来进行hash,这样每台机器就能确定在hash环上的位置

那么数据如何定位到相关的redis服务器呢?

将数据key使用相同的方法计算出hash值,并确定在hash环上的位置

从此位置顺时针“行走”,遇到的第一台服务器就是该定位的服务器

分片的准备工作
准备多台redis

在原redis根目录下创建shards文件夹

mkdir shards

将redis.conf配置文件拷贝几份到shards文件夹下并重命名

cp redis.conf shards/redis-6379.conf cp redis.conf shards/redis-6380.conf cp redis.conf shards/redis-6381.conf

修改配置文件中的端口为配置文件名字对应的端口

当然你可以自定义端口,但是要注意端口别被占用 开放指定端口 firewall-cmd --zone=public --add-port=端口号/tcp --permanent

启动多台redis

redis-server redis-6379.conf & redis-server redis-6380.conf & redis-server redis-6381.conf

查看是否启动成功

ps -ef|grep redis

springboot整合redis分片

在resources下新建redis.properties配置文件

代码语言:javascript
复制
redis.nodes=39.101.165.86:6379,39.101.165.86:6380,39.101.165.86:6381

新建redisConfig配置类

代码语言:javascript
复制
@PropertySource(value = "classpath:/properties/redis.properties")
@Configuration
public class RedisConfig {
    @Value("${redis.nodes}")
    private String nodes;

    @Bean
    public ShardedJedis shardedJedis(){
        List<JedisShardInfo> shards = new ArrayList<>();
        //进行切片得到每个redis的连接信息
        String[] strNodes = nodes.split(",");
        for(String strNode:strNodes){
            String[] node = strNode.split(":");
            String host = node[0];
            int port = Integer.parseInt(node[1]);
            //存入shards
            shards.add(new JedisShardInfo(host,port));
        }
        return  new ShardedJedis(shards);
    }

}

至此就可以使用redis的切片功能了

总结

1.分片主要的作用实现redis扩容; 2.修改配置文件(修改端口号); 3.通过哈希一致性原理,把key分配到每个redis中; 4.如果其中一个redis分片宕机,那么整个分片不能使用;

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • redis
    • 分片
      • springboot整合redis分片
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档