redis在JAVA中使用资料_第1页
redis在JAVA中使用资料_第2页
redis在JAVA中使用资料_第3页
redis在JAVA中使用资料_第4页
redis在JAVA中使用资料_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Redis一、 Redis 介绍什么是 Redis ?redis是一个 key-value存储系统。和Memcached类似,它支持存储的value 类型相对更多, 包括 string( 字符串 ) 、list( 链表 )、set( 集合 )、zset(sorted set -有序集合 )和 hash(哈希类型) 。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样, 为了保证效率, 数据都是缓存在内存中。区别的是redis 会周期性的把更新的数据写入磁盘或者

2、把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从 )同步。它有什么特点?1 )Redis 数据库 完全在内存中,使用磁盘仅用于持久性。2 )相比许多键值数据存储, Redis 拥有一套较为丰富的数据类型。3 )Redis 可以将数据复制到任意数量的从服务器。Redis优势?( 1 )异常快速: Redis 的速度非常快,每秒能执行约11 万集合,每秒约81000+条记录。2)支持丰富的数据类型: Redis 支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。 这使得它非常容易解决各种各样的问题, 因为我们知道哪些问题是可以处理通过它的数据类型更好

3、。3 )操作都是原子性:所有 Redis 操作是原子的,这保证了如果两个客户端同时访问的Redis 服务器将获得更新后的值。(4 )多功能实用工具:Redis 是一个多实用的工具,可以在多个用例如缓存,消息,队列使用 (Redis 原生支持发布/ 订阅 ),任何短暂的数据,应用程序,如Web 应用程序会话,网页命中计数等。Redis缺点?1 )单线程2 )耗内存二、使用实例spring把专门的数据操作独立封装在spring-data系列中, spring-data-redis自然是针对Redis 的独立封装了。主要是将 jedis 、 jredis 、rjc 以及 srp 等 Redis Cl

4、ient进行了封装,同时支持事务。1 、引入相关jar 包(连接池不做考虑)1.2.3.org.springframework.data4.spring-data-redis.RELEASE6.7.8.redis.clients9.jedis 11.12.2 、配置 bean新增 application-redis.xml加入如下配置..2.13.14. 1.22.23.其中配置文件redis 一些配置数据perties如下:1.#redis中心2.redis.host=13.r

5、edis.port=63794.redis.password=1234565.redis.maxIdle=1006.redis.maxActive=3007.redis.maxWait=10008.redis.testOnBorrow=true9.redis.timeout=10000010. # 不需要加入缓存的类11. targetNames=xxxRecordManager,xxxSetRecordManager,xxxStatisticsIdentificationManager12. # 不需要缓存的方法13. methodNames=14.15. #设置缓存失效时间16. com.

6、service.impl.xxxRecordManager= 6017. com.service.impl.xxxSetRecordManager= 6018. defaultCacheExpireTime=360019.20. fep.local.cache.capacity =10000、一些工具类(1 )RedisUtil上面的 bean中, RedisUtil是用来缓存和去除数据的实例1.package mon;2.3.importjava.io.Serializable;4.importjava.util.Set;5.importjava.util.concurrent.TimeUn

7、it;6.7.importorg.apache.log4j.Logger;8.importorg.springframework.data.redis.core.RedisTemplate;9.importorg.springframework.data.redis.core.ValueOperations;10.11./*12.* redis cache工具类13.*14.*/15.Component16.publicfinalclassRedisUtil 17.privateLogger logger = Logger.getLogger(RedisUtil.class );18.19.2

