Spring Data Redis示例

时间:2023-03-08 20:55:34

说明

关于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]}

Spring Data Redis示例

例子源码

https://github.com/peterchenhdu/spring-data-redis-example

参考资料

https://examples.javacodegeeks.com/enterprise-java/spring/spring-data-redis-example/