redis工具类

redis-util

1.demo

package com.pwc.ddc.redisutil.servcie.imp;
​
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.pwc.ddc.redisutil.entity.Student;
import com.pwc.ddc.redisutil.servcie.MemoryCacheForRedis;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
​
import java.util.*;
import java.util.concurrent.TimeUnit;
​
/**
 * MemoryCacheForRedisImp
 *
 * @author hongjun.h.zhang@cn.pwc.com
 * @description TODO
 * @date 2022/12/21 17:17
 */
public class MemoryCacheForRedisImp implements MemoryCacheForRedis {
    public static RedisTemplate<String,String> redisTemplate;
    public static ValueOperations<String, String> stringOperations;
​
    private static String[] KEY = new String[]{"test1","test2","test3","test4","test5","test6","test7","test8","test9"};
​
  static  {
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
        configuration.setDatabase(5);
        configuration.setHostName("120.48.69.173");
        configuration.setPassword("admin@pwc");
        configuration.setPort(6379);
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(configuration);
        jedisConnectionFactory.afterPropertiesSet();
        redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory);
        redisTemplate.afterPropertiesSet();
        stringOperations = redisTemplate.opsForValue();
    }
​
    public static void main(String[] args) {
//      init();
       test();
    }
​
   
​
    public static void init(){
        for (String s : KEY) {
            redisTemplate.delete(s);
        }
    }
​
​
    @Override
    public Long getExpire(String key) {
        return redisTemplate.getExpire(key);
    }
​
    @Override
    public Boolean expire(String key, long time) {
      redisTemplate.expire(key,time,TimeUnit.SECONDS);
        return true;
    }
​
    @Override
    public Boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }
​
    @Override
    public Boolean delete(String key) {
      redisTemplate.delete(key);
        return true;
    }
​
    @Override
    public Boolean delete(List<String> keys) {
      redisTemplate.delete(keys);
        return true;
    }
​
    @Override
    public <T> void set(String key, T value) {
      stringOperations.set(key,JSON.toJSONString(value));
    }
​
    @Override
    public <T> void set(String key, Collection<T> values) {
        stringOperations.set(key,JSON.toJSONString(values));
    }
​
    @Override
    public <T> void set(String key, T value, long timeout, TimeUnit unit) {
          stringOperations.set(key,JSON.toJSONString(value),timeout,unit);
    }
​
    @Override
    public <T> void set(String key, T value, long timeout) {
         set(key,value,timeout,TimeUnit.SECONDS);
    }
​
    @Override
    public <T> Boolean setIfAbsent(String key, T value) {
     return stringOperations.setIfAbsent(key,JSON.toJSONString(value));
    }
​
    @Override
    public <T> Boolean setIfAbsent(String key, T value, long timeout, TimeUnit unit) {
        return stringOperations.setIfAbsent(key,JSON.toJSONString(value),timeout,unit);
    }
​
    @Override
    public void multiSet(Map<String, Object> map) {
      Map<String,String> stringMap = new HashMap<>();
        for (Map.Entry<String, Object> stringObjectEntry : map.entrySet()) {
            stringMap.put(stringObjectEntry.getKey(),JSON.toJSONString(stringObjectEntry.getValue()));
        }
        stringOperations.multiSet(stringMap);
    }
​
    @Override
    public Boolean multiSetIfAbsent(Map<String, Object> map) {
        Map<String,String> stringMap = new HashMap<>();
        for (Map.Entry<String, Object> stringObjectEntry : map.entrySet()) {
                stringMap.put(stringObjectEntry.getKey(),JSON.toJSONString(stringObjectEntry.getValue()));
        }
        return stringOperations.multiSetIfAbsent(stringMap);
    }
​
    @Override
    public <T> T get(String key, Class<T> t) {
        String str = stringOperations.get(key);
        return JSON.parseObject(str, t);
    }
​
    @Override
    public <T> Collection<T> gets(String key, Class<T> t) {
        String str = stringOperations.get(key);
        return JSON.parseArray(str, t);
    }
​
    @Override
    public <T> T getAndSet(String key, T value, Class<T> t) {
        T ret = get(key, t);
        set(key,value);
        return JSON.parseObject(stringOperations.getAndSet(key,JSON.toJSONString(value)),t);
    }
​
    @Override
    public <T> List<T> multiGet(Collection<String> keys, Class<T> t) {
        List<String> list = stringOperations.multiGet(keys);
        List<T> ret = new ArrayList<>();
        if (list == null){
            return ret;
        }
        for (String str : list) {
            try{
                ret.add(JSON.parseObject(str,t));
                continue;
            }catch (JSONException e){
​
            }
​
            try{
                List<T> ts = JSON.parseArray(str, t);
                for (T temp : ts) {
                    ret.add(temp);
                }
            }catch (JSONException e){
​
            }
        }
        return ret;
    }
​
    @Override
    public Long size(String key) {
        if (!hasKey(key)){
            return 0L;
        }
        String str = stringOperations.get(key);
        try{
            List<String> list = JSON.parseArray(str, String.class);
            return (long) list.size();
        }catch (Exception e){
​
        }
        return 1L;
    }
}

2.实体类

package com.pwc.ddc.redisutil.entity;
​
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
​
/**
 * Student
 *
 * @author hongjun.h.zhang@cn.pwc.com
 * @description TODO
 * @date 2022/12/21 20:07
 */
