RedisUtil工具类

RedisUtil工具类
简单写了一个RedisUtil工具类,供大家参考

package com.ssm.service;

import com.alibaba.fastjson.JSON;
import com.ssm.entity.LoanInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;

import java.util.Set;
import java.util.concurrent.TimeUnit;

@Component
public class RedisUtil {


    private static RedisTemplate<String,Object> redisTemplate;

    @Autowired
    public void setRedisTemplate(RedisTemplate<String,Object> redisTemplate){
        this.redisTemplate = redisTemplate;
    }


    /**
     * 存单个实体
     * @param key
     * @param object
     */
    public static void addToRedis(String key,Object object){
       // redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        //没有设置过期时间
        redisTemplate.opsForValue().set(key,object);
    }


    /**
     * redis中是否存在key
     * @param key   需要查找的key
     * @return
     */
    public static boolean hasKey(String key){
        return redisTemplate.hasKey(key);
    }

    /**
     * 删除redis中指定的键值对
     * @param key
     */
    public static void deleteKey(String key){
        redisTemplate.delete(key);
    }


    /**
     * 模糊删除键值对
     * @param patternKey
     */
    public static void batchDeletekey(String patternKey){
        Set<String> set = redisTemplate.keys(patternKey);
        redisTemplate.delete(set);
        //redisTemplate.expire()
        //redisTemplate.execute()  这两个的用法
    }



    /**
     * 通过key获取value(list)
     * @param key
     * @return  返回的list集合
     */
    public static Object getValue(String key){
        /**
         * 也可以使用Jackson2JsonRedisSerializer进行序列化,需要提供一个实体类参数
         * 需要注意几点:
         *     1.序列化和反序列化需要使用同一种序列化器
         *     2.使用Jackson2JsonRedisSerializer存带泛型的list时,是以map的结构存的,取的时候不能直接转换为实体对象,否则
         *     会报类型转换异常,对此有两种解决方案:
         *      (1)直接存list<T>类型,取的时候若需要遍历每一个对象,则先将对象转为json字符串,再将json字符串转为实体对象
         *      (2)存的时候讲list<T>转为json字符串进行存储,取的时候再讲json字符串转为list
         *     3.任何类型都可以转为Object类型,Object类型也可以强制转为任何类型,但是强制转换,工具在编译的时候会提示类型不安全,此时需要用
         *     instance of 来进行类型校验
         *     4.Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer的区别
         *      相同点:在redis中都是以json格式存储,直观好看
         *      不同点:GenericJackson2JsonRedisSerializer存储时保存了实体类的包名和类目,这也是为什么这种序列化方式可以直接转换实体对象的原因
         *      相比较而言,Jackson2JsonRedisSerializer的效率更高,因为存储的内容要少
         */
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        Object object = redisTemplate.opsForValue().get(key);
        return object;
    }


    /**
     * 模糊查找key
     * @param pattern
     * @return
     */
    public static Set<String> getKeys(String pattern){
       return redisTemplate.keys(pattern);
    }

}

应用:

String key = idCard + "AllLoanInfo";
		if(redisUtil.hasKey(key)){
		     //redis中有,就去redis中取
			infos = (List<LoanInfo>)redisUtil.getValue(key);
        }else{
		    //没有则去数据库查,查完有值再放入redis
            infos = userService.queryLoanInfoByIdCard(idCard);
            if(infos != null && infos.size()>0){
				redisUtil.addToRedis(key,infos);
            }
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值