iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring+Redis集成怎么实现关系型数据库持久化
  • 471
分享到

Spring+Redis集成怎么实现关系型数据库持久化

2023-06-03 02:06:04 471人浏览 八月长安
摘要

这篇文章主要讲解了“spring+Redis集成怎么实现关系型数据库持久化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring+Redis集成怎么实现关系型数据库持久化”吧!Redis

这篇文章主要讲解了“spring+Redis集成怎么实现关系型数据库持久化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring+Redis集成怎么实现关系型数据库持久化”吧!

Redis是一个分布式的内存对象缓存系统,在我们的WEB应用上集成中,有的用作持久化框架的二级缓存,有的用作一个单独的缓存系统,两者最终目的都是为了减小数据库服务器的压力,如果将Redis用作持久化框架的二级缓存,则显得有点大才小用,所以,我们将它独立出来,也方便以后的Redis集群。 在Spring-Redis集成中,在Spring的官方网站上有个Project是Spring-data-redis,其中就有我们需要的东西! 我们需要的jar包有两个:         
1)spring-data-redis-1.1.1.RELEASE.jar        
2)需要redis的java客户端,比较流行的java客服端有Jedis、JRedis,这里我们用最popular的Jedis客户端,jedis-2.1.0.jar 

一、Spring的配置文件 官方的Jedis的Spring的配置文件如下: 如果采用模板的话,配置文件如下: 
在这里我们需要进行修改,自定义自己的Spring配置文件,而且我们采用连接池的方式,从连接池中获取连接,Spring配置文件如下: 

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" >         <!-- 最大活跃连接数 -->           
<property name="maxActive" value="20" />           <!-- 最大闲置数量 -->         
<property name="maxIdle" value="20" />           <!-- 最大等待时间 -->         
<property name="maxWait" value="1000" />          <!-- 调用borrow 一个对象方法时,是否检查其有效性 -->          
<property name="testOnBorrow" value="true"/>          <!-- 调用return 一个对象方法时,是否检查其有效性 -->        
<property name="testOnReturn" value="ture"/>    
</bean>
     
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">         
<!-- redis所在的ip -->         
<property name="hostName" value="192.168.1.200"/>         
<!-- redis的端口 -->         
<property name="port" value="6379"/>         
<!-- 是否启用连接池 -->         
<property name="usePool" value="true"/>         
<!-- 连接池的配置参考 -->         
<property name="poolConfig" ref="jedisPoolConfig" />     
</bean> 这样,在我们需要用到jedisConnectionFactory的类中,将jedisConnectionFactory注入进去,并从这个工厂获取JedisConnection对象。 


二、测试
1)实体类:     


public class Student implements Serializable {               
private static final long serialVersionUID = 3951779424645593223L;     private int id;         
private String name;          
private int age;     
public int getId()     {         
return id;     
}     
public void setId(int id)     {         
this.id = id;     
}     
public String getName()     {         
return name;     
}     
public void setName(String name)     {         
this.name = name;     
}     
public int getAge()     {         
return age;     
}     
public void setAge(int age)     {         
this.age = age;     
}     
@Override     
public String toString()     {         return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";     } 



2)用mybatis作为持久化框架,我们的Mapper是用注解形式写的:     
public interface StudentMapper{          
@Insert("insert into user(name,age) values(#{name},#{age})")     
@Options(useGeneratedKeys=true,keyProperty="id")     
int insert(Student student);     
@Select("select * from user where id = #{id}")     
Student queryById(@Param("id")int id); 



3)service的实现类     
public class StudentServiceImpl extends BaseService implements IStudentService{          
private StudentMapper studentMapper;          
private JedisConnectionFactory jedisConnectionFactory;     
@Override     
public void add(Student student){         
studentMapper = writablesqlSession.getMapper(StudentMapper.class);         
int id = studentMapper.insert(student);         
System.out.println(id);         
JedisConnection connection = jedisConnectionFactory.getConnection();         
Map<byte[],byte[]> map = new HashMap<byte[],byte[]>();         
map.put(SerializableUtil.serialize("name"), SerializableUtil.serialize(student.getName()));         
map.put(SerializableUtil.serialize("age"), SerializableUtil.serialize(student.getAge()));         
connection.hMSet(SerializableUtil.serialize(id), map);     
}
     
@Override     
public Student queryById(int id){         
JedisConnection connection = jedisConnectionFactory.getConnection();         
Map<byte[],byte[]> map = connection.hGetAll(SerializableUtil.serialize(id));         
if(map.size() > 0){             
System.out.println("----进缓存----");             
byte[] byteName = map.get(SerializableUtil.serialize("name"));             
byte[] byteAge = map.get(SerializableUtil.serialize("age"));             
String name = SerializableUtil.unserialize(byteName).toString();             
int age = Integer.valueOf(SerializableUtil.unserialize(byteAge).toString());             
System.out.println(name);             
System.out.println(age);             
Student student = new Student();             
student.setAge(age);             
student.setName(name);                          
return student;         
}else{             
System.out.println("----进数据库----");             
studentMapper = readonlySQLSession.getMapper(StudentMapper.class);             
return studentMapper.queryById(id);         
}     
}     
public void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory)     {         
this.jedisConnectionFactory = jedisConnectionFactory;     




注意:         
1)这里我用的数据库session是做了读写分离,并封装进BaseService中,在你做的时候,把它换成你自己的数据库Session就可以了!         


2)存数据:                     
这里我用的向缓存中存对象的方法是用HashMap存的,这个和普通的键值对存放的方式有不同。                     


(1)普通键值对存放方式:                         
*************************************                         
*        key              *       value       *                         
* ***********************************                         
*        key1            *       value1     *                         
*        key2            *       value2     *                         
*        key3            *       value3     *                         
* ***********************************                     
(2)hashmap存放方式                         
例如我们存放Student对象,id:1,name:student1,age:18,其存放方式为:                         
***********************************************************                         
*        key               *                          value                    *                         
***********************************************************                         
*          1                 *            key           *         value       *                         *                             
***************************************                         
*                             *            name        *        student   *                         
*                             *            age           *        18            *                         
***********************************************************                         
这样存的好处是键值对中的值也是采用键值对的方式进行存储,方便我们取值。         
3)取数据:                   
我们首先根据序列化之后的id,去缓存中取,也是采用hashmap这种方式去取值,同时判断这个map的大小,如果有值,则取value中的值进行反序列化,然后返回对象,如果没有,则进数据库中去取值,然后在放入缓存中! 
测试类: 
public class TestRedis{     
static IStudentService service;          
@BeforeClass     
public static void setUpBefor(){         
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext/applicationContext.xml");         
service = (IStudentService) context.getBean("studentService");     }          
@Test     
public void testAdd(){         
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext/applicationContext.xml");         
IStudentService service = (IStudentService) context.getBean("studentService");                  
Student student = new Student();         
student.setName("student1");         
student.setAge(29);                  
service.add(student);     
}          
@Test     
public void testQuery(){         
int id = 10;         
Student student = service.queryById(id);         
System.out.println(student);     


感谢各位的阅读,以上就是“Spring+Redis集成怎么实现关系型数据库持久化”的内容了,经过本文的学习后,相信大家对Spring+Redis集成怎么实现关系型数据库持久化这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Spring+Redis集成怎么实现关系型数据库持久化

本文链接: https://www.lsjlt.com/news/232197.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring+Redis集成怎么实现关系型数据库持久化
    这篇文章主要讲解了“Spring+Redis集成怎么实现关系型数据库持久化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring+Redis集成怎么实现关系型数据库持久化”吧!Redis...
    99+
    2023-06-03
  • Redis怎么实现数据持久化
    Redis 有两种数据持久化的方式:RDB持久化和AOF持久化。 RDB持久化: RDB持久化是通过定期将内存中的数据快照写入磁...
    99+
    2024-05-07
    Redis
  • Spring Data JPA怎么实现持久化存储数据到数据库
    这篇“Spring Data JPA怎么实现持久化存储数据到数据库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看...
    99+
    2023-06-30
  • redis怎么实现持久化
    本篇内容介绍了“redis怎么实现持久化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis持久化的方...
    99+
    2024-04-02
  • Redis持久化怎么实现
    本篇内容主要讲解“Redis持久化怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis持久化怎么实现”吧!Redis是一种高级key-value数据库。它跟memcached类似,不...
    99+
    2023-06-28
  • redis数据持久化的实现方法
    小编给大家分享一下redis数据持久化的实现方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!Redis实现数据持久化的两种实现方式:RDB:指定的时间间隔内保存数据快照AOF:先把命令追加到...
    99+
    2024-04-02
  • 怎么将redis中数据持久化
    Redis支持多种数据持久化方式,可以将数据持久化到磁盘以确保数据的安全性。以下是两种常用的持久化方式:1. RDB持久化(Redi...
    99+
    2023-08-30
    redis
  • 内存型数据库Redis持久化的示例分析
    这篇文章主要为大家展示了“内存型数据库Redis持久化的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“内存型数据库Redis持久化的示例分析”这篇文章吧...
    99+
    2024-04-02
  • 如何使用Redis实现数据持久化
    如何使用Redis实现数据持久化引言Redis是一种快速、高效的内存数据库,但默认情况下它的数据是存储在内存中的。这就意味着一旦服务器断电或重启,Redis中的数据将会丢失。为了解决这个问题,Redis提供了一些机制来实现数据的持久化。本文...
    99+
    2023-11-07
    数据 redis 持久化
  • 关于Redis数据库三种持久化方案介绍
    目录一、回顾Redis二、方案一:bgsave三、方案二:配置文件rdb四、方案三:aof总结一、回顾Redis 1、redis的特点 redis是一个内存中的数据结构存储系统。优点...
    99+
    2024-04-02
  • SpringBoot2如何实现集成JPA持久层框架、简化数据库操作
    这篇文章主要为大家展示了“SpringBoot2如何实现集成JPA持久层框架、简化数据库操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot2如何实现集成JPA持久层框架、简化...
    99+
    2023-06-02
  • Vuex数据持久化怎么实现
    小编给大家分享一下Vuex数据持久化怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是vuexvuex :是一个专为vue.js开发的状态管理器,采用集...
    99+
    2023-06-15
  • mongodb数据持久化怎么实现
    在MongoDB中,数据持久化是通过将数据写入硬盘来实现的。MongoDB会在后台自动将数据写入到磁盘中,以确保数据的持久性。 Mo...
    99+
    2023-10-21
    mongodb
  • mysql怎么实现数据持久化
    MySQL可以通过以下几种方式来实现数据持久化: 使用磁盘存储:MySQL将数据存储在硬盘上,包括数据文件、日志文件等。这样即使...
    99+
    2023-10-21
    mysql
  • android数据持久化怎么实现
    在Android中,有多种方式可以实现数据持久化,下面列举了几种常见的方法:1. Shared Preferences(共享首选项)...
    99+
    2023-10-21
    android
  • SpringBoot集成JPA持久层框架,简化数据库操作
    目录与SpringBoot2.0整合 1、核心依赖2、配置文件3、实体类对象4、JPA框架的用法5、封装一个服务层逻辑测试代码块 源代码地址 与Spri...
    99+
    2024-04-02
  • redis数据持久化丢失怎么办
    redis数据持久化丢失后,可以利用redis提供的工具重新加载持久化的文件恢复数据,redis开启持久化的方法:RDB的持久化:# 时间策略save 900 1save 300 10save 60 10000# 文件名称dbfilenam...
    99+
    2024-04-02
  • Redis持久化与序列化怎么实现
    Redis持久化和序列化是两个不同的概念,它们分别用于将数据保存到磁盘上以及将数据转换成字节流进行传输。 Redis持久化可以通过两...
    99+
    2024-04-29
    Redis
  • mysql表数据持久化怎么实现
    在MySQL中,数据持久化是通过将数据存储在磁盘上的表中来实现的。以下是一些实现数据持久化的方法: 创建表:首先需要创建一个表来...
    99+
    2023-10-26
    mysql
  • Couchbase中怎么实现数据持久化
    在Couchbase中,数据持久化可以通过以下几种方式实现: 使用持久化存储引擎:Couchbase支持使用不同的持久化存储引擎...
    99+
    2024-03-08
    Couchbase
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作