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型的高性能数据库. ...
随机推荐
- 自定义View(四) ViewGroup 动态添加变长Tag标签 支持自动换行
欲实现如下效果: 思路很简单就2步: 1.测量出ViewGroup的大小 2.找出子View的位置 若要实现动态添加标签view,就要实现ViewGroup的onMeasure().onLayout( ...
- paired-end reads的拼接
paired-end reads的拼接 发表于2012 年 8 月 13 日 Velvet中paired-end reads的拼接 文件格式 要将两头测序(paired-end)的reads放到同一个 ...
- GUI设计和UI设计有什么区别?
首先从技术的角度分析两者处于包含与被包含的关系. GUI=Graphical User Interface,是指在计算机出现后,在屏幕上使用图形界面来帮助(User)与机器打交道用的界面接口,泛指在计 ...
- shell启动执行cypher语句
1.跳转到目录:cd /data/soft/neo4j-community-not/ 2.修改配置文件:nano ./conf/neo4j.conf: 3. 登录:bin/cypher-shell - ...
- PHP脚本命令行执行成功,CRON无法执行故障解决记录
先来看看一个最简单的PHP文件(ip.php) <?php $myip = get_ip_cmd(); echo($myip); // get ip address function get_i ...
- MPLAB X IDE V4.15 创建工程,编译,问题处理
初步接触,有错误的地方还请大神们务必提出来,防止误导他人 硬件环境:MCU--PIC18F67K22 仿真下载器--ICD 3 编译环境:MPLAB X IDE V4.15 中文版 工作需要接触到了P ...
- Python中添加中文注释报错SyntaxError: Non-UTF-8 code starting with '\xc1'
问题:在文本编辑器中编辑Python文件时添加中文注释,运行python文件时报错.SyntaxError: Non-UTF-8 code starting with '\xc1' 解决方法:在文本开 ...
- 1.6Eigen中系数运算Reductions, visitors and broadcasting
Eigen::Matrix2d mat; mat<<,, ,; cout<<"矩阵所有系数之和:"<<mat.sum();//1+2+3+4=1 ...
- Alpha 冲刺 (7/10)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 学习MSI.CUDA 试运行软件并调试 ...
- 图解HTTP第二章
简单的 HTTP 协议 1>HTTP 协议用于客户端和服务器端之间的通信 HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同,用于客户端和服务器之间的通信.请求访问文本或图像等资源的一 ...