zoukankan      html  css  js  c++  java
  • redistemplate优雅地操作redis redis 工具类

    参考:https://www.cnblogs.com/superfj/p/9232482.html

    redis 工具类

    
    
    package com.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Component;
    
    import java.util.Collection;
    import java.util.Date;
    import java.util.Set;
    import java.util.concurrent.TimeUnit;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    @Component
    public class RedisService {
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
    
        /**
         * 默认过期时长,单位:秒
         */
        public static final long DEFAULT_EXPIRE = 60 * 60 * 24;
    
        /**
         * 不设置过期时长
         */
        public static final long NOT_EXPIRE = -1;
    
    
    
    
        public boolean existsKey(String key) {
            return redisTemplate.hasKey(key);
        }
    
        /**
         * 重名名key,如果newKey已经存在,则newKey的原值被覆盖
         *
         * @param oldKey
         * @param newKey
         */
        public void renameKey(String oldKey, String newKey) {
            redisTemplate.rename(oldKey, newKey);
        }
    
        /**
         * newKey不存在时才重命名
         *
         * @param oldKey
         * @param newKey
         * @return 修改成功返回true
         */
        public boolean renameKeyNotExist(String oldKey, String newKey) {
            return redisTemplate.renameIfAbsent(oldKey, newKey);
        }
    
        /**
         * 删除key
         *
         * @param key
         */
        public void deleteKey(String key) {
            redisTemplate.delete(key);
        }
    
        /**
         * 删除多个key
         *
         * @param keys
         */
        public void deleteKey(String... keys) {
            Set<String> kSet = Stream.of(keys).map(k -> k).collect(Collectors.toSet());
            redisTemplate.delete(kSet);
        }
    
        /**
         * 删除Key的集合
         *
         * @param keys
         */
        public void deleteKey(Collection<String> keys) {
            Set<String> kSet = keys.stream().map(k -> k).collect(Collectors.toSet());
            redisTemplate.delete(kSet);
        }
    
        /**
         * 设置key的生命周期
         *
         * @param key
         * @param time
         * @param timeUnit
         */
        public void expireKey(String key, long time, TimeUnit timeUnit) {
            redisTemplate.expire(key, time, timeUnit);
        }
    
        /**
         * 指定key在指定的日期过期
         *
         * @param key
         * @param date
         */
        public void expireKeyAt(String key, Date date) {
            redisTemplate.expireAt(key, date);
        }
    
        /**
         * 查询key的生命周期
         *
         * @param key
         * @param timeUnit
         * @return
         */
        public long getKeyExpire(String key, TimeUnit timeUnit) {
            return redisTemplate.getExpire(key, timeUnit);
        }
    
        /**
         * 将key设置为永久有效
         *
         * @param key
         */
        public void persistKey(String key) {
            redisTemplate.persist(key);
        }
    
    
    }

    redis的key工具类

    package com.util;
    
    /**
     * redisKey设计
     */
    public class RedisKeyUtil {
    
        /**
         * redis的key
         * 形式为:
         * 表名:主键名:主键值:列名
         *
         * @param tableName 表名
         * @param majorKey 主键名
         * @param majorKeyValue 主键值
         * @param column 列名
         * @return
         */
        public static String getKeyWithColumn(String tableName,String majorKey,String majorKeyValue,String column){
            StringBuffer buffer = new StringBuffer();
            buffer.append(tableName).append(":");
            buffer.append(majorKey).append(":");
            buffer.append(majorKeyValue).append(":");
            buffer.append(column);
            return buffer.toString();
        }
        /**
         * redis的key
         * 形式为:
         * 表名:主键名:主键值
         *
         * @param tableName 表名
         * @param majorKey 主键名
         * @param majorKeyValue 主键值
         * @return
         */
        public static String getKey(String tableName,String majorKey,String majorKeyValue){
            StringBuffer buffer = new StringBuffer();
            buffer.append(tableName).append(":");
            buffer.append(majorKey).append(":");
            buffer.append(majorKeyValue).append(":");
            return buffer.toString();
        }
    }
    View Code

    测试类:

    测试类:
    
    package com.config;
    
    import com.domain.UserVo;
    import com.service.RedisService;
    import com.util.RedisKeyUtil;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.redis.core.*;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import javax.annotation.Resource;
    
    import java.util.Set;
    import java.util.concurrent.TimeUnit;
    
    import static org.junit.Assert.*;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class RedisConfigTest {
    
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        @Resource
        private ValueOperations<String,Object> valueOperations;
    
        @Autowired
        private HashOperations<String, String, Object> hashOperations;
    
        @Autowired
        private ListOperations<String, Object> listOperations;
    
        @Autowired
        private SetOperations<String, Object> setOperations;
    
        @Autowired
        private ZSetOperations<String, Object> zSetOperations;
    
        @Resource
        private RedisService redisService;
    
        @Test
        public void testObj() throws Exception{
            UserVo userVo = new UserVo();
            userVo.setAddress("上海");
            userVo.setName("测试dfas");
            userVo.setAge(123);
            ValueOperations<String,Object> operations = redisTemplate.opsForValue();
            redisService.expireKey("name",20, TimeUnit.SECONDS);
            String key = RedisKeyUtil.getKey(UserVo.Table,"name",userVo.getName());
            UserVo vo = (UserVo) operations.get(key);
            System.out.println(vo);
        }
    
        @Test
        public void testValueOption( )throws  Exception{
            UserVo userVo = new UserVo();
            userVo.setAddress("上海");
            userVo.setName("jantent");
            userVo.setAge(23);
            valueOperations.set("test",userVo);
    
            System.out.println(valueOperations.get("test"));
        }
    
        @Test
        public void testSetOperation() throws Exception{
            UserVo userVo = new UserVo();
            userVo.setAddress("北京");
            userVo.setName("jantent");
            userVo.setAge(23);
            UserVo auserVo = new UserVo();
            auserVo.setAddress("n柜昂周");
            auserVo.setName("antent");
            auserVo.setAge(23);
            setOperations.add("user:test",userVo,auserVo);
            Set<Object> result = setOperations.members("user:test");
            System.out.println(result);
        }
    
        @Test
        public void HashOperations() throws Exception{
            UserVo userVo = new UserVo();
            userVo.setAddress("北京");
            userVo.setName("jantent");
            userVo.setAge(23);
            hashOperations.put("hash:user",userVo.hashCode()+"",userVo);
            System.out.println(hashOperations.get("hash:user",userVo.hashCode()+""));
        }
    
        @Test
        public void  ListOperations() throws Exception{
            UserVo userVo = new UserVo();
            userVo.setAddress("北京");
            userVo.setName("jantent");
            userVo.setAge(23);
    //        listOperations.leftPush("list:user",userVo);
    //        System.out.println(listOperations.leftPop("list:user"));
            // pop之后 值会消失
            System.out.println(listOperations.leftPop("list:user"));
        }
    }
    
    注解缓存的使用
    
        @Cacheable:在方法执行前Spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;没有则调用方法并将方法返回值放进缓存。
    
        @CachePut:将方法的返回值放到缓存中。
    
        @CacheEvict:删除缓存中的数据。
    
    最后所有的代码都被上传到我的github喜欢的话,给个start
    View Code

    注解缓存的使用

    • @Cacheable:在方法执行前Spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;没有则调用方法并将方法返回值放进缓存。

    • @CachePut:将方法的返回值放到缓存中。

    • @CacheEvict:删除缓存中的数据。

    最后所有的代码都被上传到我的github喜欢的话,给个start

  • 相关阅读:
    解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法
    Linux下安装rpm出现error: Failed dependencies
    使用WordPress搭建个人博客
    Log4j不写入日志文件排错记录
    JAVA EE,JAVA SE,JAVA ME,JDK,JRE,JVM之间的区别
    [转]【maven】解决Missing artifact jdk.tools:jdk.tools:jar:1.6
    Eclipse新建项目介绍
    Android开发-API指南-<permission-group>
    Android开发-API指南-<permission>
    Android开发-API指南-<path-permission>
  • 原文地址:https://www.cnblogs.com/lshan/p/10271447.html
Copyright © 2011-2022 走看看