公司原来的项目单war包对应单个redis,
如下图:
随着war包的增多,redis数量也增多。
我们知道redis采用多路复用其性能非常好,考虑到我们单点压力不大和可用性(若redis挂了,项目不能正常运行)。
用如下的方式。
目录:
1 master slave 哨兵配置
2.检验
假设有:
192.168.35.128 (目标设为master)
192.168.35.129
192.168.35.130
配置好之后用 ./redis-server ../redis.conf 启动三台上的redis
验证一下,128机上role:master 有 slave0,slave1
success!!
192.168.35.128 上修改 sentinel.conf 文件
配置好了之后用 ./redis-sentinel ../sentinel.conf 启动
到目前为止 master slave0 slave0 sentinel0 就配置好了。
建立一个redis项目选择,redis & web的依赖
建立一个如下的类 (redis 接口的封装) 记得启动的时候要扫描一下
@Component
public class RedisClusterCache {
@Autowired
private RedisTemplate redisTemplate;
public boolean exists(String key) {
return redisTemplate.hasKey(key);
}
public String get(String key) {
return redisTemplate.opsForValue().get(key);
}
public void set(String key, String value) {
set(key, value, 0);
}
public void set(String key, String value, int expireSec) {
redisTemplate.opsForValue().set(key, value);
if (expireSec != 0) {
expire(key, expireSec);
}
}
public void del(String key) {
redisTemplate.delete(key);
}
public void lmset(String key, List values) {
lmset(key, values, 0);
}
public void lmset(String key, List values, int expireSec) {
redisTemplate.opsForList().leftPushAll(key, values);
if (expireSec != 0) {
expire(key, expireSec);
}
}
public void lpush(String key, String value) {
redisTemplate.opsForList().leftPush(key, value);
}
public String lpop(String key) {
return redisTemplate.opsForList().leftPop(key);
}
public long llen(String key) {
return redisTemplate.opsForList().size(key);
}
public List lget(String key) {
return redisTemplate.opsForList().range(key, 0, llen(key));
}
public void hmset(String key, Map values) {
hmset(key, values, 0);
}
public void hmset(String key, Map values, int expireSec) {
values.entrySet().forEach(item -> hset(key, item.getKey(), item.getValue()));
if (expireSec != 0) {
expire(key, expireSec);
}
}
public void hset(String key, String field, String value) {
redisTemplate.opsForHash().put(key, field, value);
}
public String hget(String key, String field) {
return (String) redisTemplate.opsForHash().get(key, field);
}
public boolean hexists(String key, String field) {
return redisTemplate.opsForHash().hasKey(key, field);
}
public Map hgetAll(String key) {
return redisTemplate.opsForHash().entries(key)
.entrySet().stream().collect(
Collectors.toMap(i -> (String) (i.getKey()), i -> (String) (i.getValue())));
}
public void hdel(String key, String field) {
redisTemplate.opsForHash().delete(key, field);
}
public long incrBy(String key, long incrValue) {
return redisTemplate.opsForValue().increment(key, incrValue);
}
public long decrBy(String key, long decrValue) {
return redisTemplate.opsForValue().increment(key, -decrValue);
}
public void expire(String key, int expire) {
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
public void flushdb() {
redisTemplate.execute((RedisCallback
application.yml
spring: redis: sentinel: master: mymaster nodes: 192.168.35.128:26379 database: 0 server: port: 8889
测试类
/**
* @author Joeg
* @email [email protected]
* @date 2018/4/11
*/
@RestController
@RequestMapping("demo")
public class DemoController {
@Autowired
RedisClusterCache redisClusterCache;
@RequestMapping("/{key}")
public String demo(@PathVariable String key) {
String aa = redisClusterCache.get(key);
return aa;
}
}
success
如果生产环境要使用还另外需要配置 密码。
一些具体配置见redis官方文档
第一次写谢谢大家的支持!
工作邮箱:[email protected] 看到肯定会回复