用java在redis中儲存物件
最近需要封裝一個操作redis的工具類,不知道怎麼向redis中儲存物件,想到過用java反射去做。在網上搜索了一下,發現可以用序列化物件的方式去儲存。再此我整理了一下
感謝,殘劍_提供的方法:http://www.cnblogs.com/liuling/p/2014-4-19-04.html(redis基礎操作)
感謝,蕭劍90提供的方法:http://blog.csdn.net/abc19900828/article/details/40373549(redis儲存物件)
以下是我借鑑之後整理的程式碼,簡單封裝。
一、redis連線池
package dao.redisUtil; import |
二、序列化物件方法
package dao.redisUtil; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; /** * @author Administrator * 序列化物件工具類 */ public class SerializeUtil { public static byte[] serialize(Object object) { ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try { // 序列化 baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); byte[] bytes = baos.toByteArray(); return bytes; } catch (Exception e) { } return null; } public static Object unserialize( byte[] bytes) { ByteArrayInputStream bais = null; try { // 反序列化 bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); return ois.readObject(); } catch (Exception e) { } return null; } } |
三、封裝redis增刪改查基礎操作
package dao.redisUtil; import redis.clients.jedis.Jedis; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * 實現redis操作 */ public class RedisOperation{ //獲取redis操作例項 private Jedis jedis=RedisConnectionPool.getJedis(); public String set(String key, HashMap<String,String> map) { return jedis.hmset(key,map); } public String set(byte[] key, HashMap<byte[], byte[]> map) { return jedis.hmset(key,map); } public String set(String key, List<String> list) { Long aLong=-1l; for (String value:list ) { aLong = jedis.lpush(key,value); } return aLong<=0?"error":"OK"; } public String set(byte[] key, List<byte[]> list) { Long aLong=-1l; for (byte[] value:list ) { aLong=jedis.lpush(key,value); } return aLong<=0?"error":"OK"; } public String set(String key, String value) { return jedis.set(key,value); } public String set(byte[] key, byte[] value) { return jedis.set(key, value); } public String set(String key, Set<String> set) { Long aLong=-1l; for (String value:set ) { aLong=jedis.sadd(key,value); } return aLong<=0?"error":"OK"; } public String set(byte[] key, Set<byte[]> set) { Long aLong=-1l; for (byte[] value:set ) { aLong=jedis.sadd(key,value); } return aLong<=0?"error":"OK"; } //redis寫入物件,用序列化物件的方式 public String set(String key, Object Obj) { return jedis.set(key.getBytes(),SerializeUtil.serialize(Obj)); } public Object get(String key) { Object object=null; //獲取value的型別 String type=jedis.type(key); //根據不同型別呼叫不同的獲取方法 if(type.toLowerCase().equals("map")){ object=jedis.hgetAll(key); }else if(type.toLowerCase().equals("set")){ object=jedis.smembers(key); }else if(type.toLowerCase().equals("list")){ object=jedis.lrange(key,0,-1); }else if (type.toLowerCase().equals("string")){ byte[] bytes=jedis.get(key.getBytes()); object=SerializeUtil.unserialize(bytes); if(object==null){ object=jedis.get(key); } } return object; } public Object get(byte[] key) { return null; } public Long delete(String key) { return jedis.del(key); } public String update(String key,Object value){ //先刪除原有資料 Long along = jedis.del(key); if(along<0){ return "error"; } //再重新新增 if(value instanceof Map){ set(key,(Map)value); }else if(value instanceof Set){ set(key,(Set) value); }else if(value instanceof List){ set(key,(List) value); }else if(value instanceof String){ set(key,(String)value); }else { set(key,value); } return "OK"; } } |
相關推薦
用java在redis中儲存物件
最近需要封裝一個操作redis的工具類,不知道怎麼向redis中儲存物件,想到過用java反射去做。在網上搜索了一下,發現可以用序列化物件的方式去儲存。再此我整理了一下感謝,殘劍_提供的方法:http://www.cnblogs.com/liuling/p/2014-4-19
【Java】連結串列中儲存物件的問題
在刷《劍指OFFER》的時候,自己犯了一個錯誤,發現:在連結串列中儲存一個物件時,如果該物件是不斷變化的,則應該建立一個新的物件複製該物件的內容(而不是指向同一個物件),將這個新的物件儲存到連結串列中。如果直接儲存該物件的話,連結串列中的物件也會不斷變化。基本資料型別和String則沒有這種問題。 其實
《Java》完成一個“將使用者通過鍵盤輸入的文字動態加入到Vector類物件中,並顯示此Vector類物件中儲存的字串”的應用程式
一、任務目標 完成一個java application應用程式,通過接收使用者通過鍵盤輸入的文字,把每次回車輸入的字串動態加入到Vector類物件中,並顯示此Vector類物件中儲存的字串。 二、Vector類 Vector 類可實現自動增長的物件陣列,提供了
jvm 物件在記憶體中儲存的佈局
jvm 物件在記憶體中儲存的佈局有三部分:物件頭、例項資料、對齊填充。 1、物件頭:執行時資料、型別指標、陣列長度。 (1)執行時資料:hashcode雜湊碼、鎖狀態標誌、執行緒持有的鎖、GC年齡分代等,有些不是固定不變的,在執行時會根據當時的狀態進行修改。 (2)型別指標:
分享一個好用的函式吧,將js中的物件轉成url引數
這個函式呢是自己在寫基於Vue+ElementUI管理後臺時用到的,,下面列出來兩種使用方式: 最普通的,封裝一個js函式 /** * 物件轉url引數 * @param {*} data */ function urlencode (data
【mybatis】欄位中儲存多個值用“,”隔開,如何查詢
目錄 做專案遇到這種情況,欄位中儲存多個值用“,”隔開。這種應該如何查詢呢。 做個簡單的例子: 表: 判斷一個值是否存在其中(FIND_IN_SET) SELECT *
Java 往TreeSet集合中儲存自定義物件學生,按照學生的年齡進行排序。
Set:無序,不可以重複元素。|--HashSet:資料結構是雜湊表。執行緒是非同步的。保證元素唯一性的原理:判斷元素的hashCode值是否相同。如果相同,還會繼續判斷元素的equals方法,是否為true。|--TreeSet:可以對Set集合中的元素進行排序。底層資料
Redis 存取 java 物件,用 hash 雜湊命令儲存物件的各個屬性和採用 String 字串命令儲存序列化後的物件之開銷對比
轉自:http://www.jfinal.com/share/460 用一個簡單的User物件做試驗,共有4個屬性,型別分別為整型,整型,字串,字串。 測試程式碼 public class TestRedis { private static final Cache testCach
用java中的外部比較器、內部比較器實現物件陣列的排序
需求: 有一個People類,該類例項化的物件存放在物件陣列中。 該類的屬性有String name,int id。 請按id的大小對物件陣列中的物件進行從小到大的排序。 第一種方法:用內部比較器比較 People類如下: /* * 為了該類的物件可以比較
JAVA高階特性——迷你圖書管理系統(DOM4J操作儲存集合中的物件)
要求:使用XML儲存圖書資訊,使用DOM4J操作XML,進行圖書的增刪改查。 使用技術:XML/DOM4j/集合/物件 部分實現效果如果下: 實現思路 首先需要建立一個圖書類(Book類),儲存圖書的屬性(屬性和XML檔案一致,因
論IP地址在資料庫中應該用何種形式儲存
轉自:http://www.cnblogs.com/skynet/archive/2011/01/09/1931044.html 在看公司專案程式碼時,有涉及到ip地址儲存, 使用的是varbinary(4),但沒有文件說明 這引發我的思考——緣起 當設計一個數據表時,考慮使用何種列的資料型別對效能有比較
spring jpa中使用entitymanager無法儲存物件
在spring 的事務配置如下: <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.s
Java中儲存金額用什麼資料型別
Java面試高頻問題:你會用什麼資料型別來儲存金額? 如果這個時候你回答float,double那麼恭喜你,又可以省出時間來準備別的公司的面試了,當面試官說float,和double不行的時候你可能還一臉懵逼,為啥不行?那麼請看下面的例子 public class Tes
用CxImage在onSaveDocument()中儲存圖片
用CxImage儲存圖片,遇到個問題,儲存後的圖片是0位元組,程式碼如下: BOOL CHalftoningDoc::OnSaveDocument(LPCTSTR lpszPathName){ // TODO: Add your specialized code
java兩個list中儲存bean物件,找出其中某一屬性不同的元素
在java中運用List集合儲存物件,如果想找到兩個list中不同的部分,可以用ArrayList的contains方法,遍歷每一個物件,判斷是否是相等的,如下: public stati
List集合迴圈儲存物件時,導致迴圈後集閤中全部資料都是最後一條的情況
在處理資料,List集合迴圈儲存物件時,發現迴圈後集閤中全部資料都是最後一條的情況。 code: ... AlarmInfo ai = new AlarmInfo(); //建立物件 List
HashSet中儲存複雜型別物件
這個話題還是從一個有問題的程式碼中引申出來的,原始碼如下: import java.util.*; class TreeSetTest { public static void main(String[] args) { HashSet
Spring-MVC中ModelAndView物件所新增的內容在前端用EL表示式獲取不到的問題
原來是IntelliJ IDEA預設生成的web.xml文件的頭部不正確 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "htt
word/Excel 此物件創建於package中,此應用程式不能用來開啟此物件
在word/Excel文件中要開啟一個包 1."點選" 出現 "即將啟用一個嵌入物件,可能帶有病毒,是否繼續" 2. 點選"是"以後,則出現了這個提示: "此物件創建於package中,此應用程式不能用來開啟此物件,請確認此應用程式已正確
用python中類與物件寫一個猜拳遊戲
思路:我們可以通過隨機數的方法來實現電腦隨機出拳,通過猜拳規則判斷是電腦還是玩家獲得勝利最後統計結果 import random 先匯入隨機數 class game(): 建立一個遊戲的類 裡面分為兩個屬性一個玩家名 一個電腦名 def __i