小編給大家分享一下redis中l(wèi)ist存儲對象的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元江蘇做網(wǎng)站,已為上家服務,為江蘇各地企業(yè)和個人服務,聯(lián)系電話:18980820575
如果需要用到Redis存儲List對象,而list又不需要進行操作,可以按照MC的方式進行存儲,不過Jedis之類的客戶端沒有提供API,可以有兩種思路實現(xiàn):
1. 分別序列化 elements ,然后 set 存儲
2. 序列化List對象,set存儲
這兩種方法都類似MC的 Object方法存儲,運用這種方式意味著放棄Redis對List提供的操作方法。
import net.spy.memcached.compat.CloseUtil; import net.spy.memcached.compat.log.Logger; import net.spy.memcached.compat.log.LoggerFactory; import redis.clients.jedis.Client; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * Created by IntelliJ IDEA. * User: lifeng.xu * Date: 12-6-11 * Time: 上午11:10 * To change this template use File | Settings | File Templates. */ public class JedisTest { private static Logger logger = LoggerFactory.getLogger(JedisTest.class); /** * Jedis Pool for Jedis Resource * @return */ public static JedisPool buildJedisPool(){ JedisPoolConfig config = new JedisPoolConfig(); config.setMaxActive(1); config.setMinIdle(50); config.setMaxIdle(3000); config.setMaxWait(5000); JedisPool jedisPool = new JedisPool(config, "*****", ****); return jedisPool; } /** * Test Data * @return */ public static List<User> buildTestData(){ User a = new User(); a.setName("a"); User b = new User(); b.setName("b"); List<User> list = new ArrayList<User>(); list.add(a); list.add(b); return list; } /** * Test for */ public static void testSetElements(){ List<User> testData = buildTestData(); Jedis jedis = buildJedisPool().getResource(); String key = "testSetElements" + new Random(1000).nextInt(); jedis.set(key.getBytes(), ObjectsTranscoder.serialize(testData)); //驗證 byte[] in = jedis.get(key.getBytes()); List<User> list = ObjectsTranscoder.deserialize(in); for(User user : list){ System.out.println("testSetElements user name is:" + user.getName()); } } public static void testSetEnsemble(){ List<User> testData = buildTestData(); Jedis jedis = buildJedisPool().getResource(); String key = "testSetEnsemble" + new Random(1000).nextInt(); jedis.set(key.getBytes(), ListTranscoder.serialize(testData)); //驗證 byte[] in = jedis.get(key.getBytes()); List<User> list = (List<User>)ListTranscoder.deserialize(in); for(User user : list){ System.out.println("testSetEnsemble user name is:" + user.getName()); } } public static void main(String[] args) { testSetElements(); testSetEnsemble(); } public static void close(Closeable closeable) { if (closeable != null) { try { closeable.close(); } catch (Exception e) { logger.info("Unable to close %s", closeable, e); } } } static class User implements Serializable{ String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } static class ObjectsTranscoder{ public static byte[] serialize(List<User> value) { if (value == null) { throw new NullPointerException("Can't serialize null"); } byte[] rv=null; ByteArrayOutputStream bos = null; ObjectOutputStream os = null; try { bos = new ByteArrayOutputStream(); os = new ObjectOutputStream(bos); for(User user : value){ os.writeObject(user); } os.writeObject(null); os.close(); bos.close(); rv = bos.toByteArray(); } catch (IOException e) { throw new IllegalArgumentException("Non-serializable object", e); } finally { close(os); close(bos); } return rv; } public static List<User> deserialize(byte[] in) { List<User> list = new ArrayList<User>(); ByteArrayInputStream bis = null; ObjectInputStream is = null; try { if(in != null) { bis=new ByteArrayInputStream(in); is=new ObjectInputStream(bis); while (true) { User user = (User) is.readObject(); if(user == null){ break; }else{ list.add(user); } } is.close(); bis.close(); } } catch (IOException e) { logger.warn("Caught IOException decoding %d bytes of data", in == null ? 0 : in.length, e); } catch (ClassNotFoundException e) { logger.warn("Caught CNFE decoding %d bytes of data", in == null ? 0 : in.length, e); } finally { CloseUtil.close(is); CloseUtil.close(bis); } return list; } } static class ListTranscoder{ public static byte[] serialize(Object value) { if (value == null) { throw new NullPointerException("Can't serialize null"); } byte[] rv=null; ByteArrayOutputStream bos = null; ObjectOutputStream os = null; try { bos = new ByteArrayOutputStream(); os = new ObjectOutputStream(bos); os.writeObject(value); os.close(); bos.close(); rv = bos.toByteArray(); } catch (IOException e) { throw new IllegalArgumentException("Non-serializable object", e); } finally { close(os); close(bos); } return rv; } public static Object deserialize(byte[] in) { Object rv=null; ByteArrayInputStream bis = null; ObjectInputStream is = null; try { if(in != null) { bis=new ByteArrayInputStream(in); is=new ObjectInputStream(bis); rv=is.readObject(); is.close(); bis.close(); } } catch (IOException e) { logger.warn("Caught IOException decoding %d bytes of data", in == null ? 0 : in.length, e); } catch (ClassNotFoundException e) { logger.warn("Caught CNFE decoding %d bytes of data", in == null ? 0 : in.length, e); } finally { CloseUtil.close(is); CloseUtil.close(bis); } return rv; } } }
PS:Redsi中存儲list沒有封裝對Object的API,是不是也是傾向于只存儲用到的字段,而不是存儲Object本身呢?Redis是一個In-Mem的產(chǎn)品,會覺得我們應用的方式。
以上是redis中l(wèi)ist存儲對象的方法的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享名稱:redis中l(wèi)ist存儲對象的方法
文章鏈接:http://jinyejixie.com/article24/ipicje.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、定制網(wǎng)站、企業(yè)網(wǎng)站制作、營銷型網(wǎng)站建設、網(wǎng)站設計公司、服務器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)