Redis是一个key-value数据库,支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。在Java中,使用较为广泛的客户端有Redisson、Jedis。Spring Data Redis模块默认使用Jedis。

开发环境:IntelliJ IDEA 2019.2.2
Spring Boot版本:2.1.8

一、项目构建

1、新建一个名称为demo的Spring Boot项目。
2、pom.xml

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5.  
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-data-redis</artifactId>
  9. </dependency>
  10.  
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-test</artifactId>
  14. <scope>test</scope>
  15. </dependency>
  16.  
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-devtools</artifactId>
  20. </dependency>

3、application.yml

配置Redis的相关属性。

  1. spring:
  2. redis:
  3. port: 6379
  4. password: 123456
  5. host: localhost

二、实体类 

1、User.java

映射Redis的数据:
(1) 类使用@RedisHash注解表示User对象会以hash类型保存;
(2) 字段id使用@Id注解表示自动生成guid;
(3) 字段使用@Indexed表示建立索引,在方法名查询时需要设置此注解;

  1. package com.example.demo.entity;
  2.  
  3. import org.springframework.data.annotation.Id;
  4. import org.springframework.data.redis.core.RedisHash;
  5. import org.springframework.data.redis.core.index.Indexed;
  6.  
  7. @RedisHash("user")
  8. public class User {
  9. @Id
  10. private String id;
  11. @Indexed
  12. private String name;
  13. @Indexed
  14. private Integer age;
  15.  
  16. public String getId() {
  17. return id;
  18. }
  19.  
  20. public void setId(String id) {
  21. this.id = id;
  22. }
  23.  
  24. public String getName() {
  25. return name;
  26. }
  27.  
  28. public void setName(String name) {
  29. this.name = name;
  30. }
  31.  
  32. public Integer getAge() {
  33. return age;
  34. }
  35.  
  36. public void setAge(Integer age) {
  37. this.age = age;
  38. }
  39. }

三、数据访问层

1、数据访问层 UserRepository.java

继承CrudRepository可以不需要任何实现,拥有基本的CRUD操作。也可以手动添加代码实现方法名查询。

  1. package com.example.demo.repository;
  2.  
  3. import com.example.demo.entity.User;
  4. import org.springframework.data.repository.CrudRepository;
  5.  
  6. import java.util.List;
  7.  
  8. public interface UserRepository extends CrudRepository<User,String> {
  9.  
  10. //方法名查询:根据字段name查询
  11. List<User> findByName(String name);
  12.  
  13. //方法名查询:根据字段name和age的And查询
  14. List<User> findByNameAndAge(String name, Integer age);
  15.  
  16. //方法名查询:根据字段name和age的Or查询
  17. List<User> findByNameOrAge(String name, Integer age);
  18. }

四、业务层

1、UserRepository.java

  1. package com.example.demo.service;
  2.  
  3. import com.example.demo.entity.User;
  4. import com.example.demo.repository.UserRepository;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7.  
  8. import java.util.ArrayList;
  9. import java.util.Iterator;
  10. import java.util.List;
  11.  
  12. @Service
  13. public class UserService {
  14. @Autowired
  15. UserRepository userRepository;
  16.  
  17. public List<User> getUsers(){
  18. Iterable<User> users = userRepository.findAll();
  19. List<User> datas = new ArrayList<User>();
  20. for(Iterator<User> it = users.iterator(); it.hasNext();){
  21. User u = it.next();
  22. datas.add(u);
  23. }
  24. return datas;
  25. }
  26.  
  27. public void save(User user) {
  28. userRepository.save(user);
  29. }
  30.  
  31. public List<User> findByName(String name){
  32. return userRepository.findByName(name);
  33. }
  34.  
  35. public List<User> findByNameAndAge(String name, Integer age){
  36. return userRepository.findByNameAndAge(name, age);
  37. }
  38.  
  39. public List<User> findByNameOrAge(String name, Integer age){
  40. return userRepository.findByNameOrAge(name, age);
  41. }
  42. }

