2019独角兽企业重金招聘Python工程师标准>>>

IRedisToolsService

package com.dmz.app.biz.redis.service;import java.io.Serializable;import java.util.List;
import java.util.Set;/*** redis基础服务bate版本* */
public interface IRedisToolsService {/*** 保存数据, 默认7天* @param key redis的key值* @param t 要保存的对象, 必须实现序列化接口* @return 成功, 返回保存的数据*/<T extends Serializable> T set(String key, T t);/*** 保存数据* @param key redis的key值* @param t 要保存的对象, 必须实现序列化接口* @param liveSeconds 设置存活时间 单位秒* @return 成功, 返回保存的数据*/<T extends Serializable> T set(String key, T t, long liveSeconds);/*** 返回redis中的所有存在的key* @return*/Set<String> keys();/*** 返回随即生成的key值* @return*/String randomKey();/*** 返回是否存在该key值* @param key* @return*/boolean exists(String key);/*** 通过key值删除redis中的数据* @param key* @return*/<T extends Serializable> T del(String key);/*** 从redis根据key查找数据* @param key* @return*/<T extends Serializable> T get(String key);/*** 延长key对应的value的存活时间* @param key* @param liveSeconds* @return 延长成功:true, 否则false*/boolean expire(String key, long liveSeconds);long incr(String key);long decr(String key);<T extends Serializable> boolean setNX(final String key, final T t);<T extends Serializable> T  getSet(final String key, final T t);/*** 将一个或多个值插入到列表头部* @param key* @param t* @return*/<T extends Serializable> long lpush(final String key, final T t);/*** 获取列表指定范围内的元素* @param key* @param t* @return*/List lrange(final String key, final long start, final long end);/*** 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。* @param key* @param start* @param end* @return*/boolean ltrim(final String key, long start, long end);long lpop(final String key);/*** * @Title: batchPipelineSet* @Description: 批量插入数据* @param @param keyList  key值列表* @param @param dataList value列表* @param @param expire   过期时间* @return void    返回类型* @throws*/void batchPipelineSet(List<String> keyList,List<Object> dataList, long expire);}

RedisToolsServiceImpl

