Spring:与Redis的集成

  一个月没写过博客了,一直想记录一下之前学习的Redis的有关知识,但是因为四月太过于慵懒和忙碌,所以一直没有什么机会,今天就来讲讲,如何使用Spring当中的Spring-data-redis去与Redis这个Nosql数据库集成吧。

  首先先简单讲讲我理解的Nosql数据库吧,如果存在错误,还请一定联系本人指出,因为自己也是摸索阶段当中,希望能有人多多进行交流。所谓的Nosql中文全称为:非关系型数据库,即它不像Mysql那样关系型数据库,它存储的内容之间,可以是没有关联关系的。Mysql一张表存储的东西,就必须是属于这一张表的实例,且结构和字段是在表设计之初就设定好的,而Nosql的“表”(其实Nosql当中没有表这个概念)是可以存储各种各样的东西的,可以是一个链表,可以是一个hashmap,或者是其他形式的集合。而在Nosql当中的Redis,是一种基于内存的Nosql数据库,即其在启动的时候,可以把所有redis存储的东西都加载到内存当中,它是以Key-value的形式进行存储的,并且查询也是通过其Key进行的。它解决了大规模数据集合多重数据种类带来的挑战,基于内存的Nosql在查询方面相比传统的关系型数据库,更是它的一大优势。

  对Redis大概有了一定的了解和定位之后,接下来我们进入正题,在本文当中,主要讲解的是通过Spring-Date-Redis(SDR)来对Redis进行一些增删改查的操作,其中包括普通的字符串的增删改查,以及自定义对象的增删改查,即基于Spring的Redis Nosql数据库的Dao层实现是本文要讲解的核心内容

  在讲解之前,首先我们要搭建好我们的工程,在这里与之前不同,本人这次采用的是maven工程进行工程搭建,在maven工程里头,可以通过对工程当中的pom.xml引入依赖,而对所依赖的jar包进行注入,包括自动从maven的主仓库下载到本地仓库当中,并且自动在工程当中建立好相应jar包的依赖路径,开发者不在需要关注所使用的jar在哪下载,并且有没有下载完全等问题,十分便利。这里不再对maven工程的使用进行赘述了,如果有不会的同学,可以联系本人或者自行查阅java maven工程的使用,再或者通过直接手动下载所需要的jar包依赖,手动引入jar建立路径的方式进行工程搭建也可以。而使用的测试框架,是junit 4.12进行的,该框架可对无参数的函数进行单元测试,这里也不再对该框架进行过多的介绍了,不了解的同学,可以自行查阅。由于本人是基于maven工程的,这里直接上依赖的pom.xml了。

<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>wellhold.bjtu</groupId><artifactId>Spring_redis</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>Spring_redis</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>4.2.5.RELEASE</spring.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><!--spring单元测试依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency><!-- Redis 相关依赖 --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.6.1.RELEASE</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.7.3</version></dependency><!-- annotation依赖 --><dependency><groupId>javax.annotation</groupId><artifactId>javax.annotation-api</artifactId><version>1.2</version></dependency></dependencies>
</project>

配置好依赖的jar包之后,Redis和mysql一样,也需要对数据库的相关参数进行配置,包括连接的主机地址,端口号等参数。我们通过编写一个.properties文件来进行相关参数的配置,redis.properties如下:

#redis中心
#绑定的主机地址
redis.host=127.0.0.1
#指定Redis监听端口,默认端口为6379
redis.port=6379
#授权密码(可以不使用)
redis.password=bjtu
#最大空闲数:空闲链接数大于maxIdle时,将进行回收
redis.maxIdle=100
#最大连接数:能够同时建立的“最大链接个数”
redis.maxTotal=200
#最大等待时间:单位ms
redis.maxWait=1000
#使用连接时,检测连接是否成功 
redis.testOnBorrow=false
#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
redis.timeout=10000

