package com.pionner17.common.redis;
import org.springframework.cache.Cache;
import org.springframework.cache.support.SimpleValueWrapper;
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 java.io.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
public class RedisCache implements Cache {
private RedisTemplate<String, Object> redisTemplate;
private String name;
public RedisTemplate<String, Object> getRedisTemplate() {
return redisTemplate;
}
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public void setName(String name) {
this.name = name;
}
@Override
public String getName() {
return this.name;
}
@Override
public Object getNativeCache() {
// TODO Auto-generated method stub
return this.redisTemplate;
}
@Override
public ValueWrapper get(Object key) {
// TODO Auto-generated method stub
final String keyf = (String) key;
Object object = null;
object = redisTemplate.execute(new RedisCallback<Object>() {
public Object doInRedis(RedisConnection connection) throws DataAccessException {
byte[] key = keyf.getBytes();
byte[] value = connection.get(key);
if (value == null) {
return null;
}
return toObject(value);
}
});
return (object != null ? new SimpleValueWrapper(object) : null);
}
/**
* 根据传入的对象进行对象转化
*/
@Override
public <T> T get(Object key, Class<T> type) {
final String keyf = (String) key;
Object object = null;
object = redisTemplate.execute(new RedisCallback<Object>() {
public Object doInRedis(RedisConnection connection) throws DataAccessException {
byte[] key = keyf.getBytes();
byte[] value = connection.get(key);
if (value == null) {
return null;
}
return toObject(value);
}
});
return object == null ? null : type.cast(object);
}
@Override
public <T> T get(Object o, Callable<T> callable) {
return null;
}
@Override
public void put(Object key, Object value) {
final String keyf = (String) key;
final Object valuef = value;
if (value == null) {
return;
}
redisTemplate.execute(new RedisCallback<Long>() {
public Long doInRedis(RedisConnection connection) throws DataAccessException {
byte[] keyb = keyf.getBytes();
byte[] valueb = toByteArray(valuef);
connection.set(keyb, valueb);
return 1L;
}
});
}
/**
* @param key
* @param value
* @param seconds 单位是秒
* @discription 缓存value并且设置缓存的过期时间
* @author zhouqisong
* @created 2016年11月26日 下午5:55:07
*/
public void putWithExpireTime(final String key, final Object value, final int seconds) {
if (value == null) {
return;
}
final String keyf = (String) key;
final Object valuef = value;
redisTemplate.execute(new RedisCallback<Long>() {
public Long doInRedis(RedisConnection connection) throws DataAccessException {
byte[] keyb = keyf.getBytes();
byte[] valueb = toByteArray(valuef);
connection.set(keyb, valueb);
if (seconds > 0) {
connection.expire(keyb, seconds);
}
return 1L;
}
});
}
/**
* @param key
* @param value
* @param timestamp 单位是秒
* @discription 缓存value并且设置指定时间戳过期
* @author zhouqisong
* @created 2017-08-08 20:58:08
*/
public void putWithExpireTimeAtUnixTimeStamp(final String key, final Object value, final int timestamp) {
if (value == null) {
return;
}
if (timestamp + "".length() != 10) {
System.out.println("!!!!!!=====时间戳是精确到秒,请传入时间戳=====!!!!!!!!!!!!");
}
final String keyf = (String) key;
final Object valuef = value;
redisTemplate.execute(new RedisCallback<Long>() {
public Long doInRedis(RedisConnection connection) throws DataAccessException {
byte[] keyb = keyf.getBytes();
byte[] valueb = toByteArray(valuef);
connection.set(keyb, valueb);
if (timestamp > 0) {
connection.expireAt(keyb, timestamp);
}
return 1L;
}
});
}
/**
* @param
* @discription 删除指定的key
* @author zhouqisong
* @created 2016年11月29日 下午12:10:19
*/
public void deleteKeys(final String... keys) {
if (keys == null) {
return;
}
redisTemplate.execute(new RedisCallback<Long>() {
public Long doInRedis(RedisConnection connection) throws DataAccessException {
long result = 0;
for (String key : keys) {
result = connection.del(key.getBytes());
}
return result;
}
});
}
/**
* 1,根据patternKey+通配符模糊索引出keys(patternKey的长度不低于6位、防止模糊索带来的误删除)
* <p>
* 2,清理索引出的key的缓存
* <p>
* @param patternKey
* @date: 2017年6月21日 下午3:32:28
* @author: zqs
* @return: void
*/
public void deleteKeysByPattern(final String patternKey) {
if (patternKey == null || patternKey.length() < 6) {
return;
}
redisTemplate.execute(new RedisCallback<Long>() {
public Long doInRedis(RedisConnection connection) throws DataAccessException {
Set<byte[]> keys = connection.keys(patternKey.getBytes());
long result = 0;
if (keys != null) {
for (byte[] key : keys) {
result = connection.del(key);
}
}
return result;
}
});
}
/**
* @param keyList
* @discription 删除指定的个key
* @author zhouqisong
* @created 2016年11月29日 下午12:10:37
*/
public void deleteKeys(final Collection<String> keyList) {
redisTemplate.execute(new RedisCallback<Long>() {
public Long doInRedis(RedisConnection connection) throws DataAccessException {
long result = 0;
for (String key : keyList) {
result = connection.del(key.getBytes());
}
return result;
}
});
}
/**
* 描述 : <Object转byte[]>. <br>
* <p>
* <使用方法说明>
* </p>
*
* @param obj
* @return
*/
private byte[] toByteArray(Object obj) {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
没有合适的资源?快使用搜索试试~ 我知道了~
springmvc+mybatis+redis+shiro+bootstrap+freemarker+jsp+logback框架
共391个文件
class:121个
xml:104个
jar:55个
需积分: 10 39 下载量 171 浏览量
2017-11-30
09:49:20
上传
评论 3
收藏 27.01MB ZIP 举报
温馨提示
springmvc+mybatis+redis+shiro+bootstrap+freemarker+jsp+logback框架,几乎集合了所有企业开发技术,可以下载下来直接使用,任务调度,登陆拦截应有尽有
资源推荐
资源详情
资源评论
收起资源包目录
springmvc+mybatis+redis+shiro+bootstrap+freemarker+jsp+logback框架 (391个子文件)
.rebel-remote.xml.bak 144B
ExcelReadUtil.class 8KB
ExcelReadUtil.class 8KB
ExcelUtil.class 8KB
ExcelUtil.class 8KB
RedisCache.class 8KB
RedisCache.class 8KB
RedisCache.class 8KB
RedisCache.class 8KB
CnCard.class 6KB
CnCard.class 6KB
IDCardUtil.class 6KB
IDCardUtil.class 6KB
TestController.class 4KB
TestController.class 4KB
TestController.class 4KB
TestController.class 4KB
PageTest.class 3KB
PageTest.class 3KB
RedisManager$Cache.class 2KB
RedisManager$Cache.class 2KB
RedisManager$Cache.class 2KB
RedisManager$Cache.class 2KB
RedisCache$12.class 2KB
RedisCache$12.class 2KB
RedisCache$12.class 2KB
RedisCache$12.class 2KB
RedisCache$7.class 2KB
RedisCache$7.class 2KB
RedisCache$7.class 2KB
RedisCache$7.class 2KB
DemoTest.class 2KB
DemoTest.class 2KB
RedisManager.class 2KB
RedisManager.class 2KB
RedisCache$5.class 2KB
RedisCache$5.class 2KB
RedisCache$8.class 2KB
RedisCache$8.class 2KB
RedisCache$5.class 2KB
RedisCache$5.class 2KB
RedisCache$8.class 2KB
RedisCache$8.class 2KB
RedisManager.class 2KB
RedisManager.class 2KB
RedisCache$4.class 2KB
RedisCache$4.class 2KB
RedisCache$4.class 2KB
RedisCache$4.class 2KB
LoginInterceptor.class 2KB
LoginInterceptor.class 2KB
LoginInterceptor.class 2KB
LoginInterceptor.class 2KB
Book.class 2KB
Book.class 2KB
RedisCache$6.class 2KB
RedisCache$6.class 2KB
RedisCache$6.class 2KB
RedisCache$6.class 2KB
Product.class 2KB
Product.class 2KB
RedisCache$3.class 2KB
RedisCache$3.class 2KB
RedisCache$3.class 2KB
RedisCache$3.class 2KB
Vendor.class 2KB
Vendor.class 2KB
BasePathInterceptor.class 2KB
BasePathInterceptor.class 2KB
BasePathInterceptor.class 2KB
BasePathInterceptor.class 2KB
RedisCache$1.class 2KB
RedisCache$1.class 2KB
RedisCache$1.class 2KB
RedisCache$1.class 2KB
RedisCache$11.class 2KB
RedisCache$11.class 2KB
RedisCache$11.class 2KB
RedisCache$11.class 2KB
ProductTest.class 1KB
ProductTest.class 1KB
RedisCache$2.class 1KB
RedisCache$2.class 1KB
RedisCache$2.class 1KB
RedisCache$2.class 1KB
RedisCache$9.class 1KB
RedisCache$9.class 1KB
RedisCache$9.class 1KB
RedisCache$9.class 1KB
Main.class 1KB
Main.class 1KB
RedisCache$10.class 1KB
RedisCache$10.class 1KB
RedisCache$10.class 1KB
RedisCache$10.class 1KB
BeanProvider.class 1KB
BeanProvider.class 1KB
BeanProvider.class 1KB
BeanProvider.class 1KB
BeanContextLoaderListener.class 1KB共 391 条
- 1
- 2
- 3
- 4
资源评论
Pionner17
- 粉丝: 8
上传资源 快速赚钱
我的内容管理
展开
我的资源
快来上传第一个资源
我的收益 登录查看自己的收益
我的积分
登录查看自己的积分
我的C币
登录后查看C币余额
我的收藏
我的下载
下载帮助
前往需求广场,查看用户热搜最新资源
- 量子电路工程设计挑战
- 安卓 实现背景音乐的播放与停止
- PHP用于XAMPool开发小型数据库连接
- 校园跑腿服务系统-基于SpringBoot和Vue前后端分离架构的校园内任务代办理平台-实现学生用户发布取快递买零食打印文件等各类跑腿需求接单员在线抢单实时通讯订单跟踪电子支付与信.zip
- MangosZero-Server-18.1:*MaNGOSZero* 是一款功能齐全的魔兽世界“经典”服务器,包括身份验证和世
- netty4.1中级拓展篇十二《Netty流量整形数据流速率控制分析与实战》源码完整解析
- 基于多智能体的网络安全监控
- 用Python画皮卡丘.py
- React-Native-跨平台移动应用开发框架-基于JavaScript和React构建的用于iOS和Android原生应用开发的开源技术解决方案-提供丰富的组件库和API接口支.zip
- C++开发银行排队系统模拟
- 基于电压基准的辐射监测
- Matlab画瀑布图-福里叶变换-频谱图代码.zip-matlab 频谱图 傅里叶变换 瀑布图
- Java访问WCF示例(使用HttpClient)
- 素数计算与测试工具-生成并输出所有质数序列-提供高效的大数质数检测算法-用于数学教育辅助和密码学基础研究-支持多线程并行计算与内存优化处理-包含素数分布可视化及历史记录导出功能-P.zip
- 基于电压基准的辐射监测
- DNA计算与遗传算法融合
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功