本人,對於之前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,性能最好,持久化沒保證
本人在寫博客的時候也借鑑了一些博友的資源!