1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
      Spring-data-redis操作redis知識(shí)總結(jié)

      什么是spring-data-redis

      因?yàn)榕驼嬲\(chéng),有更多的客戶和我們聚集在一起,為了共同目標(biāo),成都創(chuàng)新互聯(lián)在工作上密切配合,從創(chuàng)業(yè)型企業(yè)到如今不斷成長(zhǎng),要感謝客戶對(duì)我們的高要求,讓我們敢于面對(duì)挑戰(zhàn),才有今天的進(jìn)步與發(fā)展。從網(wǎng)站到重慶小程序開(kāi)發(fā),軟件開(kāi)發(fā),成都App定制開(kāi)發(fā),十余年企業(yè)網(wǎng)站建設(shè)服務(wù)經(jīng)驗(yàn),為企業(yè)提供網(wǎng)站設(shè)計(jì),網(wǎng)站托管運(yùn)營(yíng)一條龍服務(wù).為企業(yè)提供營(yíng)銷(xiāo)型網(wǎng)站,專(zhuān)業(yè)公司,原創(chuàng)設(shè)計(jì),十余年品質(zhì),值得您的信賴.

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

      spring-data-redis的特性

      1.自動(dòng)管理連接池,提供了一個(gè)高度封裝的RedisTemplate類(lèi)

      2.針對(duì)jedis客戶端的大量api進(jìn)行了歸類(lèi)封裝,把同一類(lèi)型的操作封裝成了Operation接口.支持redis中的五種數(shù)據(jù)類(lèi)型的操作.

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

      JdkSerializationRedisSerializer:當(dāng)需要存儲(chǔ)java對(duì)象時(shí)使用.

      StringRedisSerializer:當(dāng)需要存儲(chǔ)string類(lèi)型的字符串時(shí)使用.

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

      Operations

      redisTemplate有兩個(gè)方法經(jīng)常用到,一個(gè)是opsForXXX一個(gè)是boundXXXOps,XXX是value的類(lèi)型,前者獲取到一個(gè)Opercation,但是沒(méi)有指定操作的key,可以在一個(gè)連接(事務(wù))內(nèi)操作多個(gè)key以及對(duì)應(yīng)的value;后者會(huì)獲取到一個(gè)指定了key的operation,在一個(gè)連接內(nèi)只操作這個(gè)key對(duì)應(yīng)的value.

      ValueOperation和BoundValueOperation

      ValueOperations valueOperations = redisTemplate.opsForValue();
      
      BoundValueOperations boundValueOps = redisTemplate.boundValueOps("key");
      

      ValueOperation可以緩存Integer,String,java對(duì)象等類(lèi)型.使用.set(key,value)方法進(jìn)行設(shè)置,get(key)方法用來(lái)獲取.

      同樣的方式可以獲取ListOperations對(duì)象,可以用來(lái)緩存List,此外還有SetOperation,HashOperation

      在spring+springmvc項(xiàng)目中使用spring-data-redis

      1.maven配置,添加pom依賴

      
        org.springframework.data
        spring-data-redis
        1.3.4.RELEASE
      
      
      
        redis.clients
        jedis
        2.4.2
      
      

      2.spring-redis.xml配置:

       
       
        
        
        
        
        
        
        
        
       
      
       
       
        
        
        
        
       
      
       
       
      
      
       
       
        
        
        
        
      
       
      
      

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

      3.創(chuàng)建實(shí)體類(lèi)User

      public class User implements Serializable {
      
       private static final long serialVersionUID = 1L;
      
       /** 用戶ID */
       private Long id;
      
       /** 用戶名 */
       private String name;
      
       /** 用戶年齡 */
       private Integer age;
      }
      
      

      注意:如果需要向redis內(nèi)存儲(chǔ)pojo對(duì)象,那么該對(duì)象必須要實(shí)現(xiàn)Serializable接口,因?yàn)樵趓edis中存儲(chǔ)pojo類(lèi)仍然存儲(chǔ)的是string,它會(huì)把數(shù)據(jù)轉(zhuǎn)化成byte[]數(shù)組的形式,在存取的時(shí)候就要對(duì)數(shù)據(jù)格式進(jìn)行轉(zhuǎn)化,就涉及到了序列化與反序列化.

      4.創(chuàng)建UserCcontroller

      @Controller
      public class UserController extends BaseController {
      
       @Autowired
       private IUserService userService;
      
       @Autowired
       private RedisTemplate 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對(duì)象存儲(chǔ)到redis中,再讀出來(lái),運(yùn)行項(xiàng)目,測(cè)試這個(gè)接口,就可以在瀏覽器中看到j(luò)son格式的user對(duì)象.

      常見(jiàn)報(bào)錯(cuò)及解決方案

      最開(kāi)始我測(cè)試spring-data-redis的功能是從一個(gè)空項(xiàng)目一點(diǎn)點(diǎn)配置的,啟動(dòng)時(shí)報(bào)了很多異常,下面一個(gè)一個(gè)來(lái).

      1.啟動(dòng)tomcat報(bào)錯(cuò)

      復(fù)制代碼 代碼如下:

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

      原因及解決方案:

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

      2.啟動(dòng)tomcat報(bào)錯(cuò)

      復(fù)制代碼 代碼如下:

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

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

      3.啟動(dòng)tomcat報(bào)錯(cuò)

      復(fù)制代碼 代碼如下:

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

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

      4.運(yùn)行接口報(bào)錯(cuò)

      復(fù)制代碼 代碼如下:

      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"的配置,因?yàn)榇鎯?chǔ)在redis的value是user對(duì)象,需要使用JdkSerializationRedisSerializer對(duì)象進(jìn)行對(duì)象的序列化操作,解決方案就是配置成上面spring-redis.xml的方式.

      以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


      本文題目:Spring-data-redis操作redis知識(shí)總結(jié)
      本文URL:http://www.ef60e0e.cn/article/jhcpep.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        浮梁县| 永仁县| 云安县| 巴东县| 文安县| 甘洛县| 余姚市| 静乐县| 建湖县| 长武县| 乌苏市| 剑川县| 和龙市| 称多县| 全南县| 孟连| 兴和县| 神木县| 安康市| 克什克腾旗| 黄大仙区| 古田县| 平安县| 旺苍县| 平和县| 志丹县| 平定县| 昌乐县| 奉化市| 黄山市| 绥德县| 博乐市| 河西区| 丰台区| 囊谦县| 贵州省| 建昌县| 繁峙县| 灵石县| 溧水县| 犍为县|