前言

  前面redis弄了那么多, 就是为了在项目中使用.

  那这里, 就分别来看一下, 单机版和集群版在springboot中的使用吧.  在里面, 我会同时贴出Jedis版, 作为比较.

  

单机版

1. pom.xml 

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>

2. application.yml 

spring:
redis:
port: 6379
host: 127.0.0.1
password: redis

这里为redis设置了一个密码, 可以在 redis.conf 文件中设置: requirepass 密码

3. controller

@RestController
@RequestMapping("simple")
public class SimpleController { @Autowired
private StringRedisTemplate stringRedisTemplate; @GetMapping("set")
public void set(){ ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
operations.set("1", "1a");
operations.set("2", "2b");
operations.set("3", "3c");
operations.set("4", "4d");
operations.set("5", "5e");
operations.set("elvin", "elvin");
operations.set("abc", "abc");
operations.set("xingming", "xingming");
}
}

4. Jedis

来看一下单机版redis下, Jedis是怎么玩的.

  @Test
public void testJedisPool() throws Exception {
// 第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。
JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
// 第二步:从JedisPool中获得Jedis对象。
Jedis jedis = jedisPool.getResource();
jedis.auth("redis");
// 第三步:使用Jedis操作redis服务器。
String result = jedis.get("abc");
System.out.println(result);
// 第四步:操作完毕后关闭jedis对象,连接池回收资源。
jedis.close();
// 第五步:关闭JedisPool对象。
jedisPool.close();
}

结果我就不展示了, 通过以上步骤, 能把controller存入的数据, 读取出来.

这里有一点要注意以下, 如果步骤3用的不是StringRedisTemplate, 而是RedisTemplate, 那么通过步骤4是读取不出来的.

如果你装了 redis desktop manager , 可以使用这个去看一下, 就会知道为啥读不出来.

具体为啥会产生这样的情况呢?

可以看一下RedisTemplate的源码:

看得出来, 这里使用了 JdkSerializationRedisSerializer 来序列化 key 和 value.

直观点的话, 可以看下图:

so, 这里就能看出来, 为啥用abc直接去查, 是查不到想要的结果的.

集群版

在集群里面, 如果你使用的是 spring-boot-starter-data-redis 的话, 就会发现, 超方便, 只要改一下配置文件就可以了, 其他的都可以不改.

1. application.yml

spring:
redis:
cluster:
nodes:
- 127.0.0.1:7001
- 127.0.0.1:7002
- 127.0.0.1:7003
- 127.0.0.1:7004
- 127.0.0.1:7005
- 127.0.0.1:7006
password: 123456

在application里面配置集群节点.

2. controller

controller里面的方法不变, 还是用那个. 直接用 Terminal 操作查看:

确实存进去了.

3. Jedis

  @Test
public void testJedisCluster() throws Exception {
// 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("127.0.0.1", 7001));
nodes.add(new HostAndPort("127.0.0.1", 7002));
nodes.add(new HostAndPort("127.0.0.1", 7003));
nodes.add(new HostAndPort("127.0.0.1", 7004));
nodes.add(new HostAndPort("127.0.0.1", 7005));
nodes.add(new HostAndPort("127.0.0.1", 7006));
JedisCluster jedisCluster = new JedisCluster(nodes, 2000, 5, 8, "123456", new GenericObjectPoolConfig());
// 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。
String result = jedisCluster.get("abc");
// 第三步:打印结果
System.out.println(result);
// 第四步:系统关闭前,关闭JedisCluster对象。
jedisCluster.close();
}

这里有个比较蛋疼的事情就是, 如果集群设置了密码, 并不能通过jedisCluster.auth()方式来输入密码

刚开始, 我还以为这是不推荐使用的, 谁知道, 这tm是不能用啊. 过分了, 简直.

通过Jedis的代码, 可以发现, 单机版和集群版, 操作的对象是不一样的, 那么在开发的过程中, 怎么来统一呢?(开发的时候, 不需要使用redis集群, 上线的时候, 直接切换过去就可以了)

那么想要解决这个问题, 可以通过策略模式来解决, 定义一个操作接口, 在接口中定义方法, 我管你单机还是集群, 都要来实现这个接口. 那么在操作的过程中, 就统一到接口了. 剩下来的就是赋值和切换了.

而使用  spring-boot-starter-data-redis 就不需要考虑那么多了, 确实方便许多.

springboot redis(单机/集群)的更多相关文章

  1. springboot2.x版本整合redis(单机/集群)(使用lettuce)

    在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce. 此处springboot2.x,所以使用的是Lettuce.关于jedis跟 ...

  2. 面向接口编程实现不改代码实现Redis单机/集群之间的切换

    开发中一般使用Redis单机,线上使用Redis集群,因此需要实现单机和集群之间的灵活切换 pom配置: <!-- Redis客户端 --> <dependency> < ...

  3. Redis 一二事 - 在spring中使用jedis 连接调试单机redis以及集群redis

    Redis真是好,其中的键值用起来真心强大啊有木有, 之前的文章讲过搭建了redis集群 那么咋们该如何调用单机版的redis以及集群版的redis来使用缓存服务呢? 先讲讲单机版的,单机版redis ...

  4. docker搭建redis主从集群和sentinel哨兵集群,springboot客户端连接

    花了两天搭建redis主从集群和sentinel哨兵集群,讲一下springboot客户端连接测试情况 redis主从集群 从网上查看说是有两种方式:一种是指定配置文件,一种是不指定配置文件 引用地址 ...

  5. redis哨兵集群+spring boot 2.×

    Ubuntu集群构建篇 redis-cli:不跟参数,默认访问localhost:6379端口,无密码登陆 redis-cli -h ${host} -p ${port} -a ${password} ...

  6. Redis Cluster搭建高可用Redis服务器集群

    一.Redis Cluster集群简介 Redis Cluster是Redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了Redis分布式的需求,当一个节点挂了可以快速的切换到另一个节 ...

  7. 【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!

    转: [精]搭建redis cluster集群,JedisCluster带密码访问[解决当中各种坑]! 2017年05月09日 00:13:18 冉椿林博客 阅读数:18208  版权声明:本文为博主 ...

  8. Redis Cluster集群知识学习总结

    Redis集群解决方案有两个: 1)  Twemproxy: 这是Twitter推出的解决方案,简单的说就是上层加个代理负责分发,属于client端集群方案,目前很多应用者都在采用的解决方案.Twem ...

  9. redis cluster 集群畅谈(一)

    redis单机在大数据量情况的会出现瓶颈问题,通过redis 主从架构和 哨兵集群结合可以实现99.99% 高可用 .水平扩容支持更高QPS的解决方案. 在大数据量面前,主从架构结合哨兵集群的解决方案 ...

随机推荐

  1. KVM 虚拟机的热迁移

    热迁移:顾名思义在虚拟机不关机的情况下将KVM虚拟机进行迁移 准备工作:两台KVM虚拟机,一台nfs虚拟机,centos7.4系统 主机 IP地址 主机名 KVM01 10.00.11 kvm01 K ...

  2. canvas绘制圆图输出图片格式

    function drawCircleImage(url, callback) { const canvas = document.createElement('canvas'); const img ...

  3. C++二分图匹配基础:zoj1002 FireNet 火力网

    直接给出题目吧... 问题 D(1988): [高级算法]火力网 时间限制: 1 Sec 内存限制: 128 MB 题目描述 给出一个N*N的网格,用'.'表示空地,用'X'表示墙.在网格上放碉堡,可 ...

  4. Oracle中特殊的变量类型

    1.%TYPE 允许用户动态地将数据库中某一列的数据类型与PL/SQL中某个变量关联.语法如下: variable_name table.column%TYPE   2.%ROWTYPE 允许用户定义 ...

  5. 【深度学习】安装TensorFlow-GPU

    1.Windows版 准备 干净的系统,没有安装过Python,有的话就卸载了. 另外我的系统安装了VS2015 VS2017(这里我不知道是不是必备的). 现在TensorFlow和cuda以及cu ...

  6. scrum学习

    一.关于Scrum 什么叫Scrum?Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发.Scrum包括了一系列实践和预定义角色的过程骨架.Scrum中的主要角色包括同项目经理类似的Scru ...

  7. alfred3配置

    搜索功能配置 github https://github.com/search?utf8=%E2%9C%93&q={query} github'{query}' g baidu http:// ...

  8. easyui的下拉框combox动态复赋值显示在前端

    editbale:false设置为本输入框禁止编辑

  9. appium+python自动化脚本

    用pycharm,首先得把appium导入,操作如下(否则,运行程序后会报错,没有module appium) Settings->Project Interpreter,双击pip,搜索app ...

  10. 初探系列 — Pharbers用于单点登录的权限架构

    一. 前言 就职公司 法伯科技是一家以数据科技为驱动, 专注于医药健康领域的循证咨询公司. 以数据科学家身份, 赋能医药行业. 让每位客户都能享受数据带来的价值, 洞察业务, 不止于数据, 让决策更精 ...