1.接口类

package com.sze.redis.util;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit; /**
*
* <br>类 名: RedisCachesManager
* <br>描 述: 缓存管理类
* <br>作 者: shizhenwei
* <br>创 建: 2017年5月31日
* <br>版 本: v0.0.2
* <br>
* <br>历 史: (版本) 作者 时间 注释
*/
public interface RedisCachesManager { public static final String ID = "redisCachesManager"; /**
* 在默认缓存空间内加入和更新缓存信息
* @param key
* @param value
*/
void put(String key, Object value); /**
* 在默认缓存空间内加入和更新缓存信息
* @param key
* @param value
*/
void put(String key, Object value, long timeout, TimeUnit unit); /**
* 在指定缓存空间内加入或更新缓存信息
* @param namespace
* @param timeout 有效时长
* @param unit 有效时长单位
*/
void put(String namespace, String key, Object value); /**
* 在指定缓存空间内加入或更新缓存信息
* @param namespace
* @param key
* @param value
* @param timeout 有效时长
* @param unit 有效时长单位
*/
void put(String namespace, String key, Object value, long timeout, TimeUnit unit); /**
* 在默认缓存空间内获取缓存信息
* 如果信息不存在这遍历其他缓存空间
* @param key
* @return
*/
<T> T get(String key); /**
* 获取缓存信息
* @param namespace
* @param key
*/
<T> T get(String namespace, String key); /**
* 在所有缓存空间删除缓存信息
* @param key
*/
void remove(String key); /**
* 在指定空间内删除缓存信息
* @param namespace
* @param key
*/
void remove(String namespace, String key); /**
* 创建缓存空间
* @param namespace
*/
void createNamespace(String namespace); /**
* 删除缓存空间
* @param namespace
*/
void deleteNamespace(String namespace); /**
* 获取全部缓存空间名字
* @return
*/
List<String> namespaces(); /**
* 获取所有keys
* @param namespace
* @return
*/
Set<String> keys(); /**
* 获取指定空间所有keys
* @param namespace
* @return
*/
Set<String> keys(String namespace); /**
* 慎用 正常这个方法不会公开,都是通过xshell操作
* 清空所有缓存
*/
void clearAll(); /**
* 慎用 正常这个方法不会公开,都是通过xshell操作
* 清空所有书库key
*/
void clearDb();
}

2.实现类

package com.sze.redis.util;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
/**
*
* <br>类 名: RedisCachesManager//避免 RedisCacheManager类冲突
* <br>描 述: 缓存工具类
* <br>作 者: shizhenwei
* <br>创 建: 2017年5月31日
* <br>版 本: v0.0.2
* <br>
* <br>历 史: (版本) 作者 时间 注释
*/
@Component(RedisCachesManager.ID)
public class RedisCachesManagerImpl implements RedisCachesManager { @Autowired
private StringRedisTemplate redisTemplate; private ValueOperations<String, String> stringRedis; private ListOperations<String, String> listRedis; /**
* <br>描 述: 初始化时赋值
* <br>作 者: shizhenwei
* <br>历 史: (版本) 作者 时间 注释
*/
@PostConstruct
private void init(){
stringRedis = redisTemplate.opsForValue();
listRedis = redisTemplate.opsForList();
} @Override
public void put(String key, Object value) {
put(CacheContents.DEFAULT_CONTEXT,key, value);
} @Override
public void put(String key, Object value, long timeout, TimeUnit unit) {
put(CacheContents.DEFAULT_CONTEXT,key, value,timeout,unit);
} @Override
public void put(String namespace, String key, Object value) {
AssertUtils.assertNotEmpty(namespace, "put缓存namespace");
AssertUtils.assertNotEmpty(key, "put缓存key");
AssertUtils.assertNotEmpty(value, "put缓存value");
createNamespace(namespace); String className = value.getClass().getName();
JSONObject json = new JSONObject();
json.put("class", className);
json.put("data", JSON.toJSONString(value)); stringRedis.set(fullKey(namespace, key), json.toJSONString());
} @Override
public void put(String namespace, String key, Object value, long timeout, TimeUnit unit) {
AssertUtils.assertNotEmpty(namespace, "put缓存namespace");
AssertUtils.assertNotEmpty(key, "put缓存key");
AssertUtils.assertNotEmpty(value, "put缓存value");
AssertUtils.assertNotEmpty(unit, "put缓存unit"); createNamespace(namespace); String className = value.getClass().getName();
JSONObject json = new JSONObject();
json.put("class", className);
json.put("data", JSON.toJSONString(value)); stringRedis.set(fullKey(namespace, key), json.toJSONString(),timeout,unit);
} @Override
public <T> T get(String key) {
return get(CacheContents.DEFAULT_CONTEXT, key);
} @Override
public <T> T get(String namespace, String key) {
AssertUtils.assertNotEmpty(namespace, "get缓存namespace");
AssertUtils.assertNotEmpty(key, "get缓存key"); String value = stringRedis.get(fullKey(namespace, key));
if(!StringUtils.hasText(value)) {
return null;
} JSONObject json = JSON.parseObject(value);
String className = json.getString("class");
if(!StringUtils.hasText(className)) {
return null;
} Class<?> clazz;
try {
clazz = Class.forName(className);
T rs = JSON.parseObject(json.getString("data"), clazz);
return rs;
} catch (Exception e) {
throw new RuntimeException(e);
}
} @Override
public void remove(String key) {
remove(CacheContents.DEFAULT_CONTEXT, key);
} @Override
public void remove(String namespace, String key) {
AssertUtils.assertNotEmpty(namespace, "remove缓存namespace");
AssertUtils.assertNotEmpty(key, "remove缓存key");
redisTemplate.delete(fullKey(namespace, key));
} @Override
public void createNamespace(String namespace) {
AssertUtils.assertNotEmpty(namespace, "createNamespace缓存namespace");
if(!namespaces().contains(namespace)){
listRedis.leftPush(CacheContents.NAMESPACE_LIST, namespace);
}
} @Override
public void deleteNamespace(String namespace) {
AssertUtils.assertNotEmpty(namespace, "deleteNamespace缓存namespace");
int index = namespaces().indexOf(namespace);
if(-1 != index){
listRedis.remove(CacheContents.NAMESPACE_LIST, index, namespace);
}
redisTemplate.delete(keys(namespace)); } @Override
public List<String> namespaces() {
//无值返回[]非null
return listRedis.range(CacheContents.NAMESPACE_LIST, 0, -1);
} @Override
public Set<String> keys() {
//无值返回[]非null
return redisTemplate.keys("*");
} @Override
public Set<String> keys(String namespace) {
AssertUtils.assertNotEmpty(namespace, "keys缓存namespace");
if(null==namespace){
namespace = CacheContents.DEFAULT_CONTEXT;
}
//无值返回[]非null
return redisTemplate.keys(namespace+":*");
} @Override
public void clearAll() {
redisTemplate.getConnectionFactory().getConnection().flushAll();
} @Override
public void clearDb() {
redisTemplate.getConnectionFactory().getConnection().flushDb();
} /**
* <br>描 述: redis里可没什么命名空间
* <br>作 者: shizhenwei
*/
private String fullKey(String namespace,String key){
return namespace+":"+key;
}
}

