婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > redis 存儲對象的方法對比分析

redis 存儲對象的方法對比分析

熱門標簽:超呼電話機器人 山東外呼銷售系統招商 貴州電銷卡外呼系統 北京400電話辦理收費標準 十堰營銷電銷機器人哪家便宜 鄭州人工智能電銷機器人系統 魔獸2青云地圖標注 日本中國地圖標注 宿遷便宜外呼系統平臺

redis 存儲對象的方法對比

問題背景:

原來項目里面全部是直接redis存儲對象的json數據,需要頻繁的序列化和反序列化,后來考慮更換項目中的redis存儲對象為hash對象存儲的,但是獲取后不能方便的set get操作,很是蛋疼,怎么才能解決這個問題呢?

1.1 直接存儲對象的json

存放redis的時候,直接先用fastJson 或者 jackJson或者Gson把對象序列化為json數據,然后用直接存放,key表示用戶id或許和openid,value則是對象的json數據

public String get(String key) {
Object value = redisTemplate.boundValueOps(key).get();
return (String) value;
}
public void set(String key, String json) {
if (json == null) {
return;
}
redisTemplate.boundValueOps(key).set(json);
}

優點:雖然需要序列化和反序列化,但是可以直接操作對象的方法,方便快捷

缺點:需要序列化和反序列化,并且修改單個字段,需要獲取整個json,修改后,序列化保存,浪費空間,浪費時間,效率低

1.2 采用redis hash key field value 存儲

key代表主鍵,比如用戶id,或者openId,value是一個map,對應各個字段的屬性和值

存放單個字段

public void hset(String key, String field, String obj) {
redisTemplate.boundHashOps(key).put(field,obj);
}

存放整個:

public void hSetMap(String key,MapObject,Object> map){
redisTemplate.boundHashOps(key).putAll(map);
}

優點:存儲方方便,節省內存空間,并且可以直接對單個字段修改,而不用獲取整個對象,效率高

缺點:獲取value后,是個map,不能方便的直接調用(set get)處理,需要手動map.get(filed)或者map.put(field,value)

1.3 如何解決redis hash存儲對象的操作方便性問題

其實關于map和pojo的轉換問題,網上給出了利用反射做的轉換方法,但是加上了轉換和反轉,這和序列化和反序列化的問題一樣了,效率問題,也不敢指直接用,糾結,思考再三,還是先維持代碼不動了,以后考慮好了再說,或者廣發網友有啥好解決方法,請多多指教哈!

Redis存儲對象的三種方式

一、 將對象序列化后保存到Redis

序列化工具類實現

