您当前的位置: 首页 >  redis

梁云亮

暂无认证

  • 1浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【精品】SpringBoot中整合Redis的简单封装及应用

梁云亮 发布时间:2022-09-22 15:17:33 ,浏览量:1

本项目提供的工具类,在实际项目中可直接使用。 相关博客:https://blog.csdn.net/lianghecai52171314/article/details/119851321

工具 配置文件
@EnableCaching
@Configuration
public class RedisConfig {
    /**
     * key序列化方式
     */
    private final StringRedisSerializer keySerializer = new StringRedisSerializer();
    @Resource
    private RedisConnectionFactory factory;
    /**
     * value序列化方式
     */
    private Jackson2JsonRedisSerializer valueSerializer = new Jackson2JsonRedisSerializer(Object.class);

    {
        //解决缓存转换异常的问题
        ObjectMapper objectMapper = new ObjectMapper();
        //下面两行解决Java8新日期API序列化问题
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        objectMapper.registerModule(new JavaTimeModule());
        //设置所有访问权限以及所有的实际类型都可序列化和反序列化
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        // 指定序列化输入的类型,类必须是非final修饰的
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
                ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        valueSerializer.setObjectMapper(objectMapper);
    }


    /**
     * 在Redis中以String保存键、以byte的形式保存值
     *
     * @return
     */
    @Bean
    public RedisTemplate byteRedisTemplate() {
        final RedisTemplate redisTemplate = new RedisTemplate();
        //设置key的序列化规则
        redisTemplate.setKeySerializer(keySerializer);
        // hash的key的序列化规则
        redisTemplate.setHashKeySerializer(keySerializer);

        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }

    /**
     * 在Redis中以String保存键、以json的形式保存值
     *
     * @return
     */
    @Bean
    public RedisTemplate jsonRedisTemplate() {
        final RedisTemplate redisTemplate = new RedisTemplate();
        //设置key的序列化规则
        redisTemplate.setKeySerializer(keySerializer);
        // hash的key的序列化规则
        redisTemplate.setHashKeySerializer(keySerializer);

        //hash的value的序列化规则,如果不指定默认是以二进制形式保存的
        redisTemplate.setHashValueSerializer(valueSerializer);
        //设置value的序列化规则
        redisTemplate.setValueSerializer(valueSerializer);

        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }

    //用来设置@Cacheable@CachePut@CacheEvict
    @Bean(name = "cacheManager")
    public RedisCacheManager cacheManager() {
        // 配置序列化(解决乱码的问题),通过config对象对缓存进行自定义配置
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                // 设置缓存的默认过期时间
                .entryTtl(Duration.ofDays(7))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer))
                // 不缓存空值
                .disableCachingNullValues();
        //缓存配置
        Map cacheConfig = new HashMap();

        //根据redis缓存配置和reid连接工厂生成redis缓存管理器
        RedisCacheManager redisCacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .transactionAware()
                .withInitialCacheConfigurations(cacheConfig)
                .build();
        return redisCacheManager;
    }
}
工具类
@Component
public class BaseRedisUtil {

    /**
     * 过期时间一周
     */
    private static final long WEEK_SECONDS = 7 * 24 * 60 * 60;

    @Setter
    private RedisTemplate redisTemplate;

    ///common///