五、控制器

1、UserController.java

  1. package com.example.demo;
  2.  
  3. import com.example.demo.entity.User;
  4. import com.example.demo.service.UserService;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7.  
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10.  
  11. @RestController
  12. public class UserController {
  13. @Resource
  14. UserService userService;
  15.  
  16. @RequestMapping("/save")
  17. public String save(){
  18. for(int i=1;i<=20;i++){
  19. User user = new User();
  20. user.setName("a" + i);
  21. user.setAge(i);
  22. userService.save(user);
  23. }
  24. return "添加成功";
  25. }
  26.  
  27. @RequestMapping("/getUsers")
  28. public List<User> getUsers(){
  29. List<User> users = userService.getUsers();
  30. return users;
  31. }
  32.  
  33. @RequestMapping("/findByName")
  34. public List<User> findByName(String name){
  35. return userService.findByName(name);
  36. }
  37.  
  38. @RequestMapping("/findByNameAndAge")
  39. public List<User> findByNameAndAge(String name, Integer age){
  40. return userService.findByNameAndAge(name, age);
  41. }
  42.  
  43. @RequestMapping("/findByNameOrAge")
  44. public List<User> findByNameOrAge(String name, Integer age){
  45. return userService.findByNameOrAge(name, age);
  46. }
  47. }

启动服务器,浏览器访问:http://localhost:8080/save 生成20条测试数据,访问http://localhost:8080/getUsers,页面显示如下:

  1. [{"id":"8da6f5ad-b24c-4725-9c69-4d709369eac7","name":"a14","age":14},{"id":"b62b2028-4d41-41be-aeff-e2b56776dd87","name":"a10","age":10},{"id":"c8330a2a-902b-4db9-b262-65d182027eac","name":"a6","age":6},{"id":"cc7b5a91-0ca6-4577-891a-835a1cebef6f","name":"a11","age":11},{"id":"09f8f2e3-2cf8-48f7-a535-1897b7cc0f35","name":"a1","age":1},{"id":"3344413f-8128-42ad-8343-304005c87e5f","name":"a7","age":7},{"id":"db74f020-f3e3-4422-8013-c515b9d8551d","name":"a5","age":5},{"id":"7fc46621-ecaf-47c6-bae3-f2061104d802","name":"a2","age":2},{"id":"dcdcdda0-bab0-450a-b6e6-fdce410b01fd","name":"a8","age":8},{"id":"b456f4fd-158f-43e9-86cf-0340b809ffab","name":"a12","age":12},{"id":"4ffb6019-21b1-4880-8ec3-2703f561d028","name":"a15","age":15},{"id":"7e45d738-7a31-4b24-928e-a9da3583ef6d","name":"a4","age":4},{"id":"7992e502-4049-4d40-bc35-aab72adbe335","name":"a19","age":19},{"id":"3df7b2ac-6bb0-496d-91d2-05ac763e5f68","name":"a13","age":13},{"id":"7c94edba-f91e-42fe-b8b4-7c6a9ba82747","name":"a3","age":3},{"id":"39402099-17ba-4368-ac23-dd5e9fe1d8ae","name":"a17","age":17},{"id":"e49750d6-ce80-4764-87d3-1566d9263360","name":"a18","age":18},{"id":"499e1a9a-b947-4eec-8d37-d1cdf7ac1179","name":"a16","age":16},{"id":"04f0cb4e-c17b-4b4e-b135-e6c222aace21","name":"a9","age":9},{"id":"ac48ce35-5a38-48b8-90b9-6b999c3fd242","name":"a20","age":20}]

其它控制器方法略。

