java redis实现Map<T>对象类型数据缓存

本文档介绍了如何使用Java将Map对象以byte[]形式存储到Redis中以实现高效的缓存。通过序列化和反序列化处理,实现了对象到byte[]的转换,减少了存储时间和内存占用,对比了存取json和byte数据类型的时间和内存消耗,证明了存byte方式的优越性。" 99633064,8434670,《啊哈!算法》中的图割点代码解析,"['图论', '算法', '编程', '书籍解析']
摘要由CSDN通过智能技术生成

Java redis存Map<String,Object>对象类型数据
“redis中所有的数据都是以byte[]形式存储的,所以说redis内部其实是没有数据类型的概念的.
描述
最近小编在做的就是把TR系统所有对接APP接口的返回信息进行拦截做国际化处理,要做的就是把后台系统提示的错误信息返回给移动设备端,需求就是根据app设备注册时选的语言种类(简体,繁体,英文)返回对应语种的错误提示信息,提示信息从文案系统获取过来的,可以根据错误码(errorCode)和语种language获取对应的文案提示。
考虑到这个场景会反复的查询文案系统,影响系统处理耗时和服务性能,所以为了方便及时查询检索。根据文案系统返回的数据格式,采取将文案数据型存入redis缓存,在此记录一下。
文案系统数据格式:
{
“Data”: {
“simplfiedCnDesc”: “失败”,
“traditionalCnDesc”: “失敗”,
“enDesc”: “Invalid Pass Phrase”,
“code”: “SMETR_SY_1010”
}
}

redis工具类实现具体就不展示了
直接上代码
方法:
<1>将首先我们将整个对象转成byte[]
在这里插入图片描述代码中有传入3个参数,分别是redis存入是的key(键值), seconds(有效时间:秒), obj(缓存的对象)
由于是对byte对象处理,这里是用到了序列化,保证数据的安全。
byte[] byteData = serialize(obj);
具体代码如下:
这里就不用多说了,就是一个IO流的操作,记得用完要关闭哦。
redis写入缓存就已经写完了。
下面是测试类。
在这里插入图片描述<2>读取缓存
话不多说直接上代码
在这里插入图片描述根据redis提供的get方法取出数据,这是是测试方法
在这里插入图片描述拿到res对象进行反序列化,
反序列化代码
在这里插入图片描述还是和上面一样用完后记得做关闭操作。

上代码:仅供参考

 /**
     * 字节存储
     **/
    public static void setByte(String key, int seconds, Object obj) {
   
        try {
   
            byte[] byteData = serialize(obj);
            byte[] keys = key.getBytes();
            cluster.set(keys, byteData);//
            cluster.expire(keys, seconds);//有效存活时间,单位秒
        } catch (Exception e) {
   
            LOGGER.error("异常========key: " + key + " redis.set Exception:", e);
            Profiler.registerInfoEnd(Profiler.registerInfo(Profiler.getUmpKey() + ".redis.failed", false, true));
            throw new PersistentException(JSFCodeEnum.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于将List<Map<String,Object>>格式的数据存入Redis缓存,你可以使用Java Redis客户端库,如Jedis或Lettuce来实现。以下是一个示例代码: ```java import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.util.List; import java.util.Map; public class RedisExample { private static final String REDIS_HOST = "localhost"; private static final int REDIS_PORT = 6379; private static final int REDIS_EXPIRE_TIME = 48 * 60 * 60; // 48小时的过期时间 public static void main(String[] args) { // 创建Redis连接池 JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), REDIS_HOST, REDIS_PORT); // 从连接池获取Redis连接实例 try (Jedis jedis = jedisPool.getResource()) { // 存入List<Map<String,Object>>数据 List<Map<String, Object>> dataList = /* your data */; String key = "your_key"; String value = /* convert dataList to String */; jedis.setex(key, REDIS_EXPIRE_TIME, value); // 更新对应key的数据并更新过期时间 List<Map<String, Object>> newDataList = /* new data */; String newValue = /* convert newDataList to String */; jedis.setex(key, REDIS_EXPIRE_TIME, newValue); } // 关闭连接池 jedisPool.close(); } } ``` 在示例代码中,你需要将`/* your data */`替换为要存入Redis数据,以及将`/* new data */`替换为要更新的数据。你还需要编写将List<Map<String,Object>>转换为String的逻辑。 请注意,示例代码中使用了Jedis连接池来获取Redis连接实例,并使用`setex`方法设置了key的过期时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值