SpringBoot与非关系型数据库Redis的整合
(1)添加Spring Data Redis依赖启动器
引入这个依赖器创建项目,在项目pom.xml文件会出现以下依赖:
(2)编写实体类
Person:
package com.hardy.springbootdataredis.domain;import org.springframework.data.annotation.Id;import org.springframework.data.redis.core.RedisHash;import org.springframework.data.redis.core.index.Indexed;/** * @Author: HardyYao * @Date: 2021/6/15 */@RedisHash("persons") // 指定操作实体类对象在Redis数据库中的存储空间public class Person { @Id // 标识实体类主键private String id; @Indexed // 标识对应属性在Redis数据库中生成二级索引private String firstname; @Indexedprivate String lastname;private Address address;public String getId() {return id; }public void setId(String id) {this.id = id; }public String getFirstname() {return firstname; }public void setFirstname(String firstname) {this.firstname = firstname; }public String getLastname() {return lastname; }public void setLastname(String lastname) {this.lastname = lastname; }public Address getAddress() {return address; }public void setAddress(Address address) {this.address = address; } @Overridepublic String toString() {return "Person{" + "id='" + id + ''' + ", firstname='" + firstname + ''' + ", lastname='" + lastname + ''' + ", address=" + address + '}'; } }
Address:
package com.hardy.springbootdataredis.domain;import org.springframework.data.redis.core.index.Indexed;/** * @Author: HardyYao * @Date: 2021/6/15 */public class Address { @Indexedprivate String city; @Indexedprivate String country;public String getCity() {return city; }public void setCity(String city) {this.city = city; }public String getCountry() {return country; }public void setCountry(String country) {this.country = country; } @Overridepublic String toString() {return "Address{" + "city='" + city + ''' + ", country='" + country + ''' + '}'; } }
在上述两个实体类中,涉及了关于Redis数据库的数据操作的几个注解:
@RedisHash(“persons”):用于指定操作实体类对象在Redis数据库中的存储空间,此处表示针对Person实体类的数据操作都存储在Redis数据库中名为persons的存储空间下。
@Id:用于标识实体类主键。在Redis数据库中会默认生成字符串形式的HashKey表示唯一的实体对象id,当然也可以在数据存储时手动指定id。
@Indexed:用来指定在Redis数据库中为相应属性生成二级索引。当使用该注解时,属性对应的二级索引将在数据库中生成,这将使数据查询变得简单,索引名称与属性名相同。
(3)编写Repository接口
SpringBoot针对包括Redis在内的一些常用数据库提供了自动化配置,可以通过实现Repository接口简化对数据库中的数据进行增删查改的操作:
package com.hardy.springbootdataredis.repository;import com.hardy.springbootdataredis.domain.Person;import org.springframework.data.repository.CrudRepository;import java.util.List;/** * @Author: HardyYao * @Date: 2021/6/15 */public interface PersonRepository extends CrudRepository<Person, String> { List<Person> findByAddress_City(String City); }
注意:在操作Redis数据库时编写的Repository接口类需要继承最底层的CrudRepository接口,而不是继承JpaRepository(JpaRepository是SpringBoot整合JPA特有的)。当然,也可以在项目pom.xml文件中同时导入SpringBoot整合的JPA依赖和Redis依赖,这样就可以编写一个继承JpaRepository的接口的操作Redis数据库。
(4)Redis数据库连接配置
在项目的全局配置文件application.properties中添加Redis数据库的连接配置,示例代码如下:
# Redis服务器地址 spring.redis.host=127.0.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password=
(5)编写单元测试方法
package com.hardy.springbootdataredis;import com.hardy.springbootdataredis.domain.Address;import com.hardy.springbootdataredis.domain.Person;import com.hardy.springbootdataredis.repository.PersonRepository;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import java.util.List; @SpringBootTestclass SpringbootdataRedisApplicationTests { @Autowiredprivate PersonRepository repository; @Testpublic void savePerson() { Person person = new Person(); person.setFirstname("张"); person.setLastname("三"); Address address = new Address(); address.setCity("北京"); address.setCountry("中国"); person.setAddress(address);// 向Redis数据库添加数据Person save = repository.save(person); } @Testpublic void selectPerson() { List<Person> list = repository.findByAddress_City("北京");for (Person person : list) { System.out.println(person); } } }
(6)整合测试
打开Redis客户端可视化管理工具,先连接本地Redis服务器:
连接成功后,可以看到原来本地Redis数据库中是没有数据的:
运行上文中编写好的两个测试方法,查看控制台打印结果:
为了验证save()方法确实把数据写入到本地Redis数据库中了,打开Redis客户端可视化管理工具,刷新一下数据,可以看到数据成功写入了:
通过上图可知:执行save()方法添加的数据在Redis数据库中存储成功。另外,在数据库列表左侧还形成了一张类似address.city、firstname、lastname等二级索引,这些二级索引是前面创建Person类时在对应属性上添加@Indexed注解而生成的。同时,由于在Redis数据库中生成了对应属性的二级索引,所以可以通过二级索引来查询具体的数据信息,例如repository.findByAddress_City(“北京”)通过address.city索引查询索引值为北京的数据信息。如果没有设置对应属性的二级索引,那么通过属性索引查询的数据结果将为空。
以上是SpringBoot与Redis怎么整合的详细内容。更多信息请关注PHP中文网其他相关文章!

使用 Redis 存储 Session 有两种方法:使用 Redis 作为 Session 存储,创建一个哈希表存储用户 Session 数据,以用户 ID 或会话 ID 为键,以键值对存储数据。使用 Redis 作为 Session 持久化后端,将 Session 数据存储在其他存储中,定期同步到 Redis 以提高读取性能。

Redis 高效解决高并发问题,主要得益于以下机制:1)内存存储,极速读写;2)单线程事件循环,无锁竞争;3)多路复用 I/O,同时监听多个连接;4)优化数据结构,快速查找、插入和删除;5)复制和集群,负载均衡和容错;6)持久化,确保数据安全。

