上接上一篇文章:Linux环境下redis的安装
1. 分片的目的
redis是将数据存储在内存中的,但是为了增加存储容量,一味的加大内存并不是一种好的解决方案,而分片则可以将数据存储在不同的redis服务器上,不仅实现了内存扩容,还降低了单台redis的压力。
2. 分片的实现
2.1 准备分片文件夹(因为是在虚拟机上部署,为了方便管理部署在了一个文件夹下,可以根据实际情况部署在不同的服务器)
mkdir shards
cp redis.conf shards/
复制配置文件到分片文件夹
2.2 修改配置文件
2.2.1 文件改名及复制
先将复制的文件改名为6379.conf
再复制多份配置文件
2.2.2 修改端口号及RDB模式名称
修改6379.conf
后面两个文件修改成对应的端口和名字
2.2.3 准备启动脚本
vim start.sh
在文件中写入启动脚本
#!/bin/sh
redis-server 6379.conf &
redis-server 6380.conf &
redis-server 6381.conf &
2.2.4 启动redis
sh start.sh
2.2.5 检查是否启动成功
2.2.6 分片的测试
测试jar包
<!--spring整合redis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
/* redis分片测试 */
@Test
public void redisShards() {
List<JedisShardInfo> list = new ArrayList<>();
list.add(new JedisShardInfo("192.168.126.129", 6379));
list.add(new JedisShardInfo("192.168.126.129", 6380));
list.add(new JedisShardInfo("192.168.126.129", 6381));
ShardedJedis shardedJedis = new ShardedJedis(list);
shardedJedis.set("aa", "aa");
shardedJedis.set("a1", "a1");
shardedJedis.set("a2", "a2");
shardedJedis.set("a3", "a3");
shardedJedis.set("a4", "a4");
}
测试结果
6379 端口数据
6380 端口数据
6381 端口数据
至此已实现redis的分片操作
3.分片的实现原理
一致性哈希算法
摘自百度百科
4. 分片存在的问题
当一台redis出现宕机,数据就可能会丢失,不能实现高可用