-
memcache 是如何存储java对象的?5
刚用memcached,我知道memcached因为使用的是文本协议,所以value通常是使用字符串存储,提供的java client实际上是直接存入java对象的,目前我遇到的问题是:我有个类似memcached的缓存,但是提供的接口仅支持字符串存储,因此我想问问 ,我怎么把我的java对象转成需要的串存入,像memcached一样,求大牛解答~2012年9月06日 09:16
5个答案 按时间排序 按投票排序
-
你用 一个 json 工具包 序列化对象 ,读取出来的时候 反序列化为 对象,就OK 了 !
目前序列化的 工具很多: fastjson,jackson gson ,等, 推荐使用 阿里的 fastjson!
http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=24249462012年9月06日 09:25
-
/** * 序列化工具 * * @author Jeremiah Xu * */ public final class SerializationUtil { /** * 序列化一个对象为字节数组 * * @param obj * @return * @throws Exception */ public final static byte[] serialize(Serializable obj) throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); serialize(obj, baos); byte[] b = baos.toByteArray(); baos.close(); return b; } /** * 将对象序列化到一个指定文件中。 * * @param obj * @param filePath */ public final static void serialize(Serializable obj, String filePath) throws Exception { serialize(obj, new FileOutputStream(filePath)); } /** * 将对象序列化到一个指定输出流中。 * * @param obj * @param output * @throws Exception */ public final static void serialize(Serializable obj, OutputStream output) throws Exception { ObjectOutputStream oos = new ObjectOutputStream(output); oos.writeObject(obj); oos.close(); } /** * 将指定字节数组反序列化为一个对象。 * * @param b * @return * @throws Exception */ public final static Serializable deserialize(byte[] b) throws Exception { ByteArrayInputStream bais = new ByteArrayInputStream(b); Serializable obj = deserialize(bais); bais.close(); return obj; } /** * 将指定序列化文件反序列化为一个对象。 * * @param filePath * @return * @throws Exception */ public final static Serializable deserialize(String filePath) throws Exception { return deserialize(new FileInputStream(filePath)); } /** * 将指定序列化输入流反序列化为一个对象。 * * @param input * @return * @throws Exception */ public final static Serializable deserialize(InputStream input) throws Exception { ObjectInputStream ois = new ObjectInputStream(input); Serializable obj = (Serializable) ois.readObject(); ois.close(); return obj; } /** * 将一个Map中的key和value全部序列化,并生成一个新的Map。被序列化的Map中的key和value必须都是Serializable的。 * * @param m * @return * @throws Exception */ public final static Map<byte[], byte[]> serialize(Map<?, ?> m) throws Exception { if (m == null || m.isEmpty()) { throw new NullPointerException("map is null or empty."); } Map<byte[], byte[]> newMap = new HashMap<byte[], byte[]>(); for (Object obj : m.keySet()) { byte[] key = serialize((Serializable) obj); byte[] value = serialize((Serializable) m.get(obj)); newMap.put(key, value); } return newMap; } /** * 将已序列化过内部元素的Map反序列化。 * * @param m * @return * @throws Exception */ public final static Map<?, ?> deserialize(Map<byte[], byte[]> m) throws Exception { if (m == null || m.isEmpty()) { throw new NullPointerException("map is null or empty."); } Map<Object, Object> newMap = new HashMap<Object, Object>(); for (byte[] obj : m.keySet()) { Object key = deserialize(obj); Object value = deserialize(m.get(obj)); newMap.put(key, value); } return newMap; } /** * 将指定List中所有元素序列化,并生成新的List,被序列化的List中元素必须是Serializable的。 * * @param l * @return * @throws Exception */ public final static List<byte[]> serialize(List<?> l) throws Exception { if (l == null || l.size() == 0) { throw new NullPointerException("list is null or empty."); } List<byte[]> newList = new ArrayList<byte[]>(); for (Object obj : l) { byte[] e = serialize((Serializable) obj); newList.add(e); } return newList; } /** * 将内部元素已经序列化的List反序列化。 * * @param l * @return * @throws Exception */ public final static List<?> deserialize(List<byte[]> l) throws Exception { if (l == null || l.size() == 0) { throw new NullPointerException("list is null or empty."); } List<Object> newList = new ArrayList<Object>(); for (byte[] obj : l) { Object e = deserialize(obj); newList.add(e); } return newList; } /** * 将指定Set的所有元素序列化,并生成新的Set,被序列化的Set的元素必须是Serializable的。 * * @param s * @return * @throws Exception */ public final static Set<byte[]> serialize(Set<?> s) throws Exception { if (s == null || s.size() == 0) { throw new NullPointerException("set is null or empty."); } Set<byte[]> newSet = new HashSet<byte[]>(); for (Object obj : s) { byte[] e = serialize((Serializable) obj); newSet.add(e); } return newSet; } /** * 将内部元素已经序列化的Set反序列化。 * * @param s * @return * @throws Exception */ public final static Set<?> deserialize(Set<byte[]> s) throws Exception { if (s == null || s.size() == 0) { throw new NullPointerException("set is null or empty."); } Set<Object> newSet = new HashSet<Object>(); for (byte[] obj : s) { Object e = deserialize(obj); newSet.add(e); } return newSet; }
2012年9月06日 11:55
-
先将对象序列化为字节数组,再用BASE64编码为字符串;
反序列化时,先用BASE64解码为字节数组;
序列化过程中还可以做压缩,以缩短最终的窜长度。public static <T extends Serializable> byte[] serialize( T obj, boolean compressed) throws IOException { ByteArrayOutputStream buf = new ByteArrayOutputStream(); ObjectOutputStream oos = null; try { if (compressed) oos = new ObjectOutputStream(new GZIPOutputStream(buf)); else oos = new ObjectOutputStream(buf); oos.writeObject(obj); oos.flush(); } finally { if (oos != null) oos.close(); } return buf.toByteArray(); } public static <T extends Serializable> T deserialize(byte[] data, boolean compressed) throws IOException, ClassNotFoundException { ByteArrayInputStream in = new ByteArrayInputStream(data); ObjectInputStream ois = null; try { if (compressed) ois = new ObjectInputStream(new GZIPInputStream(in)); else ois = new ObjectInputStream(in); return (T) ois.readObject(); } finally { IOUtils.close(ois); } }
2012年9月06日 11:35
相关推荐
因此,需要使用序列化技术(如JSON或Java序列化)将对象转换为字节流,再存储到Memcache。反之,读取时反序列化回原对象。 10. **最佳实践**:为了提高效率,应尽可能使用短生命周期的缓存,并确保数据的及时更新。...
Memcached是一款高性能、分布式内存对象缓存系统,用于减轻数据库负载,提高网站或应用程序的响应速度。在Java环境中,我们可以借助各种客户端库来与Memcached进行交互。下面将详细介绍Memcached的工作原理以及在...
Memcache 学习文档 for Java Demo Memcache 是一套分布式的高速缓存系统,由 LiveJournal 的 Brad Fitzpatrick 开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站...
**memCache源码分析——Java客户端** memCache是一款高性能、分布式的内存对象缓存系统,常用于减轻数据库的负载,提升应用性能。它的主要特点是基于内存存储,操作速度快,无持久化机制,适用于缓存非关键数据。在...
本篇文章将围绕"Java Memcache使用例子"这一主题,详细介绍如何在Java中使用Memcached。 首先,确保您已经在本地正确安装了Memcached。通常,Memcached可以在Linux、macOS和Windows等操作系统上运行。你可以通过...
例如,在以用户为中心的网站中,可以按照用户ID的前缀来决定数据存储在哪一台Memcache服务器上,如1开头的用户数据保存在第一台服务器上,2开头的用户数据保存在第二台上,以此类推。这种策略有助于均衡负载并提升...
标题中的“memcache也spring,hibernate的配置”指的是如何在Java开发环境中,结合Memcached缓存系统、Spring框架和Hibernate持久化框架进行集成配置。Memcached是一种高性能的分布式内存对象缓存系统,用于加速动态...
**标题:“MemCache对象缓存应用”** **一、MemCache简介** MemCache是一种高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高应用程序的性能。它通过将数据存储在内存中,实现快速...
使用这个库时,开发者可以将常用的数据对象存储在Memcache中,以减少数据库的访问,从而提升应用性能。 `一对多查询.rar` 文件可能包含了一个示例或者教程,解释如何处理Java Memcache中的复杂查询,尤其是涉及到多...
Memcache 是一个高性能的分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的 hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后...
在IT领域,Memcache是一种广泛使用的高性能分布式内存对象缓存系统,它能够减轻数据库的负担,提高网站或应用的响应速度。本主题将探讨如何在CentOS操作系统上安装Memcache服务器,并利用Java作为客户端与之交互。...
Java中的Memcached是一种高效、分布式的内存对象缓存系统,常用于减轻数据库的负载,提高应用程序的性能。Memcached在Web应用中广泛使用,能够存储临时数据,减少对数据库的直接访问,从而加快响应速度。 首先,让...
**Memcached**是一种高性能、分布式内存对象缓存系统,它广泛应用于Web应用中,用于减轻数据库的负载,通过将数据存储在内存中,快速响应用户的请求。Memcached使用键值对存储数据,支持多语言接口,包括Java。 **...
Redis有多种数据类型,每种数据类型都有其特定的应用场景:String类型可以用于存储字符串,Hash类型可以用于存储对象,List类型可以用于存储列表等。memcache的简单key-value存储限制了它的应用场景。 数据操作 ...
"JAVA的memcache服务器安装以及相关最新jar包" 这个标题指出我们要探讨的是在Java环境中如何安装并使用Memcached服务器,同时提到了与Java接口相关的最新jar包。Memcached是一个高性能、分布式内存对象缓存系统,常...
Memcache,全称Memcached,是一个高性能的分布式内存对象缓存系统,它最初是为LiveJournal网站设计的,目的是为了减轻数据库服务器的负担。Memcache可以应用于任何需要缓存的场景,比如网页服务器或应用程序服务器等...
总结,Java中使用Memcached主要涉及选择合适的客户端库,配置连接,以及利用提供的API进行数据的存储、检索和删除操作。通过深入研究源码和使用辅助工具,可以更好地理解和优化Memcached在项目中的应用。
Memcache 是一个高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于缓解数据库的负载压力。它通过将数据存储在内存中,以便快速访问,从而提高应用程序的响应速度。在本文中,我们将深入探讨Memcache的...
Memcache是一个高性能、分布式内存对象缓存系统,用于减少数据库负载,提高应用程序的性能。在Java中,我们可以使用第三方库来实现对Memcache的访问。 首先,要理解Memcache的工作原理。它通过将数据存储在内存中来...