介绍
小编给大家分享一下复述中列表存储对象的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
如果需要用到复述,存储列表对象,而列表又不需要进行操作,可以按照MC的方式进行存储,不过能之类的客户端没有提供API,可以有两种思路实现:
1。,,分别序列化元素,然后设置存储
2。,,序列化列表对象,存储
这两种方法都类似MC的对象方法存储、运用这种方式意味着放弃复述,对列表提供的操作方法。
进口net.spy.memcached.compat.CloseUtil; 进口net.spy.memcached.compat.log.Logger; 进口net.spy.memcached.compat.log.LoggerFactory; 进口redis.clients.jedis.Client; 进口redis.clients.jedis.Jedis; 进口redis.clients.jedis.JedisPool; 进口redis.clients.jedis.JedisPoolConfig; 进口. io . *; 进口java.util.ArrayList; 进口并不知道; 进口java.util.Random;/* * *由IntelliJ IDEA。 *用户:lifeng.xu *日期:12-6-11 *时间:上午十一10 *修改这个模板使用文件| |设置文件模板。 */公开课JedisTest { 私有静态日志记录器=LoggerFactory.getLogger (JedisTest.class);/* * *能能资源池 * @return */公共静态JedisPool buildJedisPool () { JedisPoolConfig配置=new JedisPoolConfig (); config.setMaxActive (1); config.setMinIdle (50); config.setMaxIdle (3000); config.setMaxWait (5000); JedisPool JedisPool=new JedisPool(配置, “* * * * *“,* * * *); 返回jedisPool; }/* * *测试数据 * @return */公共静态ListbuildTestData () { 用户=新用户(); a.setName (“a"); 用户b=新用户(); b.setName (“b"); List 列表=new ArrayList (); list.add(一个); list.add (b); 返回列表; }/* * *测试 */公共静态孔隙testSetElements () { List testData=https://www.yisu.com/zixun/buildTestData (); 能能=buildJedisPool () .getResource (); 新随机字符串键=" testSetElements " + (1000) .nextInt (); jedis.set (key.getBytes (), ObjectsTranscoder.serialize (testData));//验证 byte []=jedis.get (key.getBytes ()); 列表<用户>=ObjectsTranscoder.deserialize(的); (用户用户:列表){ system . out。println (“testSetElements用户名是:“+ user.getName ()); } } 公共静态孔隙testSetEnsemble () { <用户列表> testData=buildTestData (); 能能=buildJedisPool () .getResource (); 新随机字符串键=" testSetEnsemble " + (1000) .nextInt (); jedis.set (key.getBytes (), ListTranscoder.serialize (testData));//验证 byte []=jedis.get (key.getBytes ()); 列表<用户>=(列表<用户>)ListTranscoder.deserialize(的); (用户用户:列表){ system . out。println (“testSetEnsemble用户名是:“+ user.getName ()); } } 公共静态void main (String [] args) { testSetElements (); testSetEnsemble (); } 公共静态空间关闭(Closeable Closeable) { 如果(closeable !=null) { 尝试{ closeable.close (); }捕捉(异常e) { logger.info (“closeable无法接近% s”, e); } } } 静态类用户实现了Serializable { 字符串名称; 公共字符串getName () { 返回名称; } 公共空间setName(字符串名称){ this.name=名称; } } 静态类ObjectsTranscoder { 公共静态byte[]序列化(列表<用户>价值){ 如果(值==null) { 把新NullPointerException(“不能序列化null”); } byte[]房车=零; ByteArrayOutputStream bos=零; ObjectOutputStream os=零; 尝试{ bos=new ByteArrayOutputStream (); 操作系统=new ObjectOutputStream (bos); (用户用户:值){ os.writeObject(用户); } os.writeObject(空); os.close (); bos.close (); 房车=bos.toByteArray (); }捕捉(IOException e) { 把新IllegalArgumentException (“Non-serializable对象”,e); 最后}{ 关闭(os); 关闭(bos); } 返回房车; } 公共静态列表<用户>反序列化(byte []) { 用户列表<用户>=new ArrayList <> (); ByteArrayInputStream bis=零; ObjectInputStream=零; 尝试{ 如果(在!=null) { bis=new ByteArrayInputStream(的); 是=new ObjectInputStream (bis); 而(真){ 用户用户=(用户)is.readObject (); 如果(用户==null) { 打破; 其他}{ list.add(用户); } } is.close (); bis.close (); } }捕捉(IOException e) { 记录器。警告(“抓住IOException解码% d字节的数据”, 在==零?0:。长度,e); }捕捉(ClassNotFoundException e) { 记录器。警告(“抓住CNFE解码% d字节的数据”, 在==零?0:。长度,e); 最后}{ CloseUtil.close(是); CloseUtil.close (bis); } 返回列表; } } 静态类ListTranscoder { 公共静态byte[]序列化对象(价值){ 如果(值==null) { 把新NullPointerException(“不能序列化null”); } byte[]房车=零; ByteArrayOutputStream bos=零; ObjectOutputStream os=零; 尝试{ bos=new ByteArrayOutputStream (); 操作系统=new ObjectOutputStream (bos); os.writeObject(价值); os.close (); bos.close (); 房车=bos.toByteArray (); }捕捉(IOException e) { 把新IllegalArgumentException (“Non-serializable对象”,e); 最后}{ 关闭(os); 关闭(bos); } 返回房车; } 公共静态对象进行反序列化(byte []) { 对象房车=零; ByteArrayInputStream bis=零; ObjectInputStream=零; 尝试{ 如果(在!=null) { bis=new ByteArrayInputStream(的); 是=new ObjectInputStream (bis); 房车=is.readObject (); is.close (); bis.close (); } }捕捉(IOException e) { 记录器。警告(“抓住IOException解码% d字节的数据”, 在==零?0:。长度,e); }捕捉(ClassNotFoundException e) { 记录器。null null null null null null null null null null 复述中列表存储对象的方法