框架是SSM的,怎么用Redis作为分布式缓存框架

越努力,越幸运!
ssm框架学习---mybatis中缓存
缓存的目的:将部分数据缓存到内存中,提高系统的性能
一级缓存:它是sqlsession级别的,每个sqlsession对象内部都有一个hashmap用来存放查询的数据,mybatis中默认时开启的
(1)当执行查询时,首先如果是第一次查询,会从数据库中查询并将结果缓存到一级缓存中,以后再查相同的sql就不再发出sql语句,而是直接从缓存中拿
(2)如果在两次相同的查询之间,存在inset,update,delete的commit操作,它会清空缓存
二级缓存: 它是mapper级别的,当然如果两个mapper.xml文件对应同一个命名空间,它们就共用同一个二级缓存,确切说二级缓存是命名空间级别的,
(1)当一个sqlsession查询出数据会缓存到二级缓存中,其它的sqlsession执行相同的查询可以从缓存中读取
(2)其它的sqlsession执行了插入、删除、修改等操作,会清空二级缓存
(1)首先需要在sqlmapconfig.xml中设置开启二级缓存
(2)需要在mapper.xml中配置缓存选项
(3)对于缓存的对象需要实现序列化接口,因为二级缓存不一定在内存中可能其它地方如磁盘或者远程服务器上
mybatis和其它分布式缓存框架的整合:
mybatis提供了一个cache接口,实现cache接口即可,默认提供的是这个实现类
PerpetualCache
(1)在mapper中cache标签的type为你所想要使用的实现类,并加入包和对应的第三方的缓存的配置文件等
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!&&原精ssm使用redis做为spring+spring MVC+mybatis整合的二级缓存开发环境:idea+java8+tomcat7+mysqlmaven版本初学者对ssm整合也许会感觉比较麻烦,这里我对配置进行了整合,大家可以放心的拿来使用。另外刚开始学的可能对redis比较陌生,说白了,它就是一个key-value存储系统。项目代码附带了redis压缩包,解压后直接cmd指令开启(压缩包里面有说明)。运行项目先启动redis。另外echarts也加了一个简单的示例,下面是一些配置文件applicationContext-dao.xmlapplicationContext-service.xmlapplicationContext-trans.xml普通版:正确,示意图:第一次缓存为空-数据库查询,第二次从缓存获取maven版:正确 ,示意图大致也是一样的&运行截图由编辑于 21:57:07猜你喜欢8个牛币请下载代码后再发表评论//novel/novel/.idea/novel/.idea/artifacts/novel/.idea/artifacts/novel_war_exploded.xml/novel/.idea/compiler.xml/novel/.idea/copyright/novel/.idea/copyright/profiles_settings.xml/novel/.idea/libraries/novel/.idea/libraries/aopalliance_.xml/novel/.idea/libraries/servlet_api.xml/novel/src/novel/src/com/novel/src/com/controller/novel/src/com/jediscomp/novel/src/com/jediscomp/impl/novel/src/com/mapper精精精精原精精原原原原精精原精原相关分享精原精精原原精原精精原原最近下载&LV8&LV11&LV4&LV21&LV4&LV22&LV8&LV10&LV5&LV12最近浏览&LV1&LV4&LV8&LV4&LV6&LV11&LV1&LV1&LV4&LV5扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友SSM框架(二级缓存)集成Redis单机模式及哨兵模式
项目整体框架: SpringMVC + Spring+MyBatis +Redis(缓存部署在Linux虚拟机)。数据库:mysql1、整体架构参考Ehcache实现MyBatis二级缓存代码(Maven引用对应jar查阅)使用Spring管理Redis连接池模仿EhcacheCache,实现RedisCache2、pom.xml中加入Maven依赖&!--引入项目依赖的jar包 --&
&!-- SpringMVC、Spring --&
&!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --&
&dependencies&
&!-- mybatis 二级缓存 --&
&dependency&
&groupId&org.mybatis&/groupId&
&artifactId&mybatis-ehcache&/artifactId&
&version&1.0.0&/version&
&/dependency&
&!-- spring集成redis --&
&dependency&
&groupId&org.springframework.data&/groupId&
&artifactId&spring-data-redis&/artifactId&
&version&1.8.6.RELEASE&/version&
&/dependency&
&dependency&
&groupId&org.apache.commons&/groupId&
&artifactId&commons-lang3&/artifactId&
&version&3.4&/version&
&/dependency&
&dependency&
&groupId&redis.clients&/groupId&
&artifactId&jedis&/artifactId&
&version&2.9.0&/version&
&/dependency&
&!-- spring session 做session共享部分及单点登录问题 --&
&!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session --&
&dependency&
&groupId&org.springframework.session&/groupId&
&artifactId&spring-session&/artifactId&
&version&1.3.1.RELEASE&/version&
&/dependency&
&!--引入pageHelper分页插件 --&
&dependency&
&groupId&com.github.pagehelper&/groupId&
&artifactId&pagehelper&/artifactId&
&version&5.0.0&/version&
&/dependency&
&!-- MBG --&
&!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --&
&dependency&
&groupId&org.mybatis.generator&/groupId&
&artifactId&mybatis-generator-core&/artifactId&
&version&1.3.5&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-webmvc&/artifactId&
&version&4.3.7.RELEASE&/version&
&/dependency&
&!-- 返回json字符串的支持 --&
&!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --&
&dependency&
&groupId&com.fasterxml.jackson.core&/groupId&
&artifactId&jackson-databind&/artifactId&
&version&2.8.8&/version&
&/dependency&
&!--JSR303数据校验支持;tomcat7及以上的服务器,
tomcat7以下的服务器:el表达式。额外给服务器的lib包中替换新的标准的el
&!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator --&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-validator&/artifactId&
&version&5.4.1.Final&/version&
&/dependency&
&!-- Spring-Jdbc --&
&!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-jdbc&/artifactId&
&version&4.3.7.RELEASE&/version&
&/dependency&
&!--Spring-test --&
&!-- https://mvnrepository.com/artifact/org.springframework/spring-test --&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-test&/artifactId&
&version&4.3.7.RELEASE&/version&
&/dependency&
&!-- Spring面向切面编程 --&
&!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-aspects&/artifactId&
&version&4.3.7.RELEASE&/version&
&/dependency&
&!--MyBatis --&
&!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --&
&dependency&
&groupId&org.mybatis&/groupId&
&artifactId&mybatis&/artifactId&
&version&3.4.2&/version&
&/dependency&
&!-- MyBatis整合Spring的适配包 --&
&!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --&
&dependency&
&groupId&org.mybatis&/groupId&
&artifactId&mybatis-spring&/artifactId&
&version&1.3.1&/version&
&/dependency&
&!-- 数据库连接池、驱动 --&
&!-- https://mvnrepository.com/artifact/c3p0/c3p0 --&
&dependency&
&groupId&c3p0&/groupId&
&artifactId&c3p0&/artifactId&
&version&0.9.1&/version&
&/dependency&
&!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --&
&dependency&
&groupId&mysql&/groupId&
&artifactId&mysql-connector-java&/artifactId&
&version&5.1.41&/version&
&/dependency&
&!-- (jstl,servlet-api,junit) --&
&!-- https://mvnrepository.com/artifact/jstl/jstl --&
&dependency&
&groupId&jstl&/groupId&
&artifactId&jstl&/artifactId&
&version&1.2&/version&
&/dependency&
&!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --&
&dependency&
&groupId&javax.servlet&/groupId&
&artifactId&javax.servlet-api&/artifactId&
&version&3.0.1&/version&
&scope&provided&/scope&
&/dependency&
&!-- 日志LOG4J --&
&!-- https://mvnrepository.com/artifact/log4j/log4j --&
&dependency&
&groupId&log4j&/groupId&
&artifactId&log4j&/artifactId&
&version&1.2.17&/version&
&/dependency&
&!--解决Spring使用slf4j输出日志与log4j冲突的问题--&
&dependency&
&groupId&org.slf4j&/groupId&
&artifactId&slf4j-log4j12&/artifactId&
&version&1.7.13&/version&
&/dependency&
&!-- junit --&
&!-- https://mvnrepository.com/artifact/junit/junit --&
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&4.12&/version&
&/dependency&
&/dependencies&3、Linux虚拟机Redis部署。3.1.下载解压redis(这里使用redis3.2.6的版本):
cd /usr/software
wget http://download.redis.io/releases/redis-3.2.6.tar.gz
tar -zxvf /redis-3.2.6.tar.gz3.2进行编译安装 cd redis-3.2.6
make && make install3.3进行节点创建,这里为了目录结构清晰,创建一个文件夹进行集群文件的统一存放,并复制配置文件到相应的三个文件夹中 cd /usr/software
mkdir redis_cluster //创建集群目录
cd redis_cluster
//分别代表三个节点
其对应端口 81
//创建7000节点为例,拷贝到7000目录
cp /usr/software/redis-3.2.6/redis.conf
./redis_cluster/6379/
//拷贝到7001目录
cp /usr/software/redis-3.2.6/redis.conf
./redis_cluster/6380/
//拷贝到7002目录
cp /usr/software/redis-3.2.6/redis.conf
./redis_cluster/6381/3.4.对应节点配置文件的修改以及sentinel.conf文件的创建配置6379节点文件的修改:redis.conf配置文件:daemonize yespidfile "/var/run/redis6379.pid"port 6379bind 0.0.0.0logfile "6379.log"dbfilename "dump6379.rdb"sentinel.conf的创建和配置:port 26379sentinel monitor mymaster192.168.108.128 63796380节点文件的修改:redis.conf配置文件:daemonize yespidfile "/var/run/redis6380.pid"port6380bind 0.0.0.0logfile "6380.log"dbfilename "dump6380.rdb"slaveof 192.168.108.128 6380(映射到主服务器上)sentinel.conf的创建和配置:port 26380sentinel monitor mymaster(主机名) 192.168.108.128 63806381节点文件的修改:redis.conf配置文件:daemonize yespidfile "/var/run/redis6381.pid"port6381bind 0.0.0.0logfile "6381.log"dbfilename "dump7002.rdb"slaveof 192.168.108.128 6381(映射到主服务器上)sentinel.conf的创建和配置:port 26381sentinel monitor mymaster192.168.108.128 63814.进行集群启动验证分别在相应的文件夹进行启动:redis-server redis.conf 并分别启动哨兵监控:redis-sentinel sentinel.conf 以上是保证了linux下redis哨兵模式的部署成功,接下来是如何及集成到现有的SSM项目框架中web.xml配置&?xml version="1.0" encoding="UTF-8"?&
&web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"&
&!-- spring 配置文件加载 --&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:applicationContext.xml,classpath:spring-jedis-2.xml&/param-value&
&/context-param&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&&!--springmvc 配置文件加载 这里我用的是默认位置--&
&servlet-name&dispatcherServlet&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&dispatcherServlet&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
&!-- 字符编码集过滤 --&
&filter-name&CharacterEncodingFilter&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&utf-8&/param-value&
&/init-param&
&init-param&
&param-name&forceRequestEncoding&/param-name&
&param-value&true&/param-value&
&/init-param&
&init-param&
&param-name&forceResponseEncoding&/param-name&
&param-value&true&/param-value&
&/init-param&
&filter-mapping&
&filter-name&CharacterEncodingFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&filter-name&HiddenHttpMethodFilter&/filter-name&
&filter-class&org.springframework.web.filter.HiddenHttpMethodFilter&/filter-class&
&filter-mapping&
&filter-name&HiddenHttpMethodFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&!-- rest风格 处理 如果不采用restful的可以去掉--&
&filter-name&HttpPutFormContentFilter&/filter-name&
&filter-class&org.springframework.web.filter.HttpPutFormContentFilter&/filter-class&
&filter-mapping&
&filter-name&HttpPutFormContentFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&!-- spring
做session共享 处理单点登录等--&
&filter-name&springSessionRepositoryFilter&/filter-name&
&filter-class&org.springframework.web.filter.DelegatingFilterProxy&/filter-class&
&filter-mapping&
&filter-name&springSessionRepositoryFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&/web-app&dispatcherServlet-servlet.xml配置信息:&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"&
&!--SpringMVC的配置文件,包含网站跳转逻辑的控制,配置
&context:component-scan base-package="com.atguigu" use-default-filters="false"&
&!--只扫描控制器。
&context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/&
&/context:component-scan&
&!--配置视图解析器,方便页面返回
&bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="prefix" value="/WEB-INF/views/"&&/property&
&property name="suffix" value=".jsp"&&/property&
&!--两个标准配置
&!-- 将springmvc不能处理的请求交给tomcat --&
&mvc:default-servlet-handler/&
&!-- 能支持springmvc更高级的一些功能,JSR303校验,快捷的ajax...映射动态请求 --&
&mvc:annotation-driven/&
&/beans&applicationContext.xml配置信息:&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"&
&context:component-scan base-package="com.atguigu"&
&context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" /&
&/context:component-scan&
&!-- Spring的配置文件,这里主要配置和业务逻辑有关的 --&
&!--=================== 数据源,事务控制,xxx ================--&
&context:property-placeholder location="classpath:dbconfig.properties" /&
&bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"&
&property name="jdbcUrl" value="${jdbc.jdbcUrl}"&&/property&
&property name="driverClass" value="${jdbc.driverClass}"&&/property&
&property name="user" value="${jdbc.user}"&&/property&
&property name="password" value="${jdbc.password}"&&/property&
&!--================== 配置和MyBatis的整合=============== --&
&bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&
&!-- 指定mybatis全局配置文件的位置 --&
&property name="configLocation" value="classpath:mybatis-config.xml"&&/property&
&property name="dataSource" ref="pooledDataSource"&&/property&
&!-- 指定mybatis,mapper文件的位置 --&
&property name="mapperLocations" value="classpath:mapper/*.xml"&&/property&
&!-- 配置扫描器,将mybatis接口的实现加入到ioc容器中 --&
&bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"&
&!--扫描所有dao接口的实现,加入到ioc容器中 --&
&property name="basePackage" value="com.atguigu.crud.dao"&&/property&
&!-- 配置一个可以执行批量的sqlSession --&
&bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"&
&constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"&&/constructor-arg&
&constructor-arg name="executorType" value="BATCH"&&/constructor-arg&
&!--=============================================
&!-- ===============事务控制的配置 ================--&
&bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&
&!--控制住数据源
&property name="dataSource" ref="pooledDataSource"&&/property&
&!--配置事务增强,事务如何切入
&tx:advice id="txAdvice" transaction-manager="transactionManager"&
&tx:attributes&
&!-- 所有方法都是事务方法 --&
&tx:method name="*"/&
&!--以get开始的所有方法
&tx:method name="get*" read-only="true"/&
&/tx:attributes&
&/tx:advice&
&!--开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式)
&aop:config&
&!-- 切入点表达式 --&
&aop:pointcut expression="execution(* com.atguigu.crud.service..*(..))" id="txPoint"/&
&!-- 配置事务增强 --&
&aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/&
&/aop:config&
&!-- Spring配置文件的核心点(数据源、与mybatis的整合,事务控制) --&
&/beans&mybatis-config.xml配置信息:&?xml version="1.0" encoding="UTF-8"?&
&!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"&
&configuration&
&settings&
&setting name="mapUnderscoreToCamelCase" value="true"/&
&!-- 全局映射器启用缓存 --&
&setting name="cacheEnabled" value="true" /&
&!-- 查询时,关闭关联对象即时加载以提高性能 --&
&setting name="lazyLoadingEnabled" value="true" /&
&!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指
定),不会加载关联表的所有字段,以提高性能 --&
&setting name="aggressiveLazyLoading" value="false" /&
&!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --&
&setting name="multipleResultSetsEnabled" value="true" /&
&!-- 允许使用列标签代替列名 --&
&setting name="useColumnLabel" value="true" /&
&!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 --&
&setting name="useGeneratedKeys" value="true" /&
&!-- 给予被嵌套的resultMap以字段-属性的映射支持 --&
&setting name="autoMappingBehavior" value="FULL" /&
&!-- 对于批量更新操作缓存SQL以提高性能
&setting name="defaultExecutorType" value="BATCH" /&
&!-- 数据库超过25000秒仍未响应则超时 --&
&setting name="defaultStatementTimeout" value="25000" /&
&/settings&
&!-- 别名 --&
&typeAliases&
&package name="com.atguigu.crud.bean"/&
&/typeAliases&
&/configuration&以上是ssm整合的配置信息,下面是集成redis的整合spring-jedis-2.xml(这里我做了两种的测试,为了配置文件区别,在后面进行了版本识别)&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd"&
&!-- session共享部分 --&
&bean id="redisHttpSessionConfiguration"
class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"&
&property name="maxInactiveIntervalInSeconds" value="600"/&
&!-- 连接池基本参数配置,类似数据库连接池
&context:property-placeholder location="classpath*:redis.properties" /&
&bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"&
&property name="maxInactiveIntervalInSeconds" value="1800"&&/property&
&!-- 这里为了方便没有引入外部properties文件,实际开发中请注意 --&
&bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"&
&property name="maxIdle" value="2000" /&
&property name="maxTotal" value="20000" /&
&property name="minEvictableIdleTimeMillis" value="300000"&&/property&
&property name="numTestsPerEvictionRun" value="3"&&/property&
&property name="timeBetweenEvictionRunsMillis" value="60000"&&/property&
&property name="maxWaitMillis" value="20000" /&
&property name="testOnBorrow" value="false" /&
&!-- redis 哨兵模式的配置--&
&bean id="redisSentinelConfiguration"
class="org.springframework.data.redis.connection.RedisSentinelConfiguration"&
&!-- master命名配置 需要与服务器sentinel.conf中master命名相同 --&
&property name="master"&
&bean class="org.springframework.data.redis.connection.RedisNode"&
&property name="name" value="mymaster"&&/property&
&/property&
&property name="sentinels"&
&bean class="org.springframework.data.redis.connection.RedisNode"&
&constructor-arg name="host" value="192.168.108.129"&&/constructor-arg&
&constructor-arg name="port" value="26379"&&/constructor-arg&
&bean class="org.springframework.data.redis.connection.RedisNode"&
&constructor-arg name="host" value="192.168.108.129"&&/constructor-arg&
&constructor-arg name="port" value="26380"&&/constructor-arg&
&bean class="org.springframework.data.redis.connection.RedisNode"&
&constructor-arg name="host" value="192.168.108.129"&&/constructor-arg&
&constructor-arg name="port" value="26381"&&/constructor-arg&
&/property&
&bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"&
这里面是单点模式的配置
&property name="hostName" value="192.168.108.128" /&
&property name="port" value="6380" /& --&
&constructor-arg name="sentinelConfig" ref="redisSentinelConfiguration"&&/constructor-arg&
&constructor-arg name="poolConfig" ref="jedisPoolConfig"&&/constructor-arg&
&!-- 调用连接池工厂配置 --&
&bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"&
&property name="connectionFactory" ref="jedisConnectionFactory"&&/property&
如果不配置Serializer,那么存储的时候智能使用String,如果用User类型存储,那么会提示错误User can't cast
to String!!!
&property name="keySerializer"&
class="org.springframework.data.redis.serializer.StringRedisSerializer" /&
&/property&
&property name="valueSerializer"&
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&
&!-- 使用中间类解决RedisCache.jedisConnectionFactory的静态注入,从而使MyBatis实现第三方缓存 --&
&bean id="redisCacheTransfer" class="com.atguigu.crud.cache.RedisCacheTransfer"&
&property name="jedisConnectionFactory" ref="jedisConnectionFactory"/&
&!-- //End 单机版Redis集成 --&
&!-- Redis缓存管理对象 --&
&bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"&
&constructor-arg index="0" ref="redisTemplate" /&
&/beans&以下上java代码RedisCache2.javapackage com.atguigu.crud.
import java.util.concurrent.locks.ReadWriteL
import java.util.concurrent.locks.ReentrantReadWriteL
import org.apache.ibatis.cache.C
import org.slf4j.L
import org.slf4j.LoggerF
import org.springframework.data.redis.connection.RedisC
import org.springframework.data.redis.connection.jedis.JedisC
import org.springframework.data.redis.connection.jedis.JedisConnectionF
import org.springframework.data.redis.serializer.JdkSerializationRedisS
import org.springframework.data.redis.serializer.RedisS
public class RedisCache2 implements Cache {
private static JedisConnectionFactory jedisConnectionF
private final S
private static final Logger LOGGER = LoggerFactory.getLogger(RedisCache2.class);
private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
public RedisCache2(final String id){
if (id == null) {
throw new IllegalArgumentException("cache instances require an ID");
public void clear() {
RedisConnection connection =
connection = jedisConnectionFactory.getConnection();
connection.flushDb();
connection.flushAll();
} catch (Exception e) {
e.printStackTrace();
if (connection != null) {
connection.close();
public String getId() {
return this.
public Object getObject(Object key) {
LOGGER.info("hahahah");
System.out.println("查询--------------------------------key:"+key);
Object result =
RedisConnection connection =
connection = jedisConnectionFactory.getConnection();
RedisSerializer&Object& serializer = new JdkSerializationRedisSerializer();
result = serializer.deserialize(connection.get(serializer.serialize(key)));
} catch (Exception e) {
e.printStackTrace();
if (connection != null) {
connection.close();
public ReadWriteLock getReadWriteLock() {
return this.readWriteL
public int getSize() {
int result = 0;
RedisConnection connection =
connection = jedisConnectionFactory.getConnection();
result = Integer.valueOf(connection.dbSize().toString());
} catch (Exception e) {
e.printStackTrace();
if (connection != null) {
connection.close();
public void putObject(Object key, Object value) {
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&key:"+key);
RedisConnection connection =
connection = jedisConnectionFactory.getConnection();
RedisSerializer&Object& serializer = new JdkSerializationRedisSerializer();
System.out.println("**"+serializer.serialize(key));
connection.set(serializer.serialize(key), serializer.serialize(value));
} catch (Exception e) {
e.printStackTrace();
if (connection != null) {
connection.close();
public Object removeObject(Object key) {
RedisConnection connection =
Object result =
connection = jedisConnectionFactory.getConnection();
RedisSerializer&Object& serializer = new JdkSerializationRedisSerializer();
result = connection.expireAt(serializer.serialize(key), 0);
} catch (Exception e) {
e.printStackTrace();
if (connection != null) {
connection.close();
public static JedisConnectionFactory getJedisConnectionFactory() {
return jedisConnectionF
public static void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {
RedisCache2.jedisConnectionFactory = jedisConnectionF
}RedisCacheTransfer.javapackage com.atguigu.crud.
import org.springframework.data.redis.connection.jedis.JedisConnectionF
public class RedisCacheTransfer {
public void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {
RedisCache2.setJedisConnectionFactory(jedisConnectionFactory);
}User.javapackage com.atguigu.crud.
import java.io.S
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private String userN
public Integer getId() {
public void setId(Integer id) {
public String getUserName() {
return userN
public void setUserName(String userName) {
this.userName = userN
}UserDao.java(这里本人太懒 没有写太多方法)package com.atguigu.crud.
import com.atguigu.crud.bean.U
public interface UserDao {
public User queryByPK(Integer id);
UserMapper.xml&?xml version="1.0" encoding="UTF-8"?&
&!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"&
&mapper namespace="com.atguigu.crud.dao.UserDao"&
&cache eviction="LRU" type="com.atguigu.crud.cache.RedisCache2" /&
&select id="queryByPK" resultType="User"&
select id,name userName from user where id = #{id}
&/mapper&IUserService.javapackage com.atguigu.crud.
import com.atguigu.crud.bean.U
public interface IUserService {
public User queryByPK(Integer id);
IUserServiceImpl.javapackage com.atguigu.crud.service.
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.S
import com.atguigu.crud.bean.U
import com.atguigu.crud.dao.UserD
import com.atguigu.crud.service.IUserS
public class IUserServiceImpl implements IUserService{
@Autowired
private UserDao userD
public User queryByPK(Integer id) {
// TODO Auto-generated method stub
return userDao.queryByPK(id);
public UserDao getUserDao() {
return userD
public void setUserDao(UserDao userDao) {
this.userDao = userD
}UserController.javapackage com.atguigu.crud.
import javax.servlet.http.HttpServletR
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.PathV
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.ResponseB
import com.atguigu.crud.bean.U
import com.atguigu.crud.service.IUserS
@Controller
public class UserController {
@Autowired
private IUserService iUserS
@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
@ResponseBody
public User getHello(@PathVariable("id")Integer id,HttpServletRequest request){
User user = iUserService.queryByPK(id);
request.getSession().setAttribute("user", user);
System.out.println(id);
public IUserService getiUserService() {
return iUserS
public void setiUserService(IUserService iUserService) {
this.iUserService = iUserS
}测试效果:后台测试故障转移(关闭主机)哨兵投票选取了6380端口为主机测试成功以上是自己写的小测试 大家发现错误请告诉我下,谢谢项目源码下载地址http://download.csdn.net/download/wangxuelei036/9981864
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 c 缓存框架 的文章

 

随机推荐