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 38 下载量 23 浏览量
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
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功