Spring Data Redis示例
说明
关于Redis:一个基于键值对存储的NoSQL内存数据库,可存储复杂的数据结构,如List
, Set
, Hashes
。
关于Spring Data Redis:简称SDR, 能让Spring应用更加方便配置和访问Redis。
本工程基于spring boot ,spring data redis, spring io platform实现。
POM配置
<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>cn.edu.hdu</groupId>
<artifactId>examples.sdr</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>examples.sdr</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Athens-SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency> <dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.4.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <dependencies>
<!-- Compile -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<finalName>examples.sdr</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin> <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.3.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin> </plugins>
</build> </project>
配置RedisTemplate Bean
主要生成两个bean,JedisConnectionFactory 和 RedisTemplate,RedisTemplate bean用于后续注入到PersonRepoImpl中操作Redis数据库。
@Configuration
public class RedisConfig
{
@Bean
JedisConnectionFactory jedisConnectionFactory()
{
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
connectionFactory.setHostName("127.0.0.1");
connectionFactory.setPort(6379);
return new JedisConnectionFactory();
} @Bean
@Autowired
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory)
{
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer());
return template;
} }
使用RedisTemplate操作Redis
这里我们通过RedisTemplate得到HashOperations
对象,使用该对象来存取Redis数据。
package cn.edu.hdu.examples.sdr.repo.impl; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository; import cn.edu.hdu.examples.sdr.bean.Person;
import cn.edu.hdu.examples.sdr.repo.PersonRepo; @Repository
public class PersonRepoImpl implements PersonRepo { @Autowired
private RedisTemplate<String, Object> redisTemplate; private static String PERSON_KEY = "Person"; @Override
public void save(Person person) {
this.redisTemplate.opsForHash().put(PERSON_KEY, person.getId(), person);
} @Override
public Person find(String id) {
return (Person) this.redisTemplate.opsForHash().get(PERSON_KEY, id);
} @Override
public Map<Object, Object> findAll() {
return this.redisTemplate.opsForHash().entries(PERSON_KEY);
} @Override
public void delete(String id) {
this.redisTemplate.opsForHash().delete(PERSON_KEY, id); } }
测试
使用如下代码进行测试,运行前,请先运行本地redis服务;
1、查看当前所有用户
2、存入三个用户
3、查看ID为3的用户
4、查看所有用户
5、删除ID为2的用户后,查看剩余的用户
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private PersonRepo personRepo; public void testHash(){
Map<Object, Object> personMatrixMap = personRepo.findAll();
System.out.println("@@当前Redis存储的所有用户:" + personMatrixMap); Person person = new Person();
person.setId("1");
person.setAge(55);
person.setGender(Gender.Female);
person.setName("Oracle"); personRepo.save(person); Person person2 = new Person();
person2.setId("2");
person2.setAge(60);
person2.setGender(Gender.Male);
person2.setName("TheArchitect"); personRepo.save(person2); Person person3 = new Person();
person3.setId("3");
person3.setAge(25);
person3.setGender(Gender.Male);
person3.setName("TheOne"); personRepo.save(person3); System.out.println("查找ID为3的用户 : " + personRepo.find("3")); personMatrixMap = personRepo.findAll(); System.out.println("当前Redis存储的所有用户:" + personMatrixMap); personRepo.delete("2"); personMatrixMap = personRepo.findAll(); System.out.println("删除ID为2的用户后,剩余的所有用户: " + personMatrixMap);
} @Override
public void run(String... args) throws Exception {
this.testHash(); } public static void main(String[] args) {
// Close the context so it doesn't stay awake listening for redis
SpringApplication.run(Application.class, args).close(); }
}
结果打印:
@@当前Redis存储的所有用户:{}
查找ID为3的用户 : Person [id=3, name=TheOne, gender=Male, age=25]
当前Redis存储的所有用户:{2=Person [id=2, name=TheArchitect, gender=Male, age=60], 3=Person [id=3, name=TheOne, gender=Male, age=25], 1=Person [id=1, name=Oracle, gender=Female, age=55]}
删除ID为2的用户后,剩余的所有用户: {3=Person [id=3, name=TheOne, gender=Male, age=25], 1=Person [id=1, name=Oracle, gender=Female, age=55]}
也可以打开redis-cli手动输入key, 查看当前Redis存储结果:
剩下的两个用户为:{3=Person [id=3, name=TheOne, gender=Male, age=25], 1=Person [id=1, name=Oracle, gender=Female, age=55]}
例子源码
https://github.com/peterchenhdu/spring-data-redis-example
参考资料
https://examples.javacodegeeks.com/enterprise-java/spring/spring-data-redis-example/
Spring Data Redis示例的更多相关文章
- Spring Data Redis入门示例:数据序列化 (四)
概述 RedisTemplate默认使用的是基于JDK的序列化器,所以存储在Redis的数据如果不经过相应的反序列化,看到的结果是这个样子的: 可以看到,出现了乱码,在程序层面上,不会影响程序的运行, ...
- Spring Data Redis入门示例:基于Jedis及底层API (二)
使用底层API:RedisConnectionFactory和RedisConnection可以直接操作Redis,下面是一个简单的例子: ### Maven依赖 <properties> ...
- Spring Data Redis入门示例:字符串操作(六)
Spring Data Redis对字符串的操作,封装在了ValueOperations和BoundValueOperations中,在集成好了SPD之后,在需要的地方引入: // 注入模板操作实例 ...
- Spring Data Redis入门示例:Hash操作(七)
将对象存为Redis中的hash类型,可以有两种方式,将每个对象实例作为一个hash进行存储,则实例的每个属性作为hash的field:同种类型的对象实例存储为一个hash,每个实例分配一个field ...
- Spring Data Redis 详解及实战一文搞定
SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能.它提供了与商店互动的低级别和高级别抽象,使用户免受 ...
- Spring Data Redis 让 NoSQL 快如闪电(2)
[编者按]本文作者为 Xinyu Liu,文章的第一部分重点概述了 Redis 方方面面的特性.在第二部分,将介绍详细的用例.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 把 Redis ...
- Spring Data Redis 让 NoSQL 快如闪电 (1)
[编者按]本文作者为 Xinyu Liu,详细介绍了 Redis 的特性,并辅之以丰富的用例.在本文的第一部分,将重点概述 Redis 的方方面面.文章系国内 ITOM 管理平台 OneAPM 编译呈 ...
- Spring Boot使用Spring Data Redis操作Redis(单机/集群)
说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和 ...
- Redis与Spring Data Redis
1.Redis概述 1.1介绍 官网:https://redis.io/ Redis是一个开源的使用ANSIC语言编写.支持网络.可基于内存 亦可持久化的日志型.Key-Value型的高性能数据库. ...
随机推荐
- JavaScript onclick传递对象参数(easyui传递一行数据时)错误:uncaught SyntaxError: Unexpected identifier
JavaScript onclick传递对象参数(easyui传递一行数据时)错误:uncaught SyntaxError: Unexpected identifier 博主遇到的是用onclick ...
- easyui 回车搜索
代码: js: // 搜索 $("#searchButton").click(function() { var ip = $("#searchIp").val( ...
- 微软Office Online服务安装部署(二)
现在准备配置Client 1.进入到桌面后,打开powershell 输入: Add-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console ...
- 20172306 2018-2019《Java程序设计与数据结构课堂测试补充报告》
学号 2017-2018-2 <程序设计与数据结构>课堂测试补充报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 刘辰 学号:20172306 实验教师:王志强 必 ...
- magento中Model创建以及该Model对于数据库的增删改查
本文是按照magento英文文档照做与翻译的. Model层的实现是mvc框架的一个巨大的部分.它代表了你的应用的数据,或者说大多数应用没有数据是无用的.Magento的Model扮演着一个重要的角色 ...
- Java 正则表达式之捕获组
Java 正则表达式之捕获组 1. Java 正则表达式基础 2. Java 正则表达式之捕获组 一.概述 1.1 什么是捕获组 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显 ...
- JavaScript 数组
JavaScript的Array可以包含任意数据类型,并通过索引来访问每个元素. 要取得Array的长度,直接访问length属性: var arr = [1, 2, 3.14, 'Hello', n ...
- 谷歌发布了 T2T(Tensor2Tensor)深度学习开源系统
谷歌开源T2T模型库,深度学习系统进入模块化时代! 谷歌大脑颠覆深度学习混乱现状,要用单一模型学会多项任务 https://github.com/tensorflow/models https://g ...
- c语言模拟c++的继承和多态
//C++中的继承与多态 struct A { virtual void fun() //C++中的多态:通过虚函数实现 { cout << "A:fun()" < ...
- Jmeter小技巧以及问题集合
一.JDBC Request与BeanShell PostProcessor的结合使用 JDBCRequest部分 BeanShell PostProcessor配置项 二.if控制器的用法 三. ...