public class SerializeUtil {
    /*
     * 序列化
     * */
    public static byte[] serizlize(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) {
            e.printStackTrace();
        }finally {
            try {
                if(baos != null){
                    baos.close();
                }
                if (oos != null) {
                    oos.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return null;
    }
    /*
     * 反序列化
     * */
    public static Object deserialize(byte[] bytes){
        ByteArrayInputStream bais = null;
        ObjectInputStream ois = null; 
        try{
            bais = new ByteArrayInputStream(bytes);
            ois = new ObjectInputStream(bais);
            return ois.readObject();
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try {
 
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return null;
    }
}

獲取jedis實例

public class RedisConnection {
    private static String HOST = "127.0.0.1";
    private static int PORT = 6379;
    private static int MAX_ACTIVE = 1024;
    private static int MAX_IDLE = 200;
    private static int MAX_WAIT = 10000;
 
    private static JedisPool jedisPool = null;
 
    /*
     * 初始化redis連接池
     * */
    private static void initPool(){
        try {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(MAX_ACTIVE);//最大連接數
            config.setMaxIdle(MAX_IDLE);//最大空閑連接數
            config.setMaxWaitMillis(MAX_WAIT);//獲取可用連接的最大等待時間
 
            jedisPool = new JedisPool(config, HOST, PORT);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    /*
     * 獲取jedis實例
     * */
    public synchronized static Jedis getJedis() {
        try {
            if(jedisPool == null){
                initPool();
            }
            Jedis jedis = jedisPool.getResource();
            jedis.auth("redis");//密碼
            return jedis;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

redis操作類

public class RedisOps {
    public static void set(String key,String value){
        Jedis jedis = RedisConnection.getJedis();
        jedis.set(key, value);
        jedis.close();
    }
    public static String get(String key){
        Jedis jedis = RedisConnection.getJedis();
        String value = jedis.get(key);
        jedis.close();
        return value;
    }
    public static void setObject(String key,Object object){
        Jedis jedis = RedisConnection.getJedis();
        jedis.set(key.getBytes(), SerializeUtil.serizlize(object));
        jedis.close();
    }
    public static Object getObject(String key){
        Jedis jedis = RedisConnection.getJedis();
        byte[] bytes = jedis.get(key.getBytes());
        jedis.close();
        return SerializeUtil.deserialize(bytes);
    }
}

User對象

public class User implements Serializable{
    private static final long serialVersionUID = -3210884885630038713L;
    private int id;
    private String name;
    public User(){
 
    }
    public User(int id,String name){
        this.id = id;
        this.name = name;
    }
    //setter和getter方法
}

測試

public class RedisTest {
 
    @Test
    public void testString(){
        RedisOps.set("user:1", "sisu");
        String user = RedisOps.get("user:1");
        Assert.assertEquals("sisu", user);
    }
 
    @Test
    public void testObject(){
        RedisOps.setObject("user:2",new User(2,"lumia"));
        User user = (User)RedisOps.getObject("user:2");
        Assert.assertEquals("lumia", user.getName());
    } 
}

二、將對象用FastJSON轉為JSON字符串后存儲

redis操作類

public class RedisOps {
    public static void setJsonString(String key,Object object){
        Jedis jedis = RedisConnection.getJedis();
        jedis.set(key, JSON.toJSONString(object));
        jedis.close();
    }
    public static Object getJsonObject(String key,Class clazz){
        Jedis jedis = RedisConnection.getJedis();
        String value = jedis.get(key);
        jedis.close();
        return JSON.parseObject(value,clazz);
    }
}

測試

 @Test
    public void testObject2(){
        RedisOps.setJsonString("user:3", new User(3,"xiaoming"));
        User user = (User)RedisOps.getJsonObject("user:3",User.class);
        Assert.assertEquals("xiaoming", user.getName());
    }

三、將對象用Hash數據類型存儲

redis操作類

public class RedisOps {
    public static void hSet(String key,String value){
        Jedis jedis = RedisConnection.getJedis();
        jedis.hSet(key, value);
        jedis.close();
    }
    public static String hGet(String key){
        Jedis jedis = RedisConnection.getJedis();
        String value = jedis.hGet(key);
        jedis.close();
        return value;
    }
}

測試

 @Test
    public void testObject3(){
     //存
        RedisOps.hSet("user:3","id","3");
        RedisOps.hSet("user:3","name","xiaoming");
        
        //取
        String id =  RedisOps..hGet("user:3","id");
        String name = RedisOps.hGet("user:3","name");
        Assert.assertEquals("3", id);
        Assert.assertEquals("xiaoming", name);        
    }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Redis緩存-序列化對象存儲亂碼問題的解決
  • Redis如何存儲對象與集合示例詳解
  • 淺談Redis存儲數據類型及存取值方法

標簽:果洛 江蘇 楊凌 北京 大慶 朝陽 吉安 臺州

巨人網絡通訊聲明:本文標題《redis 存儲對象的方法對比分析》,本文關鍵詞  redis,存儲,對象,的,方法,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《redis 存儲對象的方法對比分析》相關的同類信息!
  • 本頁收集關于redis 存儲對象的方法對比分析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    三级影片在线观看欧美日韩一区二区 | 一区二区三区四区激情| 日韩欧美你懂的| 欧美军同video69gay| 欧美日韩aaaaa| 欧美日本一道本| 56国语精品自产拍在线观看| 欧美日高清视频| 69成人精品免费视频| 51精品秘密在线观看| 91精品久久久久久久99蜜桃| 日韩一区二区三区免费看| 欧美一区二区免费| 2022国产精品视频| 国产精品视频在线看| 国产精品嫩草影院com| 国产精品乱码人人做人人爱| 中日韩av电影| 一区二区三区在线观看动漫| 亚洲国产三级在线| 久久疯狂做爰流白浆xx| 成人深夜福利app| 在线一区二区观看| 51精品秘密在线观看| 精品成人佐山爱一区二区| 国产视频在线观看一区二区三区| 亚洲少妇30p| 免费高清视频精品| 国产成人精品1024| 日本国产一区二区| 精品久久久久久久久久久院品网 | 在线视频综合导航| 日韩欧美一区二区免费| 欧美国产精品久久| 午夜久久久久久久久久一区二区| 精品一区二区三区免费| 91丨九色丨尤物| 精品日韩一区二区三区免费视频| 中文字幕精品一区二区精品绿巨人| 亚洲综合一区二区精品导航| 激情综合色综合久久综合| 在线观看一区不卡| 国产欧美一区二区三区网站| 亚洲国产视频在线| 高清av一区二区| 日韩午夜av一区| 亚洲六月丁香色婷婷综合久久 | 欧美放荡的少妇| 中文字幕在线播放不卡一区| 日韩国产精品91| 色综合天天狠狠| 国产午夜精品理论片a级大结局| 亚洲精品va在线观看| 国产在线一区二区综合免费视频| 欧美中文字幕一区二区三区亚洲| 国产欧美日韩亚州综合| 秋霞成人午夜伦在线观看| 91黄色免费版| 亚洲精品久久7777| 成人动漫视频在线| 久久久亚洲国产美女国产盗摄| 亚洲成人综合在线| 欧美曰成人黄网| 国产精品免费aⅴ片在线观看| 性久久久久久久久| 欧美网站一区二区| 亚洲视频在线一区观看| 不卡av在线免费观看| 国产精品热久久久久夜色精品三区 | 国产精品乱码妇女bbbb| 久久99国产精品久久99| 日韩午夜在线影院| 日韩国产精品久久久久久亚洲| 91福利国产成人精品照片| 亚洲女女做受ⅹxx高潮| 一本色道久久加勒比精品 | 欧美日韩国产在线观看| 亚洲一区二区高清| 欧美日韩国产美| 亚洲第一在线综合网站| 在线播放欧美女士性生活| 麻豆精品一二三| 国产午夜三级一区二区三| 成人激情av网| 一区二区三区欧美久久| 欧美午夜一区二区| 日本 国产 欧美色综合| 精品国产乱码久久久久久1区2区| 极品少妇一区二区| 亚洲国产精品传媒在线观看| 99视频在线精品| 亚洲风情在线资源站| 日韩三级精品电影久久久| 国产一区二区在线观看免费| 日本一区二区免费在线观看视频| 91免费看视频| 日韩福利视频网| 久久久影视传媒| 日本国产一区二区| 免费一级欧美片在线观看| 国产免费成人在线视频| 欧美日韩三级一区二区| 精品在线亚洲视频| 亚洲精品视频一区| 日韩一级成人av| 99国产精品99久久久久久| 视频一区二区三区在线| 国产欧美日韩综合| 欧美婷婷六月丁香综合色| 国产乱国产乱300精品| 亚洲精品高清视频在线观看| 91精品久久久久久久91蜜桃| av中文一区二区三区| 丝袜美腿亚洲一区二区图片| 国产精品丝袜黑色高跟| 日韩一区二区电影| 日本伦理一区二区| 国产精品一区二区三区四区| 亚洲第一成年网| 亚洲天堂2014| 精品电影一区二区三区| 欧美美女直播网站| 色综合天天在线| 国产成人综合在线观看| 亚洲18女电影在线观看| 国产精品毛片久久久久久久| 777亚洲妇女| 欧美日韩一区二区在线观看视频| 成人黄色电影在线| 精品一区二区三区久久| 日韩黄色免费网站| 一区二区三区在线观看网站| 国产精品天天摸av网| 久久亚洲免费视频| 精品奇米国产一区二区三区| 69p69国产精品| 欧美日韩国产一级片| 欧美怡红院视频| 在线观看精品一区| av电影天堂一区二区在线观看| 国内精品不卡在线| 蜜桃视频第一区免费观看| 亚洲福利国产精品| 亚洲国产日韩在线一区模特| 亚洲啪啪综合av一区二区三区| 国产精品私房写真福利视频| 国产视频视频一区| 国产亚洲一区字幕| 久久精品欧美一区二区三区麻豆| 久久综合九色综合欧美亚洲| 久久色成人在线| 国产丝袜在线精品| 国产精品热久久久久夜色精品三区 | 三级影片在线观看欧美日韩一区二区| 一区二区三区中文在线观看| 亚洲蜜桃精久久久久久久| 日韩理论片一区二区| 亚洲视频一区二区在线| 一区二区三区四区不卡视频| 亚洲一区二区三区三| 五月天网站亚洲| 麻豆freexxxx性91精品| 狠狠网亚洲精品| www.66久久| 欧美色网一区二区| 日韩免费观看高清完整版在线观看| 欧美成人猛片aaaaaaa| 国产亚洲欧美一区在线观看| 国产精品黄色在线观看| 洋洋av久久久久久久一区| 亚洲h动漫在线| 精品一区二区国语对白| 成人动漫视频在线| 欧美亚洲日本国产| 精品伦理精品一区| 国产精品看片你懂得| 亚洲图片欧美视频| 免费成人av资源网| 91在线你懂得| 日韩欧美亚洲另类制服综合在线| 日本一区二区视频在线观看| 亚洲福利一二三区| 成人性生交大片免费看在线播放| 99re成人精品视频| 日韩三级在线观看| 亚洲柠檬福利资源导航| 久久国产婷婷国产香蕉| 99国产精品久久久久久久久久| 91精品国产91综合久久蜜臀| 国产精品女同一区二区三区| 天天综合日日夜夜精品| 国产69精品久久99不卡| 在线综合+亚洲+欧美中文字幕| 国产精品视频一二三| 蜜臀久久99精品久久久久久9| 99久久伊人久久99| 欧美成人免费网站| 亚洲va韩国va欧美va精品| 国产成人精品免费网站| 日韩一区二区不卡|