之后就是对我们的Spring进行配置了,通过我们的beans.xml进行配置,如下:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"><!-- 自动扫描注解的bean --><context:component-scan base-package="wellhold.bjtu.Spring_redis" /><context:annotation-config /><!-- 读取redis.properties --><context:property-placeholder location="classpath:redis.properties"/>  <!-- jedis连接池配置 --><bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.maxIdle}" /><property name="maxWaitMillis" value="${redis.maxWait}" /><property name="testOnBorrow" value="${redis.testOnBorrow}" /><property name="maxTotal" value="${redis.maxTotal}" /> <property name="blockWhenExhausted" value="true" /> </bean> <!-- jedis连接工程的配置 --><bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis.host}" /><property name="port" value="${redis.port}" /><property name="poolConfig" ref="jedisPoolConfig" /> <property name="password" value="${redis.password}" /><property name="usePool" value="true"/> <property name="timeout" value="${redis.timeout}"></property></bean> <!-- redisTemplate配置 --><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">   <property name="connectionFactory"   ref="jedisConnectionFactory" />  <property name="keySerializer">   <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />   </property>      <property name="valueSerializer">   <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />   </property>   <property name="hashKeySerializer">     <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>     </property>   <property name="hashValueSerializer">   <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>     </property> </bean> </beans>

简单的说一下在这个beans.xml当中的一些内容,首先,什么是jedis?从名字可以看出来jedis可以看成是java to redis的简写,是一个别人封装好的java与redis联用的jar包,可以利用别人封装好的jedis直接与redis联通,而jedis pool即是通过连接池的方式进行连接,在这里可以简单的看做是C3P0与Mysql之间的关系。而Spring-data-Redis,则是在Jedis再上一层的封装,这一层封装使得Spring可以直接与Jedis集成,且可通过Spring里头的RedisTemplate对象对Redis进行操作,使得用户操作起来更加简便。而在Serializer则是序列化类,是可以讲对象进行序列化的工具类,所谓的序列化就是将一个对象转换为二进制的数据流,这样就可以进行传输,或者保存到文件中。如果一个类的对象要想实现序列化,就必须实现serializable接口,在此接口中没有任何的方法,此接口只是作为一个标识,表示本类的对象具备了序列化的能力而已。

  完成工程各个框架和组件的配置之后,我们开始进行逻辑业务的实现。

 

转载于:https://www.cnblogs.com/WellHold/p/6796298.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中如何将字典直接变成二维数组_python基础知识(列表、字典、二维数组)...

记得改参数&#xff01;&#xff01;&#xff01;(1)简述列表(list)结构的特点。List(列表)List的元素以线性方式存储&#xff0c;可以存放重复对象&#xff0c;List主要有以下两个实现类&#xff1a;ArrayList : 长度可变的数组&#xff0c;可以对元素进行随机的访问&#xff…

内置对象和自定义对象的原型链

内置对象的原型链 新增属性 Object.prototype.mytest function() {alert("123");}var o new Object();o.mytest();重写属性 Object.prototype.toString function(){alert("破话之王");}o.toString();转载于:https://www.cnblogs.com/Abner5/p/6798630.h…

mysql将不同行数结果合并成多列_将多行合并到mysql中的一行和多列

我正在MYSQL工作,需要将用户数据提取到一个视图中.我将使用电子邮件客户端中的数据,因此我无法在应用程序层中执行此操作.问题是用户的每个数据字段都包含在单独的行中(这是Wordpress如何设置数据结构).例如,wp_usermeta为每个用户提供了多行数据,如下所示&#xff1a;user_id …

一些JavaScript基本函数