3.常量类

package com.sze.redis.util;
/**
*
* <br>类 名: CacheContents
* <br>描 述: 缓存常量
* <br>作 者: shizhenwei
* <br>创 建: 2017年5月31日
* <br>版 本: v0.0.2
* <br>
* <br>历 史: (版本) 作者 时间 注释
*/
public interface CacheContents {
/**
* 存放所有的命名空间
*/
String NAMESPACE_LIST = "_namespace_list_"; /**
* 默认存储空间
*/
String DEFAULT_CONTEXT = "_defualt_context_"; /**
* Session信息空间
*/
String SESSION_CONTEXT = "_session_context_"; /**
* 用户登录信息空间
*/
String USER_CONTEXT = "_user_context_"; }

4.断言类

package com.sze.redis.util;

import java.util.Collection;
import java.util.Map; import com.sze.redis.exception.SzwRunTimeException; /**
* <br>类 名: AssertUtils
* <br>描 述: 断言 校验类
* <br>作 者: shizhenwei
* <br>创 建: 2017年9月12日
* <br>版 本: v1.0.0
* <br>
* <br>历 史: (版本) 作者 时间 注释
*/
public class AssertUtils { /**
* 判断是否为NULL
* @param obj
* @param label
*/
public static void assertNotNull(Object obj, String label) {
if(null == obj){
throw new SzwRunTimeException(label + "不能为空");
}
} /**
* 判断是否为空
* @param obj
* @param label
*/
public static void assertNotEmpty(Object obj, String label) {
if(null != obj){
if(obj instanceof String){
String string = (String) obj;
if("".equals(string.trim())){
throw new SzwRunTimeException(label + "不能为空");
}
}else if(obj.getClass().isArray()){
if(((Object[])obj).length<1){
throw new SzwRunTimeException(label + "不能为空");
}
}else if(obj instanceof Collection){
if(((Collection<?>)obj).size()<1){
throw new SzwRunTimeException(label + "不能为空");
}
}else if(obj instanceof Map){
if(((Map<?, ?>)obj).size()<1){
throw new SzwRunTimeException(label + "不能为空");
}
}
}else{
throw new SzwRunTimeException(label + "不能为NULL");
}
} /**
* 判断数组不能为空
* @param array
* @param label
*/
public static <T> void assertArrayNotEmpty(T[] array, String label){
if(null!=array){
if(array.length<1){
throw new SzwRunTimeException(label + "不能为空");
}
}else{
throw new SzwRunTimeException(label + "不能为NULL");
}
} /**
* 判断集合不能为空
* @param array
* @param label
*/
public static <T> void assertCollectionNotEmpty(Collection<T> collection, String label){
if(null!=collection){
if(collection.size()<1){
throw new SzwRunTimeException(label + "不能为空");
}
}else{
throw new SzwRunTimeException(label + "不能为NULL");
}
} /**
* 判断Map不能为空
* @param array
* @param label
*/
public static <E, T> void assertMapNotEmpty(Map<E, T> map, String label) {
if(null!=map){
if(map.size()<1){
throw new SzwRunTimeException(label + "不能为空");
}
}else{
throw new SzwRunTimeException(label + "不能为NULL");
}
}
}