Spring Boot 2 + Redis例子的更多相关文章

  1. 玩转spring boot——结合redis

    一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...

  2. Spring Boot使用Redis进行消息的发布订阅

    今天来学习如何利用Spring Data对Redis的支持来实现消息的发布订阅机制.发布订阅是一种典型的异步通信模型,可以让消息的发布者和订阅者充分解耦.在我们的例子中,我们将使用StringRedi ...

  3. spring boot集成redis基础入门

    redis 支持持久化数据,不仅支持key-value类型的数据,还拥有list,set,zset,hash等数据结构的存储. 可以进行master-slave模式的数据备份 更多redis相关文档请 ...

  4. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  5. spring boot集成redis实现session共享

    1.pom文件依赖 <!--spring boot 与redis应用基本环境配置 --> <dependency> <groupId>org.springframe ...

  6. Spring Boot SOAP Webservice例子

    前言 本文将学习如何利用Spring boot快速创建SOAP webservice服务: 虽然目前REST和微服务越来越流行,但是SOAP在某些情况下,仍然有它的用武之地: 在本篇 spring b ...

  7. Spring Boot + Mybatis + Redis二级缓存开发指南

    Spring Boot + Mybatis + Redis二级缓存开发指南 背景 Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一.Mybat ...

  8. spring boot 结合Redis 实现工具类

    自己整理了 spring boot 结合 Redis 的工具类引入依赖 <dependency> <groupId>org.springframework.boot</g ...

  9. (转)spring boot整合redis

    一篇写的更清晰的文章,包括redis序列化:http://makaidong.com/ncjava/330749_5285125.html 1.项目目录结构 2.引入所需jar包 <!-- Sp ...

随机推荐

  1. Mac上打开终端的7种简单方法

    终端机是用于给Mac命令的便捷工具,尽管它可能会吓倒许多人.毕竟,这不像输入句子然后Mac响应那样简单.如果您有兴趣学习使用Terminal或只想输入一两个命令,我们在下面列出了一些文章,可以帮助您使 ...

  2. 【系统之音】SystemUI篇(二)SysytemUI功能一览--草稿

    Main Menu > Navigate > Type Hierarchy(Ctrl + H)

  3. Flask 教程 第十三章:国际化和本地化

    本文翻译自The Flask Mega-Tutorial Part XIII: I18n and L10n 这是Flask Mega-Tutorial系列的第十三部分,我将告诉你如何扩展Microbl ...

  4. ribbon客户端负载均衡

    Ribbon简介 参考:https://blog.csdn.net/chengqiuming/article/details/80711168 Ribbon是Netflix发布的负载均衡器,它有助于控 ...

  5. ASP.NET MVC快速开发框架FastExecutor开发全过程感受及总结

    困境 追溯到2018年5月份,是个炎热的夏天,毕业后1年7个月我提出了离职,原因是受不了原来公司过度的封装框架感觉一年多毫无进步与实施天天轰炸般的电话,偶然间出去面试了一次发现自己知识真的是比较局限, ...

  6. STM32-24位AD7799驱动之手册代码详解,支持模拟SPI和硬件SPI

    1.AD7799介绍 AD7799结构图如下所示: 其中REFIN参考电压建议为2.5V, REFIN电压低于0.1V时,则差分输入ad值就无法检测了,如下图所示: 注意: 如果REG_CONFIG的 ...

  7. java使用htmlunit工具抓取js中加载的数据

    htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实现.这个没有界面的浏览器,运行速度 ...

  8. find 常用命令

    系统中总会不断产生一些文件,比如日志文件,不一定会用到也不会自动删除,这时候就需要手动删除,当然也可以转存到其他目录下.不好找的时候可以用find模糊查找,加个job定时任务自动执行定期删除文件1.添 ...

  9. 【cf932E】E. Team Work(第二类斯特林数)

    传送门 题意: 求\(\displaystyle \sum_{i=0}^n{n\choose i}i^k,n\leq 10^9,k\leq 5000\). 思路: 将\(i^k\)用第二类斯特林数展开 ...

  10. Less(6)

    1.先判断注入类型 (1)首先看到要求,要求传一个ID参数,并且要求是数字型的:?id=1 (2)再输入?id=1' (3)再输入?id=1 and 1=1 (4)再输入?id=1 and 1=2 ( ...