redis 與 spring整合 hash 增刪改操做 list增刪改操做

本人,對於之前redis的學習是很是痛苦的!近期將之前的東西撿起來。以博客的形式存儲,以便於之後快速撿起來,並和廣大同胞一塊兒分享!redis

1):簡單介紹spring

redis 是基於C語言開發。數據庫

redis是一個key-value存儲系統。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。緩存

redis 是一個 緩存數據庫(片面的理解) 既能夠作緩存,也能夠將數據持久化到磁盤中!服務器

 

本人有經過redis的hash數據類型來作過購物車數據結構

spring配置文件 spring-redis.xml併發

    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
          <property name="maxIdle" value="6"></property>
          <property name="minEvictableIdleTimeMillis" value="300000"></property>
          <property name="numTestsPerEvictionRun" value="3"></property>
          <property name="timeBetweenEvictionRunsMillis" value="60000"></property>
     </bean> app


 
     <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">
          <property name="poolConfig" ref="jedisPoolConfig"></property>
          <property name="hostName" value="***.***.**.**"></property> 《更改ip》
          <property name="port" value="6379"></property> 《更改 端口號》
          <property name="timeout" value="15000"></property>
          <property name="usePool" value="true"></property>
     </bean>
     <bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
          <property name="connectionFactory" ref="jedisConnectionFactory"></property>
          <property name="keySerializer">
                   <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
          </property>
          <property name="valueSerializer">
                   <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
          </property>
     </bean> 性能

 

hash數據結構圖學習

 

簡單介紹一下:

 

   注入redis數據源:  
   

  hash的操做方法

(1):得到hash數據類型的模板

   //得到redis緩存HASH數據類型(散列)
        HashOperations opsForHash = redisTemplate.opsForHash();

(2):經過 會員id 和 商品 id 獲得商品信息

    //判斷該用戶(的商品)在緩存中有沒有該數據     hkey需爲string類型
        Order cacheOrder = (Order) opsForHash.get(order.getMemberId() + "", order.getGoodsId());

(3):存入信息 ,

  //根據會員ID 以及  商品 ID 將數據存入緩存中 【opsForHash.put(key, hashKey, value);】value爲object類型
      opsForHash.put(order.getMemberId() + "", order.getGoodsId(), goodsOrder);

(4):修改商品庫存(修改的原則是先對 value 數值進行修改  在將修改後的數值存入緩存中  會覆蓋原來的緩存信息 )

  //判斷該用戶(的商品)在緩存中有沒有該數據       【先修改數值】
      Order cacheOrder = (Order) opsForHash.get(order.getMemberId() + "", order.getGoodsId());

  //更新修改後的緩存數據
      opsForHash.put(order.getMemberId() + "", order.getGoodsId(), cacheOrder);

(5):刪除緩存數據  【不過通常不會直接刪除,只會作邏輯刪除】

  opsForHash.delete(key, hashKeys);

 

簡單演示一下list的幾種方法:

(1):得到list數類型

  //得到redis緩存list數據類型
        ListOperations opsForList = redisTemplate.opsForList();

(2):根據鍵名得到長度

  Long size = opsForList.size(order.getMemberId() + "");

(3):添加信息

   //將購物信息添加到緩存中 rightPush 依次有右邊添加  leftPush依次由左邊添加
         opsForList.rightPush(order.getMemberId() +"" ,cacheOrder);

(4):得到list集合 【 0 ,-1 表明全部值】

    //得到全部當前能夠的全部信息
          List<Order> range = opsForList.range(order.getMemberId() +"」, 0, -1);

 

  llist數據類型適合於消息隊列的場景:好比12306併發量過高,而同一時間段內只能處理指定數量的訂單!必須知足先進先出的原則,其他訂單處於等待 

 

 

  redis事務  :原子性,即 要不所有成功 要不所有失敗

  redis持久化 :rdb           aof

  RDB方式:

  RDB持久化默認生成的文件名爲dump.rdb

  Redis.conf中能夠配置,默認配置以下:【默認是開啓RDB方式的】

  save 900 1
  save 300 10
  save 60 10000

  以上表示的意思是,【 知足任一條件 , 都會進行持久化 】

  900秒以內對服務進行了至少一次修改

  300秒以內服務器進行了至少10次修改

  60秒以內對服務器進行了至少10000次修改。

  AOF方式:

  appendonly yes              #啓用aof持久化方式
  # appendfsync always     #每次收到寫命令就當即強制寫入磁盤,最慢的,可是保證徹底的持久化,不推薦使用
 
appendfsync everysec     #每秒鐘強制寫入磁盤一次,在性能和持久化方面作了很好的折中,推薦
  # appendfsync no          #徹底依賴os,性能最好,持久化沒保證
 

 

  本人在寫博客的時候也借鑑了一些博友的資源!

相關文章
相關標籤/搜索