redis集群与主从配置
- redis安装-redis集群管理
- redis主从复制(读写分离)-redis集群管理
- redis主从从架构搭建-redis集群管理
- redis从库只读设置-redis集群管理
- redis主从复制的原理-redis集群管理
- redis sentinel(哨兵) 配置详解-redis集群管理
- redis sentinel.conf详解-redis集群管理
- redis 集群环境搭建-redis集群管理
- redis集群插槽分配-redis集群管理
- redis新增集群节点-redis集群管理
- redis删除集群节点-redis集群管理
- redis集群出现宕机没法访问-redis集群管理
- redis 集群使用主从复制架构-redis集群管理
redis 基础教程
- Redis概述
- 基于linux下redis安装与配置
- 基于window安装redis
- Redis配置文件详解
- 通过redis客户端查看和设置配置
- Redis 客户端连接、密码验证、连接数设置
- 使用info命令获取 redis 服务详细信息
- Redis Desktop Manager客户端使用教程
redis 数据类型
Redis 高级教程
知识点
相关文章
更多最近更新
更多redis整合spring示例二—java操作redis(存对象及List)
2019-03-12 22:14|来源: 网路
在java操作redis中,咱们已经有了基本的java操作redis相关代码。下面继续
redis存放对象和List可通过对它们先序列化,然后存到redis中。
对象序列化及反序列化工具类:
package com._656463.redis; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; /** * Jedis does not support cache the Object directly, the Objects needed to be * serialized and de-serialized */ public class ObjectTranscoder<M extends Serializable> extends SerializeTranscoder { @SuppressWarnings("unchecked") @Override public byte[] serialize(Object value) { if (value == null) { throw new NullPointerException("Can't serialize null"); } byte[] result = null; ByteArrayOutputStream bos = null; ObjectOutputStream os = null; try { bos = new ByteArrayOutputStream(); os = new ObjectOutputStream(bos); M m = (M) value; os.writeObject(m); os.close(); bos.close(); result = bos.toByteArray(); } catch (IOException e) { throw new IllegalArgumentException("Non-serializable object", e); } finally { close(os); close(bos); } return result; } @SuppressWarnings("unchecked") @Override public M deserialize(byte[] in) { M result = null; ByteArrayInputStream bis = null; ObjectInputStream is = null; try { if (in != null) { bis = new ByteArrayInputStream(in); is = new ObjectInputStream(bis); result = (M) is.readObject(); is.close(); bis.close(); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { close(is); close(bis); } return result; } }
List序列化和反序列化工具类:
package com._656463.redis; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * Jedis does not support cache the Object directly, the Objects needed to be * serialized and de-serialized * * @作者 : huangyineng * @日期 : 2015-6-11 下午5:55:21 */ public class ListTranscoder<M extends Serializable> extends SerializeTranscoder { @SuppressWarnings("unchecked") public List<M> deserialize(byte[] in) { List<M> list = new ArrayList<M>(); ByteArrayInputStream bis = null; ObjectInputStream is = null; try { if (in != null) { bis = new ByteArrayInputStream(in); is = new ObjectInputStream(bis); while (true) { M m = (M) is.readObject(); if (m == null) { break; } list.add(m); } is.close(); bis.close(); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { close(is); close(bis); } return list; } @SuppressWarnings("unchecked") @Override public byte[] serialize(Object value) { if (value == null) { throw new NullPointerException("Can't serialize null"); } List<M> values = (List<M>) value; byte[] results = null; ByteArrayOutputStream bos = null; ObjectOutputStream os = null; try { bos = new ByteArrayOutputStream(); os = new ObjectOutputStream(bos); for (M m : values) { os.writeObject(m); } os.writeObject(null);//不加会报java.io.EOFException异常 os.close(); bos.close(); results = bos.toByteArray(); } catch (IOException e) { throw new IllegalArgumentException("Non-serializable object", e); } finally { close(os); close(bos); } return results; } }
抽象基类
package com._656463.redis; import java.io.Closeable; public abstract class SerializeTranscoder { public abstract byte[] serialize(Object value); public abstract Object deserialize(byte[] in); public void close(Closeable closeable) { if (closeable != null) { try { closeable.close(); } catch (Exception e) { e.printStackTrace(); } } } }
看在代码中怎么调用。这可能本站使用的代码
@Resource(name = "redisClientTemplate") private RedisClientTemplate redisClient; public List<Channel> findAllChannels(){ List<Channel> results = null; ListTranscoder<Channel> listTranscoder = new ListTranscoder<Channel>(); byte[] channels = redisClient.get(Constants.CHANNELS_REDIES_KEY); if(channels!=null){ results = listTranscoder.deserialize(channels); } if(results==null || results.size()<=0){ Map<Object, Object> params = new HashMap<Object, Object>(); params.put("start", 0); params.put("size",Integer.MAX_VALUE); results = this.findScrollDataList(params); //加入redis channels = listTranscoder.serialize(results); redisClient.set(Constants.CHANNELS_REDIES_KEY, channels); redisClient.setExpire(Constants.CHANNELS_REDIES_KEY, Constants.expireTime); } return results; }
完毕
redis知识点
redis快速入门
reids常用命令
redis数据结构
java_API_客户端
Jedis
Tlcache
redis_持久化
AOF
RDB
发布订阅(pub/sub)
redis_事件
redis事务
redis通讯协议
RESP(Redis Serialization Protocol)
redis高可用
redis哨兵
监控(Monitoring) 提醒(Notification) 自动故障迁移(Automatic failover)
redis主从复制
-
- 主从复制
- 从从复制
-
- slave向master发送sync命令;
- master开启子进程执行bgsave写入rdb文件;
- master发送缓存和RDB文件给slave;
- master发送数据发送给slave完成复制;
redis集群(Redis_Cluster)
相关问答
更多-
java程序,redis操作,存储[2022-04-19]
你可以把组装好了得map数据转成json字符串,然后存到redis里面,从redis取出来之后再转回来使用 -
spring cache +redis与直接用redis有什么不同么?[2022-11-03]
集群环境下,每台服务器的spring cache是不同步的,这样会出问题的,spring cache只适合单机环境 redis是设置单独的缓存服务器,所有集群服务器统一访问redis,不会出现缓存不同步的情况 spring cache是很早就有的东西,现在+redis是为了顺应时代,更好的兼容集群环境,加强保留spring cache功能,不如直接使用redis -
nodejs使用redis怎么存json对象[2021-10-24]
连接集合中内容: b ="?".join(["hello","world"]); print b;#hello?world -
springboot整合redis为什么数据存不进redis,实现不了缓存[2024-01-31]
检查Redis配置是否正确,包括连接地址、密码、端口是否修改之类 -
如何在Java中应用Redis操作HashMap?[2022-01-16]
jedis存储的就是key-value键值对;操作hashmap这个数据结构做什么 -
nodejs使用redis怎么存json对象[2022-06-26]
连接集合中内容: b ="?".join(["hello","world"]); print b;#hello?world -
怎么在redis里面存list[2022-04-18]
将list转json或者其他string类型的字符串,再存进redis,因为redis不支持存数组或对象。 -
redis 如何存一个PHP数组 代码怎么写呢[2023-06-16]
如有要用redis存 数组,可以以string 类型的 方式存储。 1、可使用PHP自带的json_encode和json_decode转换成json。 2、使用PHP自带的 序列化 函数serialize和unserialize函数。 -
Redis是二进制安全的,因此,对于Jedis,您可以使用BinaryJedis存储二进制数据,就像存储在Redis中的任何其他类型的值一样。 不,我不认为在Redis中存储图像,因此在内存中存储图像是一个很好的策略。 那必须是一个非常特殊的用例。 Redis is binary safe so, in the case of Jedis, you can use BinaryJedis to store binary data just as any other kind of value that yo ...