package com.dmz.app.biz.redis.service.impl;import java.io.Serializable;import java.util.List;
import java.util.Set;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.aic.dmz.app.biz.redis.dao.IRedisToolsDAO;
import com.aic.dmz.app.biz.redis.service.IRedisToolsService;@Service("redisToolsService")
public class RedisToolsServiceImpl implements IRedisToolsService{@Resourceprivate IRedisToolsDAO redisToolsDAO;@Overridepublic <T extends Serializable> T set(String key, T t) {return (T)redisToolsDAO.set(key, t);}@Overridepublic <T extends Serializable> T set(String key, T t, long liveSeconds) {return (T)redisToolsDAO.set(key, t, liveSeconds);}@Overridepublic Set<String> keys() {return redisToolsDAO.keys();}@Overridepublic String randomKey() {return redisToolsDAO.randomKey();}@Overridepublic boolean exists(String key) {return redisToolsDAO.exists(key);}@SuppressWarnings("unchecked")@Overridepublic <T extends Serializable> T del(String key) {return (T)redisToolsDAO.del(key);}@SuppressWarnings("unchecked")@Overridepublic <T extends Serializable> T get(String key) {return (T)redisToolsDAO.get(key);}@Overridepublic boolean expire(String key, long liveSeconds) {return redisToolsDAO.expire(key, liveSeconds);}@Overridepublic long incr(String key) {return redisToolsDAO.incr(key);}@Overridepublic long decr(String key) {return redisToolsDAO.decr(key);}@Overridepublic <T extends Serializable> boolean setNX(final String key, final T t){return redisToolsDAO.setNX(key, t); }@Overridepublic <T extends Serializable> T  getSet(final String key, final T t){return redisToolsDAO.getSet(key, t);    }@Overridepublic <T extends Serializable> long lpush(final String key, final T t) {// TODO Auto-generated method stubreturn redisToolsDAO.lpush(key, t);}@Overridepublic List lrange(final String key, final long start, final long end) {// TODO Auto-generated method stubreturn redisToolsDAO.lrange(key, start, end);}@Overridepublic boolean ltrim(final String key, final long start, final long end) {// TODO Auto-generated method stubreturn redisToolsDAO.ltrim(key, start, end);}@Overridepublic long lpop(String key) {// TODO Auto-generated method stubreturn redisToolsDAO.lpop(key);}public void batchPipelineSet(final List<String> keyList,final  List<Object> dataList, final long expire){redisToolsDAO.batchPipelineSet(keyList, dataList, expire);}}

IRedisToolsDAO

package com.dmz.app.biz.redis.dao;import java.io.Serializable;
import java.util.List;
import java.util.Set;/*** redis集成spring, 暂时开放如下接口。如有需要在做扩展* @author EX-CHENKEFENG001* * @version 1.0bate**/
public interface IRedisToolsDAO {/*** 保存数据, 默认7天* @param key redis的key值* @param t 要保存的对象, 必须实现序列化接口* @return 成功, 返回保存的数据*/<T extends Serializable> T set(String key, T t);/*** 保存数据* @param key redis的key值* @param t 要保存的对象, 必须实现序列化接口* @param liveSeconds 设置存活时间 单位秒* @return 成功, 返回保存的数据*/<T extends Serializable> T set(String key, T t, long liveSeconds);/*** 返回redis中的所有存在的key* @return*/Set<String> keys();/*** 返回随即生成的key值* @return*/String randomKey();/*** 返回是否存在该key值* @param key* @return*/boolean exists(String key);/*** 通过key值删除redis中的数据* @param key* @return*/<T extends Serializable> T del(String key);/*** 从redis根据key查找数据* @param key* @return*/<T extends Serializable> T get(String key);/*** 延长key对应的value的存活时间* @param key* @param liveSeconds* @return 延长成功:true, 否则false*/boolean expire(String key, long liveSeconds);/*** 增加获取值* @param key* @return*/long incr(String key);/*** 减少获取值* @param key* @return*/long decr(String key);<T extends Serializable> boolean setNX(final String key, final T t);<T extends Serializable> T  getSet(final String key, final T t);/*** 将一个或多个值插入到列表头部* @param key* @param t* @return*/<T extends Serializable> long lpush(final String key, final T t);/*** 获取列表指定范围内的元素* @param key* @param t* @return*/List lrange(final String key, final long start, final long end);/*** 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。* @param key* @param start* @param end* @return*/boolean ltrim(final String key, long start, long end);long lpop(final String key);/*** pipeline* @Title: batchPipelineSet* @Description: 管道方式插入数据* @param  keyList key值列表* @param  dataList value值列表* @param  expire  过期时间* @return void* @throws*/void batchPipelineSet(final List<String> keyList,final List<Object> dataList,final  long expire);}

RedisToolsDAOImpl

package com.dmz.app.biz.redis.dao.impl;import java.io.Serializable;import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Repository;import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
/*** Redis基础服务* @author EX-CHENKEFENG001**/
@Repository("redisToolsDAO")
public class RedisToolsDAOImpl implements IRedisToolsDAO, ApplicationContextAware{protected final FormatLogger logger = new FormatLogger(this.getClass());private RedisTemplate<String, String> redisTemplate;@Overridepublic <T extends Serializable> T set(final String key, final T t) {return (T)set(key, t, Constants.DEFAULT_CACHE_SECONDS);}@Overridepublic <T extends Serializable> T set(final String key, final T t, final long liveSeconds) {try{return redisTemplate.execute(new RedisCallback<T>() {@SuppressWarnings("unchecked")@Overridepublic T doInRedis(RedisConnection conn)throws DataAccessException {byte[] keys = redisTemplate.getStringSerializer().serialize(key);RedisSerializer<Object> valueSerializer = (RedisSerializer<Object>) redisTemplate.getValueSerializer();byte[] values = valueSerializer.serialize(t);conn.set(keys, values);conn.expire(keys, liveSeconds);return t;}});}catch(Exception e){logger.error(e, "set data has error. key=[{0}]. value=[{1}]", key, t);return null;}}@Overridepublic Set<String> keys() {return redisTemplate.execute(new RedisCallback<Set<String>>() {@Overridepublic Set<String> doInRedis(RedisConnection conn)throws DataAccessException {byte[] keys = redisTemplate.getStringSerializer().serialize("*");Set<byte[]> keyRes = conn.keys(keys);Set<String> result = new HashSet<String>();for (byte[] bs : keyRes) {result.add(redisTemplate.getStringSerializer().deserialize(bs));}return result;}});}@Overridepublic String randomKey() {return redisTemplate.randomKey();}@Overridepublic boolean exists(final String key) {return redisTemplate.execute(new RedisCallback<Boolean>() {@Overridepublic Boolean doInRedis(RedisConnection conn)throws DataAccessException {return conn.exists(redisTemplate.getStringSerializer().serialize(key));}});}@Overridepublic <T extends Serializable> T del(final String key) {return redisTemplate.execute(new RedisCallback<T>() {@SuppressWarnings("unchecked")@Overridepublic T doInRedis(RedisConnection conn)throws DataAccessException {T t = (T)get(key);conn.del(redisTemplate.getStringSerializer().serialize(key));return t;}});}@Overridepublic <T extends Serializable> T get(final String key) {return redisTemplate.execute(new RedisCallback<T>() {@SuppressWarnings("unchecked")@Overridepublic T doInRedis(RedisConnection conn)throws DataAccessException {byte[] valBytes = conn.get(redisTemplate.getStringSerializer().serialize(key));RedisSerializer<Object> valueSerializer = (RedisSerializer<Object>) redisTemplate.getValueSerializer();return (T)valueSerializer.deserialize(valBytes);}});}@Overridepublic boolean expire(final String key, final long liveSeconds) {if(!exists(key)){return false;}redisTemplate.execute(new RedisCallback<Void>() {@Overridepublic Void doInRedis(RedisConnection conn)throws DataAccessException {conn.expire(redisTemplate.getStringSerializer().serialize(key), liveSeconds);return null;}});return true;}@Overridepublic long incr(final String key) {return redisTemplate.execute(new RedisCallback<Long>() {@Overridepublic Long doInRedis(RedisConnection redisConnection) throws DataAccessException {return redisConnection.incr(redisTemplate.getStringSerializer().serialize(key));}});}@Overridepublic long decr(final String key) {return redisTemplate.execute(new RedisCallback<Long>() {@Overridepublic Long doInRedis(RedisConnection redisConnection) throws DataAccessException {return redisConnection.decr(redisTemplate.getStringSerializer().serialize(key));}});}@SuppressWarnings("unchecked")@Overridepublic void setApplicationContext(ApplicationContext context)throws BeansException {this.redisTemplate = (RedisTemplate<String, String>) context.getBean("redisTemplate");CyberarkV9Service cyberarkV9Service =(CyberarkV9Service) context.getBean("cyberarkV9Service");JedisConnectionFactory jedisConnectionFactory =(JedisConnectionFactory)redisTemplate.getConnectionFactory();String password= cyberarkV9Service.getPassword("ilifecore.dmz.redis.password");if(password==null){logger.warn("get redis password from V9 failed!");return;}jedisConnectionFactory.setPassword(password);jedisConnectionFactory.getShardInfo().setPassword(password);jedisConnectionFactory.afterPropertiesSet();}@Overridepublic <T extends Serializable> boolean setNX(final String key, final T t) {try{return redisTemplate.execute(new RedisCallback<Boolean>() {@SuppressWarnings("unchecked")@Overridepublic Boolean doInRedis(RedisConnection conn)throws DataAccessException {byte[] keys = redisTemplate.getStringSerializer().serialize(key);RedisSerializer<Object> valueSerializer = (RedisSerializer<Object>) redisTemplate.getValueSerializer();byte[] values = valueSerializer.serialize(t);return conn.setNX(keys,values);}});}catch(Exception e){logger.error(e, "setNX data has error. key=[{0}]. value=[{1}]", key, t);return false;}}@Overridepublic <T extends Serializable> T  getSet(final String key, final T t) {try{return redisTemplate.execute(new RedisCallback<T>() {@SuppressWarnings("unchecked")@Overridepublic T doInRedis(RedisConnection conn)throws DataAccessException {byte[] keys = redisTemplate.getStringSerializer().serialize(key);RedisSerializer<Object> valueSerializer = (RedisSerializer<Object>) redisTemplate.getValueSerializer();byte[] values = valueSerializer.serialize(t);return (T)valueSerializer.deserialize(conn.getSet(keys, values));}});}catch(Exception e){logger.error(e, "getSet data has error. key=[{0}]. value=[{1}]", key, t);return null;}}@Overridepublic <T extends Serializable> long lpush(final String key, final T t) {try {return redisTemplate.execute(new RedisCallback<Long>() {public Long doInRedis(RedisConnection conn) throws DataAccessException {byte[] keys = redisTemplate.getStringSerializer().serialize(key);RedisSerializer<Object> valueSerializer = (RedisSerializer<Object>) redisTemplate.getValueSerializer();byte[] values = valueSerializer.serialize(t);return conn.lPush(keys, values);}});} catch (Exception e) {logger.error(e, "lpush data has error. key=[{0}].value=[{1}]", key, t);return 0l;}}@Overridepublic List lrange(final String key, final long start, final long end) {try {return redisTemplate.execute(new RedisCallback<List>() {public List doInRedis(RedisConnection conn) throws DataAccessException {byte[] keys = redisTemplate.getStringSerializer().serialize(key);RedisSerializer<Object> valueSerializer = (RedisSerializer<Object>) redisTemplate.getValueSerializer();List list = conn.lRange(keys, start, end);List<Object> objects = new ArrayList<Object>();for(Object object : list){objects.add(valueSerializer.deserialize((byte[]) object));}return  objects;}});} catch (Exception e) {logger.error(e, "lrange data has error. key=[{0}]. start=[{1}]. end=[{2}]", key, start, end);return null;}}@Overridepublic boolean ltrim(final String key, final long start, final long end) {try {return redisTemplate.execute(new RedisCallback<Boolean>() {public Boolean doInRedis(RedisConnection conn) throws DataAccessException {byte[] keys = redisTemplate.getStringSerializer().serialize(key);conn.lTrim(keys, start, end);return true;}});} catch (Exception e) {logger.error(e, "ltrim data has error. key=[{0}]. start=[{1}]. end=[{2}]", key, start, end);return false;}}@Overridepublic long lpop(final String key) {try {return redisTemplate.execute(new RedisCallback<Long>() {public Long doInRedis(RedisConnection conn) throws DataAccessException {byte[] keys = redisTemplate.getStringSerializer().serialize(key);RedisSerializer<Object> valueSerializer = (RedisSerializer<Object>) redisTemplate.getValueSerializer();conn.lPop(keys);return 1l;}});} catch (Exception e) {logger.error(e, "lpop data has error. key=[{0}]]", key);return 0l;}}@Overridepublic void batchPipelineSet(final List<String> keyList,final List<Object> dataList, final long expire) {//使用pipeline方式redisTemplate.executePipelined(new RedisCallback<List<Object>>() {@Overridepublic List<Object> doInRedis(RedisConnection connection) throws DataAccessException {for(int i = 0; i < keyList.size();i++){String key = keyList.get(i);byte[] rawKey = redisTemplate.getStringSerializer().serialize(key);@SuppressWarnings("unchecked")RedisSerializer<Object> valueSerializer = (RedisSerializer<Object>) redisTemplate.getValueSerializer();byte[] value = valueSerializer.serialize(dataList.get(i));connection.setEx(rawKey, expire, value);}return null;}});}}

转载于:https://my.oschina.net/u/198077/blog/3024933

关于redis服务的代码编码相关推荐

