最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring-data-redis操作redis知識總結

 更新時間:2017年04月14日 10:29:30   作者:醉眼識朦朧  
這篇文章主要介紹了Spring-data-redis操作redis知識總結,spring-data-redis是spring-data模塊的一部分,專門用來支持在spring管理項目對redis的操作。

什么是spring-data-redis

spring-data-redis是spring-data模塊的一部分,專門用來支持在spring管理項目對redis的操作,使用java操作redis最常用的是使用jedis,但并不是只有jedis可以使用,像jdbc-redis,jredis也都屬于redis的java客戶端,他們之間是無法兼容的,如果你在一個項目中使用了jedis,然后后來決定棄用掉改用jdbc-redis就比較麻煩了,spring-data-redis提供了redis的java客戶端的抽象,在開發(fā)中可以忽略掉切換具體的客戶端所帶來的影響,而且他本身就屬于spring的一部分,比起單純的使用jedis,更加穩(wěn)定.管理起來更加自動化.(當然jedis的缺點不止以上).

spring-data-redis的特性

1.自動管理連接池,提供了一個高度封裝的RedisTemplate類

2.針對jedis客戶端的大量api進行了歸類封裝,把同一類型的操作封裝成了Operation接口.支持redis中的五種數據類型的操作.

3.針對數據的"序列化與反序列化",提供了多種可以選擇的策略(RedisSerializer)

JdkSerializationRedisSerializer:當需要存儲java對象時使用.

StringRedisSerializer:當需要存儲string類型的字符串時使用.

JacksonJsonRedisSerializer:將對象序列化成json的格式存儲在redis中,需要jackson-json工具的支持,(目前我還沒使用過,不了解)

Operations

redisTemplate有兩個方法經常用到,一個是opsForXXX一個是boundXXXOps,XXX是value的類型,前者獲取到一個Opercation,但是沒有指定操作的key,可以在一個連接(事務)內操作多個key以及對應的value;后者會獲取到一個指定了key的operation,在一個連接內只操作這個key對應的value.

ValueOperation和BoundValueOperation

ValueOperations valueOperations = redisTemplate.opsForValue();

BoundValueOperations<String, User> boundValueOps = redisTemplate.boundValueOps("key");

ValueOperation可以緩存Integer,String,java對象等類型.使用.set(key,value)方法進行設置,get(key)方法用來獲取.

同樣的方式可以獲取ListOperations對象,可以用來緩存List,此外還有SetOperation,HashOperation

在spring+springmvc項目中使用spring-data-redis

1.maven配置,添加pom依賴

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-redis</artifactId>
  <version>1.3.4.RELEASE</version>
</dependency>

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.4.2</version>
</dependency>

2.spring-redis.xml配置:

 <!--JedisPoolConfig 連接池參數配置-->
 <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
  <!--最大空閑實例數-->
  <property name="maxIdle" value="300" />
  <!--最大活躍實例數-->
  <property name="maxTotal" value="600" />
  <!--創(chuàng)建實例時最長等待時間-->
  <property name="maxWaitMillis" value="1000" />
  <!--創(chuàng)建實例時是否驗證-->
  <property name="testOnBorrow" value="true" />
 </bean>

 <!--JedisConnectionFactory 跟配置數據庫連接池類似,需要配置JedisConnectionFactory來通過服務器或者連接池的方式獲取redis服務器的連接-->
 <bean id="connectionFactory"
   class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
  <property name="hostName" value="127.0.0.1"/>
  <property name="port" value="6379"/>
  <property name="usePool" value="true"/>
  <property name="poolConfig" ref="poolConfig"/>
 </bean>

 <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
 <bean id="valueSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>


 <!-- redis模板配置 spring-data-redis提供了一個基礎的泛型RedisTemplate封裝了基礎的crud操作-->
 <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
  <property name="connectionFactory" ref="connectionFactory"/>
  <property name="defaultSerializer" ref="stringRedisSerializer"/>
  <property name="keySerializer" ref="stringRedisSerializer"/>
  <property name="valueSerializer" ref="valueSerializer"/>

 </bean>

以上配置完成后,就可以使用spring-data-redis了,為了演示一下具體的使用,這里接著寫一個簡單地demo.

3.創(chuàng)建實體類User

public class User implements Serializable {

 private static final long serialVersionUID = 1L;

 /** 用戶ID */
 private Long id;

 /** 用戶名 */
 private String name;

 /** 用戶年齡 */
 private Integer age;
}

注意:如果需要向redis內存儲pojo對象,那么該對象必須要實現Serializable接口,因為在redis中存儲pojo類仍然存儲的是string,它會把數據轉化成byte[]數組的形式,在存取的時候就要對數據格式進行轉化,就涉及到了序列化與反序列化.

4.創(chuàng)建UserCcontroller

@Controller
public class UserController extends BaseController {

 @Autowired
 private IUserService userService;

 @Autowired
 private RedisTemplate<String,User> redisTemplate;

 @ResponseBody
 @RequestMapping("/redis")
 public Object redis() {

  User u1=new User();
  u1.setId(1L);
  u1.setName("wang");
  u1.setAge(22);
  redisTemplate.opsForValue().set("user:wang",u1);

  User u2=redisTemplate.opsForValue().get("user:wang");
  return u2;
 }
}

這里我們將user對象存儲到redis中,再讀出來,運行項目,測試這個接口,就可以在瀏覽器中看到json格式的user對象.

常見報錯及解決方案

最開始我測試spring-data-redis的功能是從一個空項目一點點配置的,啟動時報了很多異常,下面一個一個來.

1.啟動tomcat報錯

復制代碼 代碼如下:

Caused by: java.lang.VerifyError: (class: org/springframework/data/redis/connection/jedis/JedisConnectionFactory,
method: afterPropertiesSet signature: ()V) Incompatible argument to function

原因及解決方案:

在pom中我最開始配置的jedis版本是2.7.3,spring-data-redis版本是1.1.1,網上搜索了一翻,發(fā)現有一個說法是jedis-2.7.3.jar 和 spring-data-redis-1.1.1.RELEASE.jar 無法搭配使用,于是我把spring-data-redis的版本設成比較高的1.3.4,重新部署,果然此問題解決,緊接著問題又來了.

2.啟動tomcat報錯

復制代碼 代碼如下:

Caused by: Java.lang.NoSuchMethodError: redis.clients.jedis.JedisShardInfo.setTimeout(I)V

原因及解決方案:同樣是版本的問題(沒錯,都被我撞上了),jedis版本是2.7.3,太高了,改成2.4.3以后,問題解決.

3.啟動tomcat報錯

復制代碼 代碼如下:

java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool

原因及解決方案:這個GenericObjectPool使用到了commons-pool.jar中的類,我們的依賴中沒有這個jar,所以添加commons-pool的dependency即可.

4.運行接口報錯

復制代碼 代碼如下:

HTTP Status 500 - Request processing failed; nested exception is java.lang.ClassCastException: com.baomidou.springmvc.model.system.User cannot be cast to java.lang.String

原因及解決方案:在spring-redis配置文件中的redisTemplate的property中缺少name="valueSerializer"的配置,因為存儲在redis的value是user對象,需要使用JdkSerializationRedisSerializer對象進行對象的序列化操作,解決方案就是配置成上面spring-redis.xml的方式.

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

相關文章

  • Spring Boot 啟動加載數據 CommandLineRunner的使用

    Spring Boot 啟動加載數據 CommandLineRunner的使用

    本篇文章主要介紹了Spring Boot 啟動加載數據 CommandLineRunner的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • SpringBoot獲取application.properties文件中文亂碼問題及解決

    SpringBoot獲取application.properties文件中文亂碼問題及解決

    這篇文章主要介紹了SpringBoot獲取application.properties文件中文亂碼問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 淺談Java代理(jdk靜態(tài)代理、動態(tài)代理和cglib動態(tài)代理)

    淺談Java代理(jdk靜態(tài)代理、動態(tài)代理和cglib動態(tài)代理)

    下面小編就為大家?guī)硪黄獪\談Java代理(jdk靜態(tài)代理、動態(tài)代理和cglib動態(tài)代理)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Java實現酒店客房管理系統

    Java實現酒店客房管理系統

    這篇文章主要為大家詳細介紹了Java實現酒店客房管理系統,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Spring中數據訪問對象Data Access Object的介紹

    Spring中數據訪問對象Data Access Object的介紹

    今天小編就為大家分享一篇關于Spring中數據訪問對象Data Access Object的介紹,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java里volatile關鍵字是什么意思

    Java里volatile關鍵字是什么意思

    volatile具有synchronized關鍵字的“可見性”,但是沒有synchronized關鍵字的“并發(fā)正確性”,也就是說不保證線程執(zhí)行的有序性。這篇文章主要介紹了Java里volatile關鍵字是什么意思的相關資料,需要的朋友可以參考下
    2016-11-11
  • Spring?Cloud?Ribbon的使用原理解析

    Spring?Cloud?Ribbon的使用原理解析

    現在Java非常流行微服務,也就是所謂的面向服務開發(fā),將一個項目拆分成了多個項目,其優(yōu)點有很多,其中一個優(yōu)點就是:將服務拆分成一個一個微服務后,我們很容易的來針對性的進行集群部署,這篇文章主要介紹了Spring?Cloud?Ribbon的使用詳解,需要的朋友可以參考下
    2022-07-07
  • Java Swing JFrame窗口的實現

    Java Swing JFrame窗口的實現

    這篇文章主要介紹了Java Swing JFrame窗口的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • SpringBoot項目實戰(zhàn)之加載和讀取資源文件

    SpringBoot項目實戰(zhàn)之加載和讀取資源文件

    在項目的開發(fā)中,我們知道的是SpringBoot框架大大減少了我們的配置文件,但是還是留下了一個application.properties文件讓我們可以進行一些配置,下面這篇文章主要給大家介紹了關于SpringBoot項目實戰(zhàn)之加載和讀取資源文件的相關資料,需要的朋友可以參考下
    2021-10-10
  • Java實現二分搜索樹的示例代碼

    Java實現二分搜索樹的示例代碼

    二分搜索樹是一顆二叉樹,二分搜索樹每個節(jié)點的左子樹的值都小于該節(jié)點的值,每個節(jié)點右子樹的值都大于該節(jié)點的值。本文將利用Java實現二分搜索樹,需要的可以參考一下
    2022-03-03

最新評論

密云县| 通渭县| 邢台市| 育儿| 永新县| 佛冈县| 台江县| 宜兰县| 新巴尔虎右旗| 土默特左旗| 辽宁省| 保山市| 葵青区| 伊吾县| 江油市| 泰和县| 四会市| 荣成市| 滦南县| 仁怀市| 潍坊市| 新民市| 双柏县| 宣武区| 汉川市| 宜兰市| 哈巴河县| 墨竹工卡县| 东莞市| 恩施市| 五峰| 肇源县| 惠东县| 铜梁县| 新营市| 乌审旗| 饶河县| 玛纳斯县| 锡林郭勒盟| 武功县| 三门峡市|