麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Redis > 正文

redis緩存的簡單操作(get、put)

2020-03-17 12:36:12
字體:
來源:轉載
供稿:網友

本文介紹簡單的redis緩存操作,包括引入jedisjar包、配置redis、RedisDao需要的一些工具、向redis中放數據(put)、從redis中取數據(get)、訪問redis時的邏輯

一、引入jedis jar包

<!-- java訪問redis的jar包jedis --><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version></dependency><!-- protostuff序列化依賴 --><dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.0.8</version></dependency><dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.0.8</version></dependency>

注意:為什么要引入序列化依賴jar包protostuff?

1)從redis中取出的數據是序列化的,我們需要使用protostuff的反序列化操作,講序列化對象轉化成我們的需要的對象

2)向redis中放入數據時,我們需要先使用protostuff的序列化操作,將對象轉化成序列化對象,才能放入redis

二、在spring配置文件中注入redis,放入spring的ioc容器

<!-- 注入redis dao --><bean id="redisDao" class="org.demo.dao.cache.RedisDao">  <constructor-arg index="0" value="localhost"></constructor-arg>  <constructor-arg index="1" value="6379"></constructor-arg></bean>

注意:

1)這里的RedisDao路徑是我的包路徑,注意你在配置的時候應使用你自己的路徑

2)這里使用本地的redis服務localhost

3)redis服務的默認端口是6379

三、RedisDao需要的一些工具

//redis連接池 private final JedisPool jedisPool;//根據對象的字節碼文件,生成空對象 private RuntimeSchema<Object> schema = RuntimeSchema.createFrom(Object.class); //Object.class:獲取對象的字節碼  public RedisDao(String ip, int port){  jedisPool = new JedisPool(ip, port); }

注意:

1)RedisDao需要redis的連接池JedisPool,就好比JDBC的數據庫連接池一樣。我們在RedisDao的構造器中會初始化這個連接池

2)我們需要一個可以根據對象的字節碼文件生成空對象的工具 RuntimeSchema。你要使用什么對象,你就在Object的位置寫入你的對象(Object.class:獲取對象的字節碼文件)

3)連接池JedisPool的初始化需要兩個參數:ip、port

四、向redis中放數據(put)

//將對象緩存到redis public String putObject(Object obj){  //緩存邏輯:Object --> 序列化 --> byte[] --> 緩存到redis  try {   Jedis jedis = jedisPool.getResource(); //獲取redis的連接對象,相當于JDBC的connection   try{    String key = "Object:"+obj.getId();    //進行序列化    byte[] bytes = ProtostuffIOUtil.toByteArray(seckill, schema,       LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE)); //如果對象過大,會進行緩沖    //開始緩存    int timeout = 60*60; //設置超時時間 一小時,通過超時維護一致性    String result = jedis.setex(key.getBytes(), timeout, bytes);    return result;   }finally{    jedis.close();   }  } catch (Exception e) {   e.printStack();  }  return null; }

注意:

1)緩存邏輯:Object --> 序列化操作 --> byte[] --> 寫入redis。也就是先把對象序列化,再寫入redis!

2)我們在操作redis之前必須先拿到redis的連接對象,從連接池拿

五、從redis中取數據(get)

 //從redis緩存中查詢 public Object getObject(long id){  //redis操作邏輯  try {   Jedis jedis = jedisPool.getResource(); //緩存連接對象,相當于數據庫連接對象connection   try {    String key = "Object:"+id;    //實體對象并沒有實現內部序列化操作    //緩存邏輯:getByte[] --> 反序列化 --> Object    byte[] bytes = jedis.get(key.getBytes()); //從jedis中獲取目標對象的序列化對象數組    if(bytes != null){     //反序列化邏輯     Object obj = schema.newMessage(); //通過schema生成一個新的空對象     ProtostuffIOUtil.mergeFrom(bytes, obj, schema); //進行反序列化操作     return obj;    }       } finally {    jedis.close();   }      } catch (Exception e) {        e.printStack();  }  return null; }

注意:

1)取數據邏輯:redis --> 得到byte[] --> 反序列化 --> Object

2)我們在放數據的時候,是以鍵值對的形式:id --> obj。我們在取數據的時候,就是根據id來取的

六、查詢redis時的邏輯

偽代碼:

get form redis_cache    //首先查詢redisif null       //如果沒有 get from db     //再從數據庫db查詢 if null      //如果仍然沒有  return null    //那么返回空 else       //否則  put into redis_cache  //現將數據放入redis  return obj    //再放回數據else        //如果從redis中查詢到了 return obj     //那么直接返回數據

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Redis頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品一区二区三区欧美 | 毛片免费在线 | 一级黄色性感片 | 宅男噜噜噜66国产在线观看 | 日日艹夜夜艹 | 成人午夜在线播放 | 一本免费视频 | 在线亚洲欧美 | 成年人精品视频 | 玩偶姐姐 在线观看 | 美女黄污视频 | 久久成人免费网站 | 精品久久久91| 国产高清自拍一区 | 欧美 国产 亚洲 卡通 综合 | 天天透天天狠天天爱综合97 | 成人在线视频免费播放 | 999久久久久久 | 亚洲日本韩国在线观看 | 一级大黄毛片 | 99精品视频免费看 | 成人一区二区三区四区 | 我爱我色成人网 | 久久久久亚洲视频 | 精品日韩欧美 | 一级做a爱片久久 | 成人免费看毛片 | 一本色道精品久久一区二区三区 | 激情影院在线观看 | 久久久久久久91 | 久久精品小短片 | 狼人狠狠干 | 日韩在线播放中文字幕 | 成人国产精品一区二区毛片在线 | 91精品国 | 日韩美香港a一级毛片 | 黄色毛片一级视频 | 久久国产精品久久久久久久久久 | 国产精品片一区二区三区 | 万圣街在线观看免费完整版 | 久久精品中文字幕一区二区 |