Redis缓存工具类(夏顺辉)

这里写图片描述

1、首先前提是集成了mvn-redis模块

RedisAspect.java代码如下:

/*
 * 文件名:ddd.java
 * 版权:©Copyright by www.sowell-tech.cn
 * 描述:
 * 修改人:Administrator
 * 修改时间:2017年4月17日
 * 修改内容:
 */

package com.sowell.service.impl.catchService;


import java.util.Arrays;
import java.util.List;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.sowell.common.util.StringUtil;

//把这个类声明为一个切面:需要把该类放入到IOC容器中,再声明为一个切面
@Aspect
@Component
public class RedisAspect {



    @Autowired
    RedisService  redisService;

    /**
     * 日志
     */
    private final Logger logger = Logger.getLogger(getClass());

    //坏绕通知:需要携带ProceedingJoinPoint类型的参数
    //环绕通知类似于动态代理的全过程:ProceedingJoinPoint类型的参数可以决定是否执行目标方法
    //且环绕通知必须有返回值,返回值即目标方法的返回值。
    @Around("execution(* com.sowell.controller.*Controller.*(..))")
    public Object aroundMethod(ProceedingJoinPoint pjd) {
        Object result = null;
        String methodName = pjd.getSignature().getName();
        Object args = Arrays.asList(pjd.getArgs());

        //执行目标方法
        try {
            logger.info("request channels begin, param{pageNum:" + methodName + ", pageSize:" + args);

            //前置通知
            System.out.println("Arround:The method "+methodName +" begins with "+ args);  

            String key = methodName+"_"+args;

            String jsonStr = redisService.getJsonString(key);
            // 如果数据库里配置的redis服务端中已经存在了这个key对应的数据,那么就将这个数据返回
            if (!StringUtil.isEmpty(jsonStr))
            {
               return jsonStr;
            }
            // 这条语句一直是切面前的逻辑,此方法的返回结果是调用此controller的返回值
            result = pjd.proceed();
            // 下面是切面后的逻辑。如果没有存储这个数据,那么就添加到redis中
            redisService.setString(key,result.toString());

            //后置通知
            System.out.println("Arround:The method "+ methodName+" ends");
        } catch (Throwable e) {
            e.printStackTrace();
            //异常通知
            System.out.println("Arround:The method "+ methodName+"occurs exception:"+e);
            //throw new RuntimeException(e);
            //不抛出异常的话,异常就被上面抓住,执行下去,返回result,result值为null,转换为int
        }
        //返回通知
        System.out.println("Arround:The method "+ methodName+" ends with the Result "+ result);

        return result;
    }

}

RedisService.java代码如下:

package com.sowell.service.impl.catchService;


import org.springframework.stereotype.Service;

import com.sowell.common.util.FastJsonUtils;
import com.sowell.redis.client.RedisClient;
import com.sowell.redis.route.RedisRoute;


/**
 * 此处为类说明
 * @author xiashunhui
 * @version v1.0
 * @since v1.0 2017年4月17日
 * @see 下午3:53:35
 */
@Service
public class RedisService {

    public String setObject(String key ,Object obj)
    {
          // 获取redis客户端
         RedisClient rClient = null;

         String jsonstr =null;
         try
         {
             rClient = RedisRoute.getRedisClient("");
             jsonstr  =FastJsonUtils.toJSONString(obj);

             if (null != rClient)
             {
               rClient.setStr(key, jsonstr);
             }
         }
         catch (Exception e)
         {
            e.printStackTrace();
            return jsonstr;
         }

         return jsonstr;
    }


    public String setString(String key ,String objstr)
    {
          // 获取redis客户端
         RedisClient rClient = null;

         try
         {
             rClient = RedisRoute.getRedisClient("");

             if (null != rClient)
             {
               rClient.setStr(key, objstr);
             }
         }
         catch (Exception e)
         {
            e.printStackTrace();
            return objstr;
         }

         return objstr;
    }


   public String  getJsonString(String key)
    {

       String result =null;
         // 获取redis客户端
        RedisClient rClient = null;
        try
        {   
            //如果参数为"",那么获取到的client也会为null,如果
            rClient = RedisRoute.getRedisClient("");

            if (null != rClient)
            {
                result = rClient.getStr(key);
            }
        }
        catch (Exception e)
        {
           e.printStackTrace();
        }


        return result;

    }