1.document.write(”");为 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4.一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document) 5.得到表单中元素的名称和值:document.getElementById(”表单…

mysql动态代理_超全MyBatis动态代理详解(绝对干货)

前言假如有人问你这么几个问题&#xff0c;看能不能答上来Mybatis Mapper 接口没有实现类&#xff0c;怎么实现的动态代理JDK 动态代理为什么不能对类进行代理(充话费送的问题)抽象类可不可以进行 JDK 动态代理(附加问题)答不上来的铁汁&#xff0c;证明 Proxy、Mybatis 源码还…

Linux学习之SAMBA共享(无密码)

一、服务器配置 安装&#xff1a;yum install -y samba 更改要共享的path权限&#xff1a;chmod 777 /mnt/samba/ 先备份smb.conf配置文件&#xff1a;cp /etc/samba/smb.conf /etc/samba/smb.conf.bak 更改配置&#xff1a;vim /etc/samba/smb.conf security sha…

getline()函数

本文转自&#xff1a;http://blog.sina.com.cn/s/blog_60263c1c0101ck25.html学习C的同学可能都会遇到一个getline()函数&#xff0c;譬如在Cpremer中&#xff0c;标准string类型第二小节就是“用getline读取整行文本”。书上给的程序如下&#xff1a;int main(){string line:w…

廖雪峰讲python高阶函数求导公式_高阶函数 - 廖雪峰 Python 2.7 中文教程

高阶函数英文叫Higher-order function。什么是高阶函数&#xff1f;我们以实际代码为例子&#xff0c;一步一步深入概念。变量可以指向函数以Python内置的求绝对值的函数abs()为例&#xff0c;调用该函数用以下代码&#xff1a;>>> abs(-10)10但是&#xff0c;如果只写…

.ai域名注册已经极具投资价值进入火爆期

最近G.ai以六位数的天价被国内域名收藏家收入囊中&#xff0c;间接说明了.ai域名的价值不断攀升&#xff0c;自从2016年AlphaGo胜利以来&#xff0c;人工智能几乎成为人人谈资&#xff0c;而由于.com域名被挖掘待尽&#xff0c;一些聪明的人工智能创业者&#xff0c;避开了com域…

软件工程概论---典型用户和用户场景描述

二手书交易平台典型用户——在校学生 名字&#xff1a;小张 年龄&#xff1a;19 收入&#xff1a;学生 代表的用户在市场上的比例和重要性&#xff1a;主要代表广大的大学生&#xff0c;大学生应该是我们产品的最主要用户。 使用这个软件的典型场景&#xff1a;大学生苦于自己的…

python pygame鼠标点击_Python中pygame的mouse鼠标事件用法实例

本文实例讲述了Python中pygame的mouse鼠标事件用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;pygame.mouse提供了一些方法获取鼠标设备当前的状态pygame.mouse.get_pressed - get the state of the mouse buttons get the state of the mouse buttonspygame.mous…

题目1089:数字反转(简单数字转换)

题目链接&#xff1a;http://ac.jobdu.com/problem.php?pid1089 详解链接&#xff1a;https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码&#xff1a; // // 1089 数字反转.cpp // Jobdu // // Created by PengFei_Zheng on 04/05/2017. // Copyright © 2017 Pe…

SpringSecurity自定义登陆页面和跳转页面

如果我们不用form-login说明登陆界面&#xff0c;springsecurity框架将自动为我们生成登陆界面 现在我们不想用自动生成的登陆界面了&#xff0c;而想使用自定义的漂亮的登陆界面 则需要使用<security:form-login/>标签 login-page:指定登陆页面 login-process-url:表单提…

java 建模_Java设计模式菜鸟系列(两)建模与观察者模式的实现

观察者(Observer)模式定义&#xff1a;在对象之间定义了一对多的依赖关系&#xff0c;这样一来。当一个对象改变状态时&#xff0c;依赖它的对象都会收到通知并自己主动跟新。Java已经提供了对观察者Observer模式的默认实现&#xff0c;Java对观察者模式的支持主要体如今Observ…

php多条件查询

需要查询的表格 代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <…

Airbert: In-domain Pretraining for Vision-and-Language Navigation

题目&#xff1a;Airbert&#xff1a;视觉和语言导航的域内预训练 摘要 为了解决VLN数据集稀缺的问题&#xff0c;本文创建了一个数据集BNB。我们首先从在线租赁市场的数十万个列表中收集图像标题 (IC) 对。接下来&#xff0c;我们使用 IC 对提出自动策略来生成数百万个 VLN …

os的java版本_如何在OS X上设置或更改默认的Java(JDK)版本?

首次运行/usr/libexec/java_home -V将输出如下内容&#xff1a;Matching Java Virtual Machines (3):1.8.0_05, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home1.6.0_65-b14-462, x86_64: "Java SE 6" /System…

Java占位符替换工具类

import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 配置文件或模板中的占位符替换工具类 * Date: 15-5-8 * Time: 下午4:12 */ public class PlaceholderUtils { private static final Logger logger L…

java switch 输入2_Java switch语句第二种用法

Java switch语句第二种用法package cn.geekeryi;public class SwitchTest02 {public static void main(String[] args) {short month 1;if (month1||month2||month3){System.out.println("这是一季度");}else if (month4||month5||month6){System.out.println("…

java手游 《剑心》_java

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼package txt2;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.*;public class MyPanel…