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.