5.自定义异常类

package com.sze.redis.exception;

public class SzwRunTimeException extends RuntimeException{

    /** **/
private static final long serialVersionUID = 8924997566380919394L; public SzwRunTimeException() {
super();
} public SzwRunTimeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
} public SzwRunTimeException(String message, Throwable cause) {
super(message, cause);
} public SzwRunTimeException(String message) {
super(message);
} public SzwRunTimeException(Throwable cause) {
super(cause);
} }

SpringBoot Redis工具类封装的更多相关文章

  1. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

  2. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

  3. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战

    笔记 4.Redis工具类封装讲解和实战     简介:高效开发方式 Redis工具类封装讲解和实战         1.常用客户端 https://redisdesktop.com/download ...

  4. springboot redis工具类

    package com.vv.boot.util; import java.util.List; import java.util.Map; import java.util.Set; import ...

  5. SpringBoot整合Redis及Redis工具类撰写

            SpringBoot整合Redis的博客很多,但是很多都不是我想要的结果.因为我只需要整合完成后,可以操作Redis就可以了,并不需要配合缓存相关的注解使用(如@Cacheable). ...

  6. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  7. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  8. spring boot 使用redis 及redis工具类

    1-添加maven依赖 2-添加redis配置 3-工具类 1-添加maven依赖 实际上是封装了jedis <!-- redis 依赖--> <dependency> < ...

  9. java中的redis工具类

    1.redis基础类 package com.qlchat.component.redis.template; import javax.annotation.PostConstruct; impor ...

随机推荐

  1. 关于WPF界面框架MahApps.Metro的一个BUG

    碰到了这个问题,记录一下,以便以后查阅: 在一个WPF项目中使用MahApps.Metro界面框架,其中有一个功能是嵌入一个带句柄的标记. 首先WPF是出了窗体和WebBrowser带有句柄外,其他控 ...

  2. 如何让git小乌龟工具TortoiseGit记住你的账号密码

    在使用小乌龟的过程中,发下每次push或者pull都要重复输入账号密码,非常麻烦. 如果能记住账号密码就好了,这样就省去了时间. 怎么设置记住密码 在[系统盘]:\Users[你的用户名]下面,有一个 ...

  3. python如何连接mysql数据库

    先花点时间来说说一个程序怎么和数据库进行交互1.和数据库建立连接2.执行sql语句,接收返回值3.关闭数据库连接使用MySQLdb也要遵循上面的几步.让我们一步步的进行. 1.MySQL数据库要用My ...

  4. Win2k8&&vCenter部署全流程

    几个不同的组件 vCenter Server:对ESXi主机进行集中管理的服务器端软件,安装在windows server 2008R2或以上的操作系统里,通过SQL 2008R2 或以上版本的数据库 ...

  5. 【转】如何彻底删除SVN中的文件和文件夹(附恢复方法)

    这里假设SVN项目的目录为 /data/svn/project,我们想排除trunk/test.exe文件和trunk/notallowed/目录,操作步骤如下及执行的svn命令(在svn安装目录的b ...

  6. Linux Linux程序练习二

    /* 编写一个程序读取a.txt文件,将文件内容数字从小到大排序,并将排序结果写入b.txt. */ #include <stdio.h> #include <stdlib.h> ...

  7. Spring入门之AOP篇

    听了几节IT黑马营的SPRING课程,照着例程写了一个SPRING 中AOP的例子:  一.准备工作 下载复制或配置JAR包.图方便,我将下载的SPRING包都加上去了.另外还需要aspectj的两个 ...

  8. 高性能图片服务器–ZIMG(转)

    2011年李彦宏在百度联盟峰会上就提到过互联网的读图时代已经到来1,图片服务早已成为一个互联网应用中占比很大的部分,对图片的处理能力也相应地变成企业和开发者的一项基本技能.需要处理海量图片的典型应用有 ...

  9. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.2——将Eclipse开发的项目导入到AndroidStudio

    问题: 你想要将一个Eclipse ADT项目导入到Android Studio中. 解决方案: Android Studio提供了一个导入向导,可以重写已有的项目. 详细: 在Android Stu ...

  10. MySQL没有远程连接权限设置

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges ...