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

首頁 > 數據庫 > Redis > 正文

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

2020-10-28 21:35:33
字體:
來源:轉載
供稿:網友

本文介紹簡單的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     //那么直接返回數據

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久国产精品久久久久久久久久 | 91精品国产乱码久久久久久久久 | 久久这 | 久草在线新时代视觉 | 网站毛片 | 久久久久久久一区二区三区 | 自拍亚洲伦理 | 黄色片网站在线免费观看 | 中文字幕欧美日韩 | 欧美一级黄 | 极品销魂一区二区三区 | 在线成人免费网站 | 国产xxxx岁13xxxxhd | 污视频在线免费播放 | 91视频久久 | 免费h片 | 真人一级毛片免费 | 国产成人在线视频播放 | 婷婷亚洲一区二区三区 | lutube成人福利在线观看 | 亚洲字幕av| 久久精精 | 成人啪啪18免费网站 | 久久不射电影 | 久久精品网 | 国产精品一区二区x88av | 国产成人在线播放视频 | 色屁屁xxxxⅹ在线视频 | 亚洲国产综合在线观看 | 国产免费美女 | 国产精品视频免费在线观看 | 手机免费看一级片 | 久久久久久久久久久亚洲 | 欧美成人se01短视频在线看 | 一级黄色影院 | 精品久久久久久久久久久aⅴ | 免费播放欧美毛片 | 免费一区在线 | 久久久久久久久成人 | 孕妇体内谢精满日本电影 | 欧美精品久久久久久久多人混战 |