   public String delByKey(String key)
   {
         // 获取redis客户端
        RedisClient rClient = null;

        String jsonstr =null;
        try
        {
            rClient = RedisRoute.getRedisClient("");
            if (null != rClient)
            {
              rClient.delByDataType(key);
            }
        }
        catch (Exception e)
        {
           e.printStackTrace();
           return jsonstr;
        }

        return jsonstr;
   }

}
### 回答1: 我可以为你提供一个Redis缓存工具类的示例: import redis class RedisCache: def __init__(self, host, port, db): self.redis = redis.StrictRedis(host=host, port=port, db=db) def get(self, key): return self.redis.get(key) def set(self, key, value): self.redis.set(key, value) def delete(self, key): self.redis.delete(key) def flushall(self): self.redis.flushall() ### 回答2: Redis缓存工具类是一个用于简化和优化Redis缓存操作的工具类。下面是一个简单的示例: ```java import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisCacheUtil { private static JedisPool jedisPool; /** * 初始化Jedis连接池 */ static { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(100); // 最大连接数 config.setMaxIdle(20); // 最大空闲连接数 config.setTestOnBorrow(true); // 尝试借用一个连接时,是否进行有效性检测 jedisPool = new JedisPool(config, "localhost", 6379); // Redis连接信息 } /** * 从连接池获取Jedis实例 */ public static Jedis getJedis() { return jedisPool.getResource(); } /** * 将Jedis实例返回到连接池 */ public static void closeJedis(Jedis jedis) { if (jedis != null) { jedis.close(); } } /** * 设置缓存 */ public static void set(String key, String value) { Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.set(key, value); } finally { closeJedis(jedis); } } /** * 根据key获取缓存值 */ public static String get(String key) { Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.get(key); } finally { closeJedis(jedis); } } /** * 删除缓存 */ public static void delete(String key) { Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.del(key); } finally { closeJedis(jedis); } } } ``` 使用该工具类,可以通过简单的方法调用来实现Redis缓存的各种操作。示例如下: ```java public class RedisDemo { public static void main(String[] args) { RedisCacheUtil.set("key1", "value"); // 设置缓存 String value = RedisCacheUtil.get("key1"); // 获取缓存 System.out.println(value); RedisCacheUtil.delete("key1"); // 删除缓存 value = RedisCacheUtil.get("key1"); // 获取缓存 System.out.println(value); // 输出null } } ``` 通过使用这个简单的Redis缓存工具类,可以方便地进行Redis缓存的操作,提高缓存的效率和可维护性。当然,实际的缓存操作可以根据具体需求进行扩展和优化。 ### 回答3: Redis缓存工具类是用于简化与Redis数据库交互的工具。下面是一个示例实现: ``` import redis import pickle class RedisCache: def __init__(self, host, port, db): self.redis = redis.Redis(host=host, port=port, db=db) def set(self, key, value, expire=None): pickled_value = pickle.dumps(value) self.redis.set(key, pickled_value) if expire: self.redis.expire(key, expire) def get(self, key): pickled_value = self.redis.get(key) if pickled_value is not None: value = pickle.loads(pickled_value) return value return None def delete(self, key): self.redis.delete(key) def exists(self, key): return self.redis.exists(key) ``` 使用示例: ``` cache = RedisCache(host='localhost', port=6379, db=0) # 设置缓存 cache.set('user:1', {'name': 'Alice', 'age': 25}, expire=3600) # 获取缓存 user = cache.get('user:1') print(user) # 输出: {'name': 'Alice', 'age': 25} # 删除缓存 cache.delete('user:1') # 检查缓存是否存在 if cache.exists('user:1'): print('缓存存在') else: print('缓存不存在') ``` 这个简单的Redis缓存工具类封装了常用的操作方法,如set、get、delete和exists,并使用pickle模块将Python对象序列化成字符串再存储到Redis数据库中,以实现缓存数据的存储和获取。还可以通过设置过期时间来控制缓存的有效期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值