Springboot2.0访问Redis集群
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作高性能的key-value数据库、缓存和消息中间件,掌握它是程序员的必备技能,下面是一个springboot访问redis的demo。
新建一个springboot项目,这里取名spring-boot-demo
项目结构目录如下
pom.xml文件内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.carry</groupId><artifactId>spring-boot-demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>spring-boot-demo</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.2.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><mybatis.version>1.3.2</mybatis.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork></configuration></plugin></plugins></build></project>
下面我们来配置redis,因为需要用到mysql数据库,这里使用mybatis访问
application.yml文件内容
#mybatis配置 mybatis:mapper-locations: classpath:mapper/*Mapper.xmltype-aliases-package: com.carry.domain #数据源 spring:datasource:url: jdbc:mysql://192.168.68.100:3306/testdriver-class-name: com.mysql.jdbc.Driverusername: rootpassword: 123456#jackson时间格式化jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss#redis配置redis:cluster:nodes: 192.168.68.100:7000,192.168.68.100:7001,192.168.68.101:7000,192.168.68.101:7001,192.168.68.102:7000,192.168.68.102:7001timeout: 6000mspassword: 123456lettuce:pool:max-active: 8max-wait: -1msmax-idle: 8min-idle: 0database: 0
新建文件RedisConfig.java,内容如下
package com.carry.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory) {//redis序列化器Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);template.setKeySerializer(jackson2JsonRedisSerializer);template.setValueSerializer(jackson2JsonRedisSerializer);template.setHashKeySerializer(jackson2JsonRedisSerializer);template.setHashValueSerializer(jackson2JsonRedisSerializer);return template;}
}
最后在项目启动类SpringBootDemoApplication上加上注解@EnableCaching开启缓存
配置至此结束,下面我们来通过代码来访问redis集群
先写一个访问mysql的mapper,其中只包含一个方法List<User> findAll();
对应SQL语句为select * from user
User实体类跟user表字段一一对应
UserServiceImpl代码内容
package com.carry.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;import com.carry.domain.User;
import com.carry.mapper.UserMapper;
import com.carry.service.UserService;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Cacheable(value = "findAll", key = "'test'")public List<User> findAll() {System.out.println("如果没打印这句话,说明走了缓存!");return userMapper.findAll();}
}
UserController代码内容
package com.carry.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import com.carry.domain.User;
import com.carry.service.UserService;@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/getUsers")public List<User> getUsers(){return userService.findAll();}}
最后启动项目在浏览器中访问http://localhost:8080/getUsers
第一次访问控制台输出“如果没打印这句话,说明走了缓存!”
再次访问控制台则没有输出。
我们通过redis-cli连接redis会发现key值是一个很奇怪的值
其实就是我们在@Cacheable注解配的值拼起来的
需要注意的是key的值需要用单引号''引起来不然会报错
最后写了几个test case,读者自己去运行看看控制台会输出什么
1 package com.carry;2 3 import java.util.Date;4 import java.util.HashSet;5 import java.util.List;6 import java.util.Map;7 import java.util.Set;8 import java.util.concurrent.ExecutorService;9 import java.util.concurrent.Executors;10 import java.util.stream.IntStream;11 12 import org.junit.Test;13 import org.junit.runner.RunWith;14 import org.slf4j.Logger;15 import org.slf4j.LoggerFactory;16 import org.springframework.beans.factory.annotation.Autowired;17 import org.springframework.boot.test.context.SpringBootTest;18 import org.springframework.data.redis.core.Cursor;19 import org.springframework.data.redis.core.DefaultTypedTuple;20 import org.springframework.data.redis.core.HashOperations;21 import org.springframework.data.redis.core.ListOperations;22 import org.springframework.data.redis.core.RedisTemplate;23 import org.springframework.data.redis.core.ScanOptions;24 import org.springframework.data.redis.core.SetOperations;25 import org.springframework.data.redis.core.StringRedisTemplate;26 import org.springframework.data.redis.core.ValueOperations;27 import org.springframework.data.redis.core.ZSetOperations;28 import org.springframework.test.context.junit4.SpringRunner;29 30 import com.carry.domain.User;31 32 @RunWith(SpringRunner.class)33 @SpringBootTest34 public class SpringBootDemoApplicationTests {35 36 private static final Logger log = LoggerFactory.getLogger(SpringBootDemoApplicationTests.class);37 38 39 @Autowired40 private StringRedisTemplate stringRedisTemplate;41 42 @Autowired43 private RedisTemplate<String, Object> redisCacheTemplate;44 45 46 @Test47 public void redisTest() {48 ExecutorService executorService = Executors.newFixedThreadPool(1000);49 IntStream.range(0, 1000).forEach(i ->50 executorService.execute(() -> stringRedisTemplate.opsForValue().increment("kk", 1))51 );52 }53 54 @Test55 public void redisTestString() {56 stringRedisTemplate.opsForValue().set("carry", "chan");57 final String v1 = stringRedisTemplate.opsForValue().get("carry");58 log.info("[字符缓存结果] - [{}]", v1);59 }60 61 @Test62 public void redisTestObject() {63 //以下只演示整合,具体Redis命令可以参考官方文档,Spring Data Redis 只是改了个名字而已,Redis支持的命令它都支持64 String key = "carry:user:1";65 ValueOperations<String, Object> valueOperations = redisCacheTemplate.opsForValue();66 valueOperations.set(key, new User(1, "carry", new Date(), "longhua"));67 //对应 String(字符串)68 final User user = (User) valueOperations.get(key);69 log.info("[对象缓存结果] - [{}]", user);70 }71 72 @Test73 public void redisTestList() {74 ListOperations<String, Object> listOperations = redisCacheTemplate.opsForList();75 listOperations.trim("key1", 1, 0);76 List<Object> list = listOperations.range("key1", 0, -1);77 log.info("[对象缓存结果] - {}", list);78 listOperations.leftPush("key1", 1);79 listOperations.leftPush("key1", 2);80 listOperations.rightPush("key1", 3);81 list = listOperations.range("key1", 0, -1);82 log.info("[对象缓存结果] - {}", list);83 }84 85 @Test86 public void redisTestHash() {87 HashOperations<String, Object, Object> hashOperations = redisCacheTemplate.opsForHash();88 hashOperations.put("hkey", "k1", "v1");89 hashOperations.put("hkey", "k2", "v2");90 hashOperations.put("hkey", "k3", "v3");91 Map<Object, Object> map = hashOperations.entries("hkey");92 log.info("[对象缓存结果] - [{}]", map);93 }94 95 @Test96 public void redisTestSet() {97 SetOperations<String, Object> setOperations = redisCacheTemplate.opsForSet();98 setOperations.add("skey", "v1", "v2", "v3", "v4");99 Cursor<Object> cursor = setOperations.scan("skey", ScanOptions.NONE); 100 while (cursor.hasNext()) { 101 System.out.println(cursor.next()); 102 } 103 log.info("[对象缓存结果] - [{}]", cursor); 104 } 105 106 @Test 107 public void redisTestZSet() { 108 ZSetOperations<String, Object> zSetOperations = redisCacheTemplate.opsForZSet(); 109 ZSetOperations.TypedTuple<Object> tuple1 = new DefaultTypedTuple<>("v1", 9.6); 110 ZSetOperations.TypedTuple<Object> tuple2 = new DefaultTypedTuple<>("v2", 9.9); 111 Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<>(); 112 tuples.add(tuple1); 113 tuples.add(tuple2); 114 zSetOperations.add("zkey", tuples); 115 Set<Object> set = zSetOperations.range("zkey", 0, -1); 116 log.info("[对象缓存结果] - {}", set); 117 } 118 }
转载于:https://www.cnblogs.com/telwanggs/p/10826937.html
Springboot2.0访问Redis集群相关推荐
- SpringBoot2.0 整合 Redis集群 ,实现消息队列场景
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/middle-ware-parent 一.Redis集群简介 1.RedisCluster概念 Re ...
- Deepin+Docker+Redis5.0 安装 Redis集群
一.开发环境 Deepin15.11 桌面版 Linux操作系统 我的Windows10 VMware15.5.1中 已经安装了Deepin15.11 VitualBox 用来运行Docker容器的虚 ...
- csrediscore访问redis集群_搭建文档 | centos7.6环境下redis5.0.8集群搭建
" 本文作者:墨篱弦 " 一.做基础配置 a) 首先创建3个空文件 mkdir -p /server/redis_cluster/7001/datamkdir -p /server ...
- 崛起于Springboot2.X之redis集群搭建(17)
为什么80%的码农都做不了架构师?>>> Springboot2.0.3 1.添加配置 spring.redis.jedis.pool.max-active=8 spring. ...
- springboot2.x 整合redis集群的几种方式
一.不指定redis连接池 #系统默认连接池 yml配置文件: spring:redis:cluster:nodes:- 192.168.1.236:7001- 192.168.1.236:7002- ...
- 在K8s上部署Redis 集群
一.前言 架构原理:每个Master都可以拥有多个Slave.当Master下线后,Redis集群会从多个Slave中选举出一个新的Master作为替代,而旧Master重新上线后变成新Master的 ...
- Redis集群运维与核心原理(哨兵选举、集群选举等)剖析
1.Redis集群方案比较 哨兵模式 高可用集群模式 redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制.高可用和分片特性.Redis集群不需要 sentinel哨兵也能完成节点移除 ...
- Windows下Redis集群搭建
上一篇文章中介绍了Windows下使用cygwin搭建redis单节点,这一篇文件将在上一篇文章的基础上搭建redis集群. 1. 在安装redis的目录的同级目录下新建6个文件夹,7000,7000 ...
- Redis集群命令行部署工具
使用之前准备工作: 1)配置好与端口无关的公共redis.conf文件,和工具放在同一目录下 2)配置好与端口相关的模板redis-PORT.conf文件,也和工具放在同一目录下(部署时PORT会被替 ...
最新文章
- 张宏江:开源时代如何解决人的思维孤岛
- ONES 万事联合创始人 amp; CTO 冯斌:企业服务产品的探索实践
- 算法--------旋转图像
- mysql常用命令--入门
- 【渝粤教育】国家开放大学2018年秋季 0273-22T中国现代文学 参考试题
- json处理最外层引号
- 【普通の随笔】3.26
- 6、easyUI-拖放事件及应用
- 使用std:sort和Eigen根据矩阵某一行/列元素对矩阵的行/列排序
- 63. 无阻塞加载脚本
- 神经网络的理解和计算
- Linux时间子系统之二:表示时间的单位和结构
- COGS2353[HZOI 2015] 有标号的DAG计数 I
- 计算机组成原理学习笔记————存储器(一) 存储器分类
- TeamTalk消息协议
- 部分常见GIS专业英语词汇
- html安装网卡驱动,教您怎么用驱动精灵安装网卡驱动
- NO.6网工学习之QINQ
- 怎么安装python3.7.3_Python 3.7.0安装教程(附安装包) | 我爱分享网
- 【MYSQL数据库基础篇第一部分总结】
热门文章
- 深入理解密码学基本概念和应用
- 记住,TCP是一种流协议
- 消费者rebalance机制分析
- SystemTimer,TimerTaskList等源码分析
- Hive之架构 功能
- html 缩小页面 重叠,如何获得两个平行四边形完美重叠并在HTML中动态调整大小?...
- android qt 串口通信,Qt串口通信开发之QSerialPort模块详细使用方法与实例
- ESP8266使用方法
- 23.vs2015创建Qt界面动态库
- java 命令 native2ascii_java native2ascii.exe命令