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集群相关推荐

  1. SpringBoot2.0 整合 Redis集群 ,实现消息队列场景

    本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/middle-ware-parent 一.Redis集群简介 1.RedisCluster概念 Re ...

  2. Deepin+Docker+Redis5.0 安装 Redis集群

    一.开发环境 Deepin15.11 桌面版 Linux操作系统 我的Windows10 VMware15.5.1中 已经安装了Deepin15.11 VitualBox 用来运行Docker容器的虚 ...

  3. csrediscore访问redis集群_搭建文档 | centos7.6环境下redis5.0.8集群搭建

    " 本文作者:墨篱弦 " 一.做基础配置 a) 首先创建3个空文件 mkdir -p /server/redis_cluster/7001/datamkdir -p /server ...

  4. 崛起于Springboot2.X之redis集群搭建(17)

    为什么80%的码农都做不了架构师?>>>    Springboot2.0.3 1.添加配置 spring.redis.jedis.pool.max-active=8 spring. ...

  5. springboot2.x 整合redis集群的几种方式

    一.不指定redis连接池 #系统默认连接池 yml配置文件: spring:redis:cluster:nodes:- 192.168.1.236:7001- 192.168.1.236:7002- ...

  6. 在K8s上部署Redis 集群

    一.前言 架构原理:每个Master都可以拥有多个Slave.当Master下线后,Redis集群会从多个Slave中选举出一个新的Master作为替代,而旧Master重新上线后变成新Master的 ...

  7. Redis集群运维与核心原理(哨兵选举、集群选举等)剖析

    1.Redis集群方案比较 哨兵模式 高可用集群模式 redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制.高可用和分片特性.Redis集群不需要 sentinel哨兵也能完成节点移除 ...

  8. Windows下Redis集群搭建

    上一篇文章中介绍了Windows下使用cygwin搭建redis单节点,这一篇文件将在上一篇文章的基础上搭建redis集群. 1. 在安装redis的目录的同级目录下新建6个文件夹,7000,7000 ...

  9. Redis集群命令行部署工具

    使用之前准备工作: 1)配置好与端口无关的公共redis.conf文件,和工具放在同一目录下 2)配置好与端口相关的模板redis-PORT.conf文件,也和工具放在同一目录下(部署时PORT会被替 ...

最新文章

  1. 张宏江:开源时代如何解决人的思维孤岛
  2. ONES 万事联合创始人 amp; CTO 冯斌:企业服务产品的探索实践
  3. 算法--------旋转图像
  4. mysql常用命令--入门
  5. 【渝粤教育】国家开放大学2018年秋季 0273-22T中国现代文学 参考试题
  6. json处理最外层引号
  7. 【普通の随笔】3.26
  8. 6、easyUI-拖放事件及应用
  9. 使用std:sort和Eigen根据矩阵某一行/列元素对矩阵的行/列排序
  10. 63. 无阻塞加载脚本
  11. 神经网络的理解和计算
  12. Linux时间子系统之二:表示时间的单位和结构
  13. COGS2353[HZOI 2015] 有标号的DAG计数 I
  14. 计算机组成原理学习笔记————存储器(一) 存储器分类
  15. TeamTalk消息协议
  16. 部分常见GIS专业英语词汇
  17. html安装网卡驱动,教您怎么用驱动精灵安装网卡驱动
  18. NO.6网工学习之QINQ
  19. 怎么安装python3.7.3_Python 3.7.0安装教程(附安装包) | 我爱分享网
  20. 【MYSQL数据库基础篇第一部分总结】

热门文章

  1. 深入理解密码学基本概念和应用
  2. 记住,TCP是一种流协议
  3. 消费者rebalance机制分析
  4. SystemTimer,TimerTaskList等源码分析
  5. Hive之架构 功能
  6. html 缩小页面 重叠,如何获得两个平行四边形完美重叠并在HTML中动态调整大小?...
  7. android qt 串口通信,Qt串口通信开发之QSerialPort模块详细使用方法与实例
  8. ESP8266使用方法
  9. 23.vs2015创建Qt界面动态库
  10. java 命令 native2ascii_java native2ascii.exe命令