    /**
     * 列举出所有的key的集合
     *
     * @return
     */
    public Set keys(String pattern) {
        try {
            Set keys = redisTemplate.keys(pattern);
            return keys;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 指定缓存失效时间
     *
     * @param key
     * @param time
     * @return
     */
    public boolean expire(String key, long time) {
        try {
            if (time > 0) {
                redisTemplate.expire(key, time, TimeUnit.SECONDS);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 根据key 获取过期时间
     *
     * @param key
     * @return
     */
    public long getExpire(String key) {
        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
    }

    /**
     * 判断key是否存在
     *
     * @param key
     * @return
     */
    public boolean exists(String key) {
        try {
            return redisTemplate.hasKey(key);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 删除缓存
     *
     * @param key
     */
    public boolean del(String... key) {
        if (key != null && key.length > 0) {
            if (key.length == 1) {
                redisTemplate.delete(key[0]);
            } else {
                redisTemplate.delete(Arrays.asList(key));
            }
            return true;
        }
        return false;
    }

    String

    /**
     * 普通缓存放入,永不过期
     *
     * @param key
     * @param value
     * @return
     */
    public boolean set(String key, E value) {
        try {
            //boundValueOps()
            redisTemplate.opsForValue().set(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
     *
     * @param key
     * @param value
     * @return
     */
    public E getSet(String key, E value) {
        try {
            final E res = redisTemplate.opsForValue().getAndSet(key, value);
            return res;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 普通缓存放入并设置时间
     *
     * @param key
     * @param value
     * @param expireTime 如果值为null,则使用默认的一周过期;如果值小于0则永不过期
     * @return
     */
    public boolean set(String key, E value, Long expireTime) {
        try {
            if (expireTime == null) {
                redisTemplate.opsForValue().set(key, value, WEEK_SECONDS, TimeUnit.SECONDS);
            } else {
                if (expireTime > 0) {
                    redisTemplate.opsForValue().set(key, value, expireTime, TimeUnit.SECONDS);
                } else {
                    //永不过期
                    redisTemplate.opsForValue().set(key, value);
                }
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 批量添加String
     *
     * @param map
     * @return
     */
    public boolean multiSet(Map map) {
        try {
            redisTemplate.opsForValue().multiSet(map);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 普通缓存获取
     *
     * @param key
     * @return
     */
    public E get(String key) {
        return key == null ? null : redisTemplate.opsForValue().get(key);
    }

    /**
     * 批量获取
     *
     * @param keys
     * @return
     */
    public List multiGet(Collection keys) {
        return redisTemplate.opsForValue().multiGet(keys);
    }


    ///Map/hash//

    /**
     * 向一张hash表中放入数据,永不过期
     *
     * @param key
     * @param entryKey
     * @param entryValue
     * @return
     */
    public boolean hset(String key, String entryKey, E entryValue) {
        try {
            redisTemplate.opsForHash().put(key, entryKey, entryValue);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 向一张hash表中放入数据,如果不存在将创建
     *
     * @param key
     * @param entryKey
     * @param entryValue
     * @param expireTime 如果值为null则使用默认一周不过期;如果 0) {
                    redisTemplate.opsForHash().put(key, entryKey, entryValue);
                    //使用指定的过期时间
                    expire(key, expireTime);
                } else {
                    //永不过期
                    hset(key, entryKey, entryValue);
                }
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 将Map中的元素放入set中,永不过期
     *
     * @param key
     * @param map
     * @return
     */
    public boolean hmset(String key, Map map) {
        try {
            redisTemplate.opsForHash().putAll(key, map);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * HashSet 并设置时间
     *
     * @param key
     * @param map
     * @param expireTime 如果值为null则使用默认一周不过期;如果 0) {
                    redisTemplate.opsForHash().putAll(key, map);
                    //使用指定的过期时间
                    expire(key, expireTime);
                } else {
                    //永不过期
                    hmset(key, map);
                }
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * HashGet
     *
     * @param key
     * @param entryKey
     * @return
     */
    public E hget(String key, String entryKey) {
        final HashOperations ops = redisTemplate.opsForHash();
        return ops.get(key, entryKey);
    }

    /**
     * 获取hashKey对应的所有键值
     *
     * @param key
     * @return
     */
    public Map hmget(String key) {
        final HashOperations ops = redisTemplate.opsForHash();
        return ops.entries(key);
    }

    /**
     * 删除hash表中的值
     *
     * @param key
     * @param entryKey
     */
    public boolean hdel(String key, String... entryKey) {
        return redisTemplate.opsForHash().delete(key, entryKey) > 0;
    }

    /**
     * 判断hash表中是否有该项的值
     *
     * @param key
     * @param entryKey
     * @return
     */
    public boolean hHasKey(String key, String entryKey) {
        return redisTemplate.opsForHash().hasKey(key, entryKey);
    }

    //set///

    /**
     * 将数据放入set缓存,永不过期
     *
     * @param key
     * @param values
     * @return
     */
    public long sSet(String key, E... values) {
        try {
            return redisTemplate.opsForSet().add(key, values);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 将set数据放入缓存
     *
     * @param key
     * @param expireTime
     * @param values
     * @return
     */
    public boolean sSet(String key, Long expireTime, E... values) {
        try {
            if (expireTime == null) {
                redisTemplate.opsForSet().add(key, values);
                //默认过期时间
                expire(key, WEEK_SECONDS);
            } else {
                if (expireTime > 0) {
                    redisTemplate.opsForSet().add(key, values);
                    //默认过期时间
                    expire(key, expireTime);
                } else {
                    //永不过期
                    sSet(key, values);
                }
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 根据key获取Set中的所有值
     *
     * @param key
     * @return
     */
    public Set sGet(String key) {
        try {
            return redisTemplate.opsForSet().members(key);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 根据value从set中查询是否存在
     *
     * @param key
     * @param value
     * @return
     */
    public boolean sHasValue(String key, E value) {
        try {
            return redisTemplate.opsForSet().isMember(key, value);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 获取set缓存的长度
     *
     * @param key
     * @return
     */
    public long sGetSetSize(String key) {
        try {
            return redisTemplate.opsForSet().size(key);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 移除值为value的元素
     *
     * @param key
     * @param values
     * @return
     */
    public long setRemove(String key, E... values) {
        try {
            Long count = redisTemplate.opsForSet().remove(key, values);
            return count;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /list

    /**
     * 将value放入缓存,永不过期
     *
     * @param key
     * @param value
     * @return
     */
    public boolean lSet(String key, E value) {
        try {
            redisTemplate.opsForList().rightPush(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 将value放入缓存,同时指定过期时间
     *
     * @param key
     * @param value
     * @param expireTime
     * @return
     */
    public boolean lSet(String key, E value, Long expireTime) {
        try {
            if (expireTime == null) {
                redisTemplate.opsForList().rightPush(key, value);
                //默认过期时间
                expire(key, WEEK_SECONDS);
            } else {
                if (expireTime > 0) {
                    redisTemplate.opsForList().rightPush(key, value);
                    //使用指定的过期时间
                    expire(key, expireTime);
                } else {
                    //永不过期
                    sSet(key, value);
                }
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 将list放入缓存
     *
     * @param key
     * @param value
     * @return
     */
    public boolean lSets(String key, List value) {
        try {
            redisTemplate.opsForList().rightPushAll(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 将list放入缓存,同时指定过期时间
     *
     * @param key
     * @param value
     * @param expireTime
     * @return
     */
    public boolean lSets(String key, List value, Long expireTime) {
        try {
            if (expireTime == null) {
                redisTemplate.opsForList().rightPushAll(key, value);
                //默认过期时间
                expire(key, WEEK_SECONDS);
            } else {
                if (expireTime > 0) {
                    redisTemplate.opsForList().rightPushAll(key, value);
                    //使用指定的过期时间
                    expire(key, expireTime);
                } else {
                    //永不过期
                    lSets(key, value);
                }
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 获取list缓存指定范围的数据
     *
     * @param key
     * @param start
     * @param end
     * @return
     */
    public List lGet(String key, Long start, Long end) {
        try {
            return redisTemplate.opsForList().range(key, start, end);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 获取list缓存的长度
     *
     * @param key
     * @return
     */
    public long lGetListSize(String key) {
        try {
            return redisTemplate.opsForList().size(key);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 获取list缓存中指定索引的值
     *
     * @param key
     * @param index
     * @return
     */
    public E lGetIndex(String key, Long index) {
        try {
            return redisTemplate.opsForList().index(key, index);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 修改list中的指定索引处的数据
     *
     * @param key
     * @param index
     * @param value
     * @return
     */
    public boolean lUpdateIndex(String key, Long index, E value) {
        try {
            redisTemplate.opsForList().set(key, index, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 从list中移除N个值为value的数据
     *
     * @param key
     * @param count
     * @param value
     * @return
     */
    public long lRemove(String key, Long count, E value) {
        try {
            Long remove = redisTemplate.opsForList().remove(key, count, value);
            return remove;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
}

为了实际应用中方便工具类的使用,特针对插入值为bytecode和JSON类型分别提代价工具类的两个实现类

key是字符串Value是Json的工具类实现类
@Component
public class JsonRedisUtil extends BaseRedisUtil {
    @Resource
    private RedisTemplate jsonRedisTemplate;

    @PostConstruct
    public void init() {
        setRedisTemplate(jsonRedisTemplate);
    }

    /**
     * 递增
     *
     * @param key
     * @param delta
     * @return
     */
    public long incr(String key, long delta) {
        if (delta  @PostConstruct(注释的方法)

测试 测试实体类:Province
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Province implements Serializable {

    @Serial
    private static final long serialVersionUID = -5425202191700860128L;

    private Long id;

    @NotBlank(message = "省名不能为空")
    @Length(max = 8, message = "省名最多只能是8个字符")
    private String name;

    @NotBlank(message = "大区不能为空")
    private String area;

    @NotNull(message = "显示优先级不能为空")
    @Min(value = 0, message = "显示优先级最小值为0")
    private Integer priority;

    @NotNull(message = "状态不能为空")
    @Min(value = 1, message = "状态最小值为1")
    @Max(value = 2, message = "状态最大值为2")
    private Integer state;
}
JsonRedisUtilTest
@SpringBootTest
public class JsonRedisUtilTest {
    @Resource
    private JsonRedisUtil provinceJsonRedisUtil;
    //测试自增自减
   
@Resource
    private JsonRedisUtil longJsonRedisUtil;

    @Test
    void testKey() {
        final Set keys = provinceJsonRedisUtil.keys("");
        System.out.println(keys);

        provinceJsonRedisUtil.getExpire("list1");
        provinceJsonRedisUtil.expire("list1", 60);

        System.out.println(provinceJsonRedisUtil.exists("list2"));

        provinceJsonRedisUtil.del("list1", "list2", "list3");
    }

    @Test
    void testString() {
        provinceJsonRedisUtil.set("str1", DataUtil.build(Province.class));
        provinceJsonRedisUtil.set("str2", DataUtil.build(Province.class), null);
        provinceJsonRedisUtil.set("str3", DataUtil.build(Province.class), 300L);
        provinceJsonRedisUtil.set("str4", DataUtil.build(Province.class), -1L);

        final HashMap map = new HashMap();
        map.put("p1", DataUtil.build(Province.class));
        map.put("p2", DataUtil.build(Province.class));
        map.put("p3", DataUtil.build(Province.class));
        map.put("p4", DataUtil.build(Province.class));
        provinceJsonRedisUtil.multiSet(map);

        final Province province = provinceJsonRedisUtil.get("str1");
        System.out.println(province);

        provinceJsonRedisUtil.getSet("p3", Province.builder().name("haha").area("xixi").build());
        final List list = provinceJsonRedisUtil.multiGet(List.of("p1", "p2", "p3"));
        list.forEach(System.out::println);
    }

    @Test
    void testHash() {
        provinceJsonRedisUtil.hset("hash11", "P1001", DataUtil.build(Province.class));
        provinceJsonRedisUtil.hset("hash12", "P1002", DataUtil.build(Province.class), null);
        provinceJsonRedisUtil.hset("hash13", "P1003", DataUtil.build(Province.class), 300L);
        provinceJsonRedisUtil.hset("hash14", "P1004", DataUtil.build(Province.class), -1L);

        Map map = new HashMap();
        map.put("P1005", DataUtil.build(Province.class));
        map.put("P1006", DataUtil.build(Province.class));
        map.put("P1007", DataUtil.build(Province.class));
        map.put("P1008", DataUtil.build(Province.class));
        provinceJsonRedisUtil.hmset("hash1", map);

        provinceJsonRedisUtil.hmset("hash2", map, null);
        provinceJsonRedisUtil.hmset("hash3", map, 300L);
        provinceJsonRedisUtil.hmset("hash4", map, -1L);

        final Province province = provinceJsonRedisUtil.hget("hash1", "P1001");
        System.out.println(province);

        final Map res = provinceJsonRedisUtil.hmget("hash1");
        res.forEach((k, v) -> System.out.println(k + " " + v));

        provinceJsonRedisUtil.hdel("hash4", "p1005", "p1006", "p1008");

        final boolean hasKey = provinceJsonRedisUtil.hHasKey("hash3", "p1003");
        System.out.println(hasKey);
    }

    @Test
    void testSet() {
        provinceJsonRedisUtil.sSet("set1", DataUtil.build(Province.class));

        final Province[] provinces = {DataUtil.build(Province.class), DataUtil.build(Province.class),
                DataUtil.build(Province.class), new Province()};
        provinceJsonRedisUtil.sSet("set2", null, provinces);
        provinceJsonRedisUtil.sSet("set3", 300L, provinces);
        provinceJsonRedisUtil.sSet("set4", -1L, provinces);

        final boolean r2 = provinceJsonRedisUtil.sHasValue("set4", new Province());
        System.out.println(r2);

        final long r3 = provinceJsonRedisUtil.sGetSetSize("set4");
        System.out.println(r3);

        provinceJsonRedisUtil.setRemove("set4", new Province());
        final Set r4 = provinceJsonRedisUtil.sGet("set4");
        r4.forEach(System.out::println);
    }

    @Test
    void testList() {
        provinceJsonRedisUtil.lSet("list1", DataUtil.build(Province.class));
        provinceJsonRedisUtil.lSet("list2", DataUtil.build(Province.class), null);
        provinceJsonRedisUtil.lSet("list3", DataUtil.build(Province.class), 300L);
        provinceJsonRedisUtil.lSet("list4", DataUtil.build(Province.class), -1L);

        List list = new ArrayList();
        list.add(DataUtil.build(Province.class));
        list.add(DataUtil.build(Province.class));
        list.add(DataUtil.build(Province.class));
        list.add(DataUtil.build(Province.class));
        list.add(DataUtil.build(Province.class));

        provinceJsonRedisUtil.lSets("list5", list);
        provinceJsonRedisUtil.lSets("list6", list, null);
        provinceJsonRedisUtil.lSets("list7", list, 300L);
        provinceJsonRedisUtil.lSets("list8", list, -1L);

        final List r1 = provinceJsonRedisUtil.lGet("list8", 1L, 3L);
        System.out.println(r1);

        final long length = provinceJsonRedisUtil.lGetListSize("list8");
        System.out.println(length);

        final Province r2 = provinceJsonRedisUtil.lGetIndex("list8", 3L);
        System.out.println(r2);

        final List list1 = provinceJsonRedisUtil.lGet("list8", 0L, -1L);
        list1.forEach(System.out::println);
        provinceJsonRedisUtil.lUpdateIndex("list8", 3L, DataUtil.build(Province.class));
        final List list2 = provinceJsonRedisUtil.lGet("list8", 0L, -1L);
        list2.forEach(System.out::println);

        provinceJsonRedisUtil.lSets("list9", List.of(new Province(), new Province(), new Province(), new Province()));
        provinceJsonRedisUtil.lRemove("list9", 2L, new Province());
        final List list3 = provinceJsonRedisUtil.lGet("list9", 0L, -1L);
        list3.forEach(System.out::println);
    }

    @Test
    void fun22() {
        longJsonRedisUtil.set("id2", 88L);
        longJsonRedisUtil.incr("id2", 100);
        longJsonRedisUtil.decr("id2", 50);

        longJsonRedisUtil.hset("hashid", "ID", 88L);
        longJsonRedisUtil.hincr("hashid", "ID", 100D);
        longJsonRedisUtil.hdecr("hashid", "ID", 50D);
    }
}

具体存储在Redis中的数据是Json形式的,比如: 在这里插入图片描述

ByteRedisUtilTest
@SpringBootTest
public class ByteRedisUtilTest {

    @Resource
    private ByteRedisUtil provinceByteRedisUtil;

    @Test
    void testKey() {
        final Set keys = provinceByteRedisUtil.keys("");
        System.out.println(keys);

        provinceByteRedisUtil.getExpire("list1");
        provinceByteRedisUtil.expire("list1", 60);

        System.out.println(provinceByteRedisUtil.exists("list2"));

        provinceByteRedisUtil.del("list1", "list2", "list3");
    }

    @Test
    void testString() {
        provinceByteRedisUtil.set("str1", DataUtil.build(Province.class));
        provinceByteRedisUtil.set("str2", DataUtil.build(Province.class), null);
        provinceByteRedisUtil.set("str3", DataUtil.build(Province.class), 300L);
        provinceByteRedisUtil.set("str4", DataUtil.build(Province.class), -1L);

        final HashMap map = new HashMap();
        map.put("p1", DataUtil.build(Province.class));
        map.put("p2", DataUtil.build(Province.class));
        map.put("p3", DataUtil.build(Province.class));
        map.put("p4", DataUtil.build(Province.class));
        provinceByteRedisUtil.multiSet(map);

        final Province province = provinceByteRedisUtil.get("str1");
        System.out.println(province);

        provinceByteRedisUtil.getSet("p3", Province.builder().name("haha").area("xixi").build());

        final List list = provinceByteRedisUtil.multiGet(List.of("p1", "p2", "p3"));
        list.forEach(System.out::println);
    }

    @Test
    void testHash() {
        provinceByteRedisUtil.hset("hash11", "P1001", DataUtil.build(Province.class));
        provinceByteRedisUtil.hset("hash12", "P1002", DataUtil.build(Province.class), null);
        provinceByteRedisUtil.hset("hash13", "P1003", DataUtil.build(Province.class), 300L);
        provinceByteRedisUtil.hset("hash14", "P1004", DataUtil.build(Province.class), -1L);

        Map map = new HashMap();
        map.put("P1005", DataUtil.build(Province.class));
        map.put("P1006", DataUtil.build(Province.class));
        map.put("P1007", DataUtil.build(Province.class));
        map.put("P1008", DataUtil.build(Province.class));
        provinceByteRedisUtil.hmset("hash1", map);

        provinceByteRedisUtil.hmset("hash2", map, null);
        provinceByteRedisUtil.hmset("hash3", map, 300L);
        provinceByteRedisUtil.hmset("hash4", map, -1L);

        final Province province = provinceByteRedisUtil.hget("hash1", "P1001");
        System.out.println(province);

        final Map res = provinceByteRedisUtil.hmget("hash1");
        res.forEach((k, v) -> System.out.println(k + " " + v));

        provinceByteRedisUtil.hdel("hash4", "p1005", "p1006", "p1008");

        final boolean hasKey = provinceByteRedisUtil.hHasKey("hash3", "p1003");
        System.out.println(hasKey);
    }

    @Test
    void testSet() {
        provinceByteRedisUtil.sSet("set1", DataUtil.build(Province.class));

        final Province[] provinces = {DataUtil.build(Province.class), DataUtil.build(Province.class),
                DataUtil.build(Province.class), new Province()};
        provinceByteRedisUtil.sSet("set2", null, provinces);
        provinceByteRedisUtil.sSet("set3", 300L, provinces);
        provinceByteRedisUtil.sSet("set4", -1L, provinces);

        final boolean r2 = provinceByteRedisUtil.sHasValue("set4", new Province());
        System.out.println(r2);

        final long r3 = provinceByteRedisUtil.sGetSetSize("set4");
        System.out.println(r3);

        provinceByteRedisUtil.setRemove("set4", new Province());
        final Set r4 = provinceByteRedisUtil.sGet("set4");
        r4.forEach(System.out::println);
    }

    @Test
    void testList() {
        provinceByteRedisUtil.lSet("list1", DataUtil.build(Province.class));
        provinceByteRedisUtil.lSet("list2", DataUtil.build(Province.class), null);
        provinceByteRedisUtil.lSet("list3", DataUtil.build(Province.class), 300L);
        provinceByteRedisUtil.lSet("list4", DataUtil.build(Province.class), -1L);

        List list = new ArrayList();
        list.add(DataUtil.build(Province.class));
        list.add(DataUtil.build(Province.class));
        list.add(DataUtil.build(Province.class));
        list.add(DataUtil.build(Province.class));
        list.add(DataUtil.build(Province.class));

        provinceByteRedisUtil.lSets("list5", list);
        provinceByteRedisUtil.lSets("list6", list, null);
        provinceByteRedisUtil.lSets("list7", list, 300L);
        provinceByteRedisUtil.lSets("list8", list, -1L);

        final List r1 = provinceByteRedisUtil.lGet("list8", 1L, 3L);
        System.out.println(r1);

        final long length = provinceByteRedisUtil.lGetListSize("list8");
        System.out.println(length);

        final Province r2 = provinceByteRedisUtil.lGetIndex("list8", 3L);
        System.out.println(r2);

        final List list1 = provinceByteRedisUtil.lGet("list8", 0L, -1L);
        list1.forEach(System.out::println);
        provinceByteRedisUtil.lUpdateIndex("list8", 3L, DataUtil.build(Province.class));
        final List list2 = provinceByteRedisUtil.lGet("list8", 0L, -1L);
        list2.forEach(System.out::println);

        provinceByteRedisUtil.lSets("list9", List.of(new Province(), new Province(), new Province(), new Province()));
        provinceByteRedisUtil.lRemove("list9", 2L, new Province());
        final List list3 = provinceByteRedisUtil.lGet("list9", 0L, -1L);
        list3.forEach(System.out::println);
    }

}

具体存储在Redis中的数据是bytecode形式的,比如: 在这里插入图片描述

关注
打赏
1665409997
查看更多评论
0.0493s