public class Student {
    private int id;
    private String username;
    private String sex;
    private int age;
    private String school;
​
    public Student(int id, String username, String sex, int age, String school) {
        this.id = id;
        this.username = username;
        this.sex = sex;
        this.age = age;
        this.school = school;
    }
​
    private static Random random = new Random();
    private static String[] USERNAME_DIC = {"张三","李四","王五","路人甲","路人乙"};
    private static String[] SEX_DIC = {"男","女"};
    private static String[] SCHOOL_DIC = {"学校一","学校二","学校三","学校四","学校五"};
​
    public Student() {
    }
​
    public int getId() {
        return id;
    }
​
    public void setId(int id) {
        this.id = id;
    }
​
    public String getUserName() {
        return username;
    }
​
    public void setUserName(String username) {
        this.username = username;
    }
​
    public String getSex() {
        return sex;
    }
​
    public void setSex(String sex) {
        this.sex = sex;
    }
​
    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        this.age = age;
    }
​
    public String getSchool() {
        return school;
    }
​
    public void setSchool(String school) {
        this.school = school;
    }
​
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", school='" + school + '\'' +
                '}';
    }
​
    public static List<Student> getRandomStudent(int count){
        List<Student> ret = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            ret.add(getRandomStudent());
        }
        return ret;
    }
​
    public static Student getRandomStudent(){
          return new Student(random.nextInt(100),USERNAME_DIC[random.nextInt(USERNAME_DIC.length)]
          ,SEX_DIC[random.nextInt(SEX_DIC.length)],random.nextInt(100),SCHOOL_DIC[random.nextInt(SCHOOL_DIC.length)]);
    }
}

5.测试类

public static void test(){
    init();
    MemoryCacheForRedisImp imp = new MemoryCacheForRedisImp();
    System.out.println("在redis写入"+KEY[0]);
    System.out.println("在redis写入"+KEY[1]);
    imp.set(KEY[0], Student.getRandomStudent());
    imp.set(KEY[1], Student.getRandomStudent(),1000,TimeUnit.SECONDS);
    System.out.println(KEY[0] +"的有效期为"+ imp.getExpire(KEY[0]));
    System.out.println(KEY[1] +"的有效期为"+ imp.getExpire(KEY[1]));
    System.out.println("判断是否含键:"+KEY[0]+ imp.hasKey(KEY[0]));
    System.out.println("判断是否含键:"+KEY[2]+ imp.hasKey(KEY[2]));
    Student student = imp.get(KEY[0], Student.class);
    System.out.println(KEY[0] +"的值为"+ student.toString());
​
    System.out.println("开始调用setIfAbsent方法:");
    System.out.println("开始写入"+KEY[1]+"结果为:" + imp.setIfAbsent(KEY[1], Student.getRandomStudent()));
    System.out.println("开始写入"+KEY[2]+"结果为:" + imp.setIfAbsent(KEY[2], Student.getRandomStudent()));
​
    System.out.println("开始调用multiSet方法:");
    Map<String,Object> map = new HashMap<>();
    map.put(KEY[3], Student.getRandomStudent());
    map.put(KEY[4], Student.getRandomStudent());
    map.put(KEY[5], Student.getRandomStudent());
    imp.multiSet(map);
    System.out.println("查询redis中结果");
    System.out.println(imp.get(KEY[3], Student.class));
    System.out.println(imp.get(KEY[4], Student.class));
    System.out.println(imp.get(KEY[5], Student.class));
​
    System.out.println("开始调用multiSetIfAbsent方法:");
    Map<String,Object> map2 = new HashMap<>();
    map2.put(KEY[4], Student.getRandomStudent());
    map2.put(KEY[5], Student.getRandomStudent());
    map2.put(KEY[6], Student.getRandomStudent());
    System.out.println(imp.get(KEY[4], Student.class));
    System.out.println(imp.get(KEY[5], Student.class));
    imp.multiSetIfAbsent(map2);
    System.out.println("查询redis中结果");
    System.out.println(imp.get(KEY[4], Student.class));
    System.out.println(imp.get(KEY[5], Student.class));
    System.out.println(imp.get(KEY[6], Student.class));
​
    System.out.println("开始测试集合放入和取出功能");
    imp.set(KEY[7], Student.getRandomStudent(4));
    Collection<Student> gets = imp.gets(KEY[7], Student.class);
    for (Student get : gets) {
        System.out.println(get.toString());
    }
​
    System.out.println("开始测试getAndSet");
    System.out.println(KEY[6] + "当前值为" + imp.get(KEY[6], Student.class));
    System.out.println(KEY[6] + "通过getAndSet获取值为" + imp.getAndSet(KEY[6],Student.getRandomStudent(), Student.class));
    System.out.println(KEY[6] + "当前值为" + imp.get(KEY[6], Student.class));
​
    System.out.println("开始测试multiAndGet");
    List<String> list = new ArrayList<>();
    list.add(KEY[5]);
    list.add(KEY[6]);
    list.add(KEY[7]);
    List<Student> students = imp.multiGet(list, Student.class);
    for (Student temp : students) {
        System.out.println("结果为:"+ temp.toString());
    }
    init();
​
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值