可以通过以下两种方法查看 Redis 存储的数据:使用 Redis 命令行界面 (CLI) 执行 GET <键> 命令。使用第三方 Redis 图形用户界面 (GUI) 工具,例如 Redis Desktop Manager 或 Redis Commander,提供友好的用户界面和操作功能。

检查 Redis 是否成功启动的方法有:通过终端命令检查进程状态:Linux/Unix:ps -ef | grep redismacOS:ps aux | grep redis通过 Redis 客户机工具连接并 ping:redis-cli ping通过访问 Redis 网页界面:http://[Redis 实例 IP]:6379/info

Redis 延迟队列的实现采用有序集合,将任务以分数(时间戳)存储,定期检索已到期的任务,删除并执行。步骤如下:创建有序集合 delayed_queue,将任务以分数(时间戳)存储。检索已到期的任务,分数介于 0 到当前时间戳之间。删除已到期的任务。执行已到期的任务。

Redis 通过发布/订阅功能实现消息队列,包括以下步骤:发布消息:使用 PUBLISH 命令发布消息到信道(channel)。订阅信道:使用 SUBSCRIBE 命令订阅信道。接受消息:订阅客户端通过 SUBSCRIBE 通知接收消息。取消订阅:使用 UNSUBSCRIBE 命令取消订阅信道。优势:持久性、高吞吐量、扩展性。局限性:有限的保留时间、需要额外的处理、不保证消息顺序。

要查看 Redis 中的数据,有多种方法,包括:使用 Redis 命令行客户端(redis-cli)连接 Redis 服务器并执行命令,例如 GET、KEYS、LRANGE 和 HGETALL。使用 Redis 图形用户界面 (GUI),例如 RedisInsight、RedisCommander 和 Redis Desktop Manager,以可视化方式管理 Redis 实例和数据。使用编程语言(如 Python、Node.js 和 Java)及其相应的库(如 redis-py、redis

Redis 使用动态数据结构“Redis 对象”存储数据,包括字符串、散列、列表、集合和有序集合。这些对象使用 RDB 格式进行内部表示,并根据数据特性使用不同的编码类型进行优化。Redis 对象的生命周期受创建、获取、修改和删除操作的影响,并且可以设置过期时间(TTL),在 TTL 过后自动删除对象。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中