8、3.AutowiredprivateRedisTemplate redisTemplate;/*批量删除对应的value6.67.*param keys*/publicvoidremove(finalString. keys) for(String key : keys) remove(key);/*批量删除 key*para

9、m pattern*/publicvoidremovePattern(finalString pattern) Set keys = redisTemplate.keys(pattern);if(keys.size() 0)redisTemplate.delete(keys);/*删除对应的 valueparam key*/publicvoidremove(finalString key) if(exists(key) redisTemplate.delete(key);/*判断缓存中是否有对应的value*param keyreturn*/publicbooleanexists(finalS

10、tring key) returnredisTemplate.hasKey(key);/*读取缓存*7.78.79.param keyreturn*/publicObject get(finalString key) Object result =null;ValueOperations operations = redisTemplate.opsForValue();result = operations.get(key);returnresult;/*80.*写入缓存81.*82.* param key83.* param value

11、84.* return85.*/86.publicbooleanset(final String key, Object value) 87.booleanresult =false;88.try89.ValueOperations operations = redisTemplate90.opsForValue();91.operations.set(key, value);92.result =true ;93.catch(Exception e) 94.e.printStackTrace();95.96.returnresult;97.98.99./*100.*写入缓存101.*102.

12、* param key103.* param value104.* return105.*/106.publicbooleanset(finalString key, Object value, Long expireTime) 107.booleanresult =false;108.try109.ValueOperations operations = redisTemplate110.opsForValue();111.operations.set(key, value);112.redisTemplate.expire(key, expireTime, TimeUnit.SECONDS

13、);113.result =true ;114.catch(Exception e) 115.e.printStackTrace();116.117.returnresult;118.119.120.publicvoidsetRedisTemplate(121.RedisTemplate redisTemplate) 122.this .redisTemplate = redisTemplate;123.124.2 )MethodCacheInterceptor切面 MethodCacheInterceptor,这是用来给不同的方法来加入判断如果缓存存在数据,从缓存取数据。否则第一次从数据库取

14、,并将结果保存到缓存中去。1.packagemon;2.3.importjava.io.File;4.importjava.io.FileInputStream;5.importjava.io.InputStream;6.importjava.util.ArrayList;7.importjava.util.List;8.importjava.util.Properties;9.10.importercept.MethodInterceptor;11.importercept.MethodInvocation;12.importorg.apache.log4j.Logger;13.Interc

15、eptor15.public classMethodCacheInterceptorimplements MethodInterceptor 16.privateLogger logger = Logger.getLogger(MethodCacheInterceptor.class );17.Autowired18.privateRedisUtil redisUtil;4.35.privateList targetNamesList;/不加入缓存的 service名称privateList metho

16、dNamesList;/不加入缓存的方法名称privateLong defaultCacheExpireTime;/缓存默认的过期时间privateLong xxxRecordManagerTime;/privateLong xxxSetRecordManagerTime;/*初始化读取不需要加入缓存的类名和方法名称*/publicMethodCacheInterceptor() 初始化参数 .OverridepublicObject invoke(MethodInvocation invocation)throwsThrowable Object value =null;36.String

17、targetName = invocation.getThis().getClass().getName();37.String methodName = invocation.getMethod().getName();38./ 不需要缓存的内容39./if (!isAddCache(StringUtil.subStrForLastDot(targetName), methodName) 8.59.60.if(!isAddCache(targetName, methodName) 执

18、行方法返回结果returnceed();Object arguments = invocation.getArguments();String key = getCacheKey(targetName, methodName, arguments); System.out.println(key);try判断是否有缓存if(redisUtil.exists(key) returnredisUtil.get(key);写入缓存value = ceed();if(value !=null) finalString tkey = key;finalObject tvalue = value;new

19、Thread(new Runnable() Overridepublicvoidrun() 61.if(tkey.startsWith(com.service.impl.xxxRecordManager ) 62.redisUtil.set(tkey, tvalue, xxxRecordManagerTime);63.64.elseif(tkey.startsWith(com.service.impl.xxxSetRecordManager) redisUtil.set(tkey, tvalue, xxxSetRecordManagerTime);65.66.elseredisUtil.set(tkey, tvalue, defaultCacheExpireTime);7.98.99.).start();catch (Exception e) e.printStackTrace();if(value =null) returnceed();returnvalue;/*是否加入缓存* return*/privatebooleanisAddCache(Strin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论