redis分片技术

需求:

  如果将全部数据都保存到一台redis中,那么如果该服务器损坏,则影响全部的服务;

  使用单台redis内存设定一般不要超过1G,但是有些业务数据量很大,如果不修改内存,则数据无法存储;

方案:

  采用redis分片技术;

  优点:

    1.使用redis分片可以实现内存数据的动态扩容;

    2.使用分片,每台redis节点中尽可能保存1/n的数据量,防止数据的丢失;

    3.对于用户而言,整个redis的分片就是一个服务;n台服务器作为一个整体的服务器共同为用户服务;

1.  分片搭建:

    1.1复制配置文件:新建shards文件夹,将redis.conf文件复制到shards文件中,并且复制3分,改名字,改端口号;

[[email protected] redis]# ls
00-RELEASENOTES  deps      MANIFESTO   runtest-cluster   src
BUGS             dump.rdb  README.md   runtest-sentinel  tests
CONTRIBUTING     INSTALL   redis.conf  sentinel.conf     utils
COPYING          Makefile  runtest     shards
[[email protected] redis]# cp redis.conf shards/redis-6379.conf
[[email protected] redis]# cp redis.conf shards/redis-6380.conf
[[email protected] redis]# cp redis.conf shards/redis-6381.conf
[[email protected] redis]# ll

结果:

 [[email protected] redis]# cd shards/
 [[email protected] shards]# ll
 total 144
 -rw-r--r--. 1 root root 46696 Nov 2 22:51 redis-6379.conf
 -rw-r--r--. 1 root root 46696 Nov 2 22:51 redis-6380.conf
 -rw-r--r--. 1 root root 46696 Nov 2 22:51 redis-6381.conf

    1.2确认启动是否成功:

[[email protected]alhost shards]# redis-server redis-6379.conf
[[email protected] shards]# redis-server redis-6380.conf
[[email protected] shards]# redis-server redis-6381.conf
[[email protected] shards]# ps -ef |grep redis
root      2845     1  0 22:58 ?        00:00:00 redis-server *:6379
root      2849     1  0 22:58 ?        00:00:00 redis-server *:6380
root      2853     1  0 22:59 ?        00:00:00 redis-server *:6381
root      2857  2585  0 22:59 pts/0    00:00:00 grep redis

    1.3测试:

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

public class TestShardRedis {

    @Test
    public void testShard(){
        /**
         * 创建分片的对象
         * 1.poolConfig    标示池的大小
         * 2.shards        redis分片的节点信息
         */
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(1000);
        poolConfig.setTestOnBorrow(true);//获取连接时,先检测,如果不行就换一个

        List<JedisShardInfo> shards = new ArrayList<>();
        shards.add(new JedisShardInfo("192.168.25.132", 6379));
        shards.add(new JedisShardInfo("192.168.25.132", 6380));
        shards.add(new JedisShardInfo("192.168.25.132", 6381));

        ShardedJedisPool pool = new ShardedJedisPool(poolConfig, shards);

        //获取redis的连接
        ShardedJedis jedis = pool.getResource();

        jedis.set("shards", "保存分片的数据");
        System.out.println(jedis.get("shards"));

        //还回连接到pool
        pool.returnResource(jedis);
    }
}

输出:保存分片的数据

原文地址:https://www.cnblogs.com/yikuan-919/p/9900665.html

时间: 2024-10-09 23:31:54

redis分片技术的相关文章

redis预分片技术及实现

通常情况下,我们会建立多个redis实例来缓解单个redis实例的压力.但是,随着缓存数量的增加,对redis进行扩容是一件非做不可的事情.对redis进行扩容可以有多种办法,比如增加每个redis实例的最大内存.这只是解决办法之一,而且缺乏灵活性和可扩展性.在redis官网上,提到了预分片技术.本文将对预分片技术进行讲解,同时讲解jedis对分片是如何支持的. 一.redis预分片技术 在单个server上搭建多个redis实例.当需要扩展时,可以利用复制机制进行扩展,可参照如下步骤: 1)在

Redis分片(分区)

分区的概念 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集. 如果只使用一个redis实例时,其中保存了服务器中全部的缓存数据,这样会有很大风险,如果单台redis服务宕机了将会影响到整个服务.解决的方法就是我们可以采用分片/分区的技术,将原来一台服务器维护的整个缓存,现在换为由多台服务器共同维护内存空间. 分片的实现 说明与分析: 关于redis的安装参照上一篇,默认安装好了redis. 思路:采用在一台主机上实现分片的方式,所以只需要在该主机上配置启动三台r

redis的技术点

1.如何实现redis集群? (1)redis集群出现的背景: Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB.200GB的规模,但是单实例模式限制了Redis没法满足业务的需求,Redis的开发者Antirez早在博客上就提出在Redis 3.0版本中加入集群的功能,但3.0版本等到2015年才发布正式版.各大企业在3.0版本还没发布前为了解决Redis的存储瓶颈,纷纷推出了各自的Redis集群方案.这些方案的核心思想是把数据分片(sharding)存储在多个R

Redis 管道技术

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应. 服务端处理命令,并将结果返回给客户端. Redis 管道技术 Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应. 实例 查看 redis 管道,只需要启动 redis 实例并输入以下命令: $(echo -en "PING\r\n SE

redis 缓存技术与memcache的最大区别

1 什么是redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集合).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写

第六天 分片技术

在mongodb里面存在另一种集群,就是分片技术,跟mysql的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存就吃不消了,针对这样的场景我们该如何应对. 一.分片 mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案. 下面我对这张图解释一下: 人脸:代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的. mongos:首先我们要了解“片键”的概念,也就是说拆分集合的依据是什么?按照什么键值进行拆分集合.... 好了,

8天学通MongoDB——第六天 分片技术

在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存 就吃不消了,针对这样的场景我们该如何应对. 一:分片 mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案. 下面我对这张图解释一下: 人脸:       代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的. mongos: 首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照什么键值

redis缓存技术

初学redis缓存技术,如果文章写得不好还请谅解 应用环境:win7 实现环境:cmd,eclipse redis缓存技术的特点就在于高效,因为目前涉及的数据量逐渐增多,在对于数据的存储上面和sql以及服务器资源优化上面就来的特别的重要. 而redis可以帮助解决由于数据库压力造成的延迟现象,针对于很少做改变的数据并且经常使用的数据,我们可以一致性加入内存.这样可以一方面减少数据库压力,一方面提高读写效率. 1.第一步在redis官网上面下载对应的压缩包.下载地址:https://github.

MySQL数据库分片技术调研

将这段时间了解的MySQL分片技术和主从复制只是整理清楚画了思维导图记录一下,希望能给需要的人一些帮助 P.S.:个人整理,可能会有错误之处,还望指出~ 要解决的问题 1.海量数据的操作超出单表.单库的最大限制 2.访问压力超出数据库系统限制,性能下降 3.数据库复制.容灾等问题 解决方案 一.采用数据分表分库提高数据库的性能限制 1.可选Sharding策略 2.Sharding实现的层面 可以为: (1)数据访问层(DAO) (2)ORM框架层 (3)JDBC API层 (4)应用服务器和数