  1. CentOS 7安装Redis服务

    一.Redis下载 在centOS里通过wget下载redis wget http://download.redis.io/releases/redis-4.0.11.tar.gz  具体版本下载地址 ...

  2. 使用docker-compose配置redis服务

    使用docker-compose配置redis服务 前言 因为docker的跨平台,所以使用docker搭建自己的数据库非常方便 代码 代码示例目录结构# docker-compose.yaml Co ...

  3. 使用BeetleX访问redis服务

    BeetleX针对redis访问封了全async/await操作模式,通过它可以更高效地访问redis服务.BeetleX.Redis提供读写分离和多机故意写入处理,同时安全的TLS访问机制,在使用功 ...

  4. Redis服务信息--Info指令

    Redis服务信息–Info指令 在使用Redis时候,可能会遇到一些异常情况,我们排查完代码问题后,会需要对Redis进行排查,在对Redis错误进行排查之前,需要了解Redis运行状态,通过强大I ...

  5. linux配置redis服务,Linux下安装Redis并设置相关服务

    一.简介 Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使 ...

  6. 安卓应用安全指南 4.4.1 创建/使用服务 示例代码

    4.4.1 创建/使用服务 示例代码 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA ...

  7. Redis服务安全加固

    转载来源 : https://help.aliyun.com/knowledge_detail/37447.html?spm=a2c4g.11186623.4.4.674b4b12XmJSTD 一.背 ...

  8. 为什么至少三个哨兵_入职第一周,组长让我把部门redis服务搞成哨兵模式...慌-龙跃十二...

    少点代码,多点头发 本文已经被GitHub收录,欢迎大家踊跃star 和 issues. 入职第一周,我被坑了 最近刚入职新公司,本来想着这刚来新公司,一般都是熟悉熟悉公司同事,看看组内工程文档,找几 ...

  9. Redis源码-String:Redis String命令、Redis String存储原理、Redis String三种编码类型、Redis字符串SDS源码解析、Redis String应用场景

    Redis源码-String:Redis String命令.Redis String存储原理.Redis String三种编码类型.Redis字符串SDS源码解析.Redis String应用场景 R ...

最新文章

  1. 三十四、段页式管理方式
  2. iphone7像素_iPhone 7能否再战三年?这几点因素你得考虑到!
  3. WEB前端学习一 JS预解释
  4. OCA第6部分中的Java难题
  5. 容器服务kubernetes弹性伸缩高级用法
  6. linux成为管理员_成为系统管理员需要知道的
  7. spin协议 matlab 仿真,无线传感器总结复习资料02016学生
  8. 电脑护眼模式_电脑手机护眼小工具
  9. 拓端tecdat|Python中的多项式回归拟合非线性关系实例
  10. EGo1下板_简单秒表
  11. SiamRPN:利用区域建议孪生网络进行视频跟踪
  12. tsconfig.json详细配置
  13. (转载)神级代码编辑器 Sublime Text 全程指南
  14. windows消息分类PostMessage、SendMessage
  15. 计算机控制系统是闭环还是开环,电喷摩托车系统的开环控制与闭环控制
  16. 考题篇(6.2) 02 ❀ FortiGate ❀ Fortinet 网络安全专家 NSE 4
  17. Unity Asset Store精品Low Poly风格素材资源合集
  18. python生成微信个性签名的词云图
  19. [转载]中国传统武术的困境与出路----著名武术家张全亮答记者问
  20. 百度编辑器 UEditor 多图上传弹窗中去掉【在线管理】和【图片搜索】Tab页

热门文章

  1. 现在国内的网站用户行为数据分析工具都有哪些?-宋星
  2. 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
  3. freeswitch配置软电话
  4. 进化算法中的两种常用交叉算子SBX和DE
  5. ubuntu设置相机为固定焦距
  6. bigdecimal 平均数_用Java计算平均值
  7. 百度云不限速下载方法
  8. error:尝试引用已删除的函数或已显式删除函数
  9. redis使用中经常出现 Could not get a resource from the pool 异常,解决办法总结
  10. poi word表格系列操作