【Redis学习】Redis的安装、管理、适用场合以及使用
1、Redis概述
我們知道,內存是電腦主板上的存儲部件,用于存儲當前正在使用的數據和程序,CPU可以與內存直接溝通,所以訪問速速非常高;而外存數據必須加載到內存以后程序才能使用。如果把CPU當做一個吃貨,那么內存是碗,而外存是鍋,這個吃貨再能吃,也得先把飯從鍋里盛到碗里再下嘴,而不能直接跳到鍋里大快朵頤。但是很多時候CPU吃的并不爽,一是因為碗不夠大,沒吃兩嘴就沒了;二是從鍋里往碗里盛飯是個比較耗時的過程,等待很痛苦。正經點說,就是內存大小、I/O速度、網絡響應時間等常常成為應用系統的性能瓶頸。
傳統的關系型數據庫如MySQL、Oracle、DB2等,數據存儲在磁盤的文件系統中,增刪改查需要頻繁地在內存與外存之間交換數據,很費時間。
在以上背景下,小巧而功能強大的存儲結構,用于在內存中管理數據量不太大但是訪問量特別大的熱點數據—Redis應運而生。
Redis是一個開源的使用C語言編寫、開源、支持網絡、可基于內存亦可持久化的日志型、高性能的Key-Value數據庫,并提供多種語言的API。它通常被稱為數據結構服務器,因為值(value)可以是 字符串(String)、哈希(Map)、 列表(list)、集合(sets) 和 有序集合(sorted sets)等類型。
Redis是Remote Dictionary Server的簡稱,是一個由意大利人Salvatore Sanfilippo開發的key-value存儲系統,具有極高的讀寫性能,讀的速度可達110000次/s,寫的速度可達81000次/s 。
與Redis類似的產品還有memcache,同樣是一個基于內存的key-value存儲系統,但是由于memcache數據結構單一,數據安全性低下等原因,大有被Redis取而代之的趨勢。
Redis 與其他 key - value 緩存產品相比,有以下特點:
1、Redis支持數據的持久化,周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,重啟的時候可以再次加載進行使用。
3、Redis支持數據的備份,即master-slave模式的數據備份。
5、Redis還支持 publish/subscribe, 通知, key過期等高級特性。
互聯網發展到現在,僅靠傳統的關系型數據庫已經遠不能應對各種變態的需求,一個大型的互聯網應用往往需要各類數據庫相互合作,才能達到高可用、高性能的標準。
比如,使用MySQL/Oracle/DB2管理核心數據,使用Memcache/Redis管理熱點數據,使用Hbase/Hadoop管理海量數據……總之,在合適的地方選擇合適的數據庫。
2、Redis的安裝和部署
以2.8.6為例進行下述的操作及說明。
2.1 Centos安裝部署
安裝步驟如下:
第一步:
//將redis-2.8.6.tar.gz安裝包解壓縮
tar -zxvf redis-2.8.17.tar.gz
第二步:
//)進入redis-2.8.6目錄
cd redis-2.8.17
第三步:
//執行make命令進行編譯
make
第四步:
編譯結束之后,配置redis.conf文件,將“daemonize”屬性設置為“yes”,表示我們會以后臺進程形式啟動Redis服務;將“port”屬性設置為指定的端口,這里默認為“6379”;將“logfile”屬性設置為指定的日志路徑,其余的屬性可以保持默認
第五步:
使用命令src/redis-server ./redis.conf啟動Redis服務,啟動之后,可以在剛才配置的日志路徑中看到如下類似信息:
第六步:
執行客戶端命令,驗證服務是否正常:
第七步:
執行以下命令src/redis-cli shutdown,停止Redis服務。
注意:如果設置了密碼后,redis-cli是無法關掉Redis服務的,必須加上ip、port、passwd:
sudo redis-cli -h host -p port -a passwd shutdown //退出客戶端 QUIT3、redis.conf配置文件說明
就像pom.xml是maven最重要的配置文件一樣,redis.conf也是redis最重要的配置文件,下面我么來學習一下它的參數說明:
| daemonize | 如果值是yes,則啟動服務的時候是后臺守護進程的形式,如果是no,則相反 |
| pidfile | 指定存儲Redis進程號的文件路徑 |
| port | 指定當前Redis服務的端口,默認為6379 |
| tcp-backlog | 此參數確定了TCP連接中已完成隊列(完成三次握手之后)的長度, 當然此值必須不大于Linux系統定義的/proc/sys/net/core/somaxconn值,默認是511,而Linux的默認參數值是128。當系統并發量大并且客戶端速度緩慢的時候,可以將這二個參數一起參考設定。 |
| timeout | 客戶端和Redis服務端的連接超時時間,默認是0,表示永不超時 |
| tcp-keepalive | 如果值非0,單位是秒,表示將周期性的使用SO_KEEPALIVE檢測客戶端是否還處于健康狀態,避免服務器一直阻塞,官方給出的建議值是60S |
| loglevel | Redis總共支持四個級別:debug、verbose、notice、warning。Debug:記錄很多信息,用于開發和測試;Varbose:有用的信息,不像debug會記錄那么多;Notice:普通的verbose,常用于生產環境;Warning:只有非常重要或者嚴重的信息會記錄到日志;默認是notice級別。 |
| logfile | 日志的存儲路徑 |
| databases | 可用的數據庫數,默認值為16,默認數據庫為0,數據庫范圍在0-(database-1)之間,個人覺得DB的概念類似于命名空間 |
| save | 保存數據庫快照信息到磁盤,其對應的值有兩個,比如save 300 10表示:300秒內至少有300個key被改變時,觸發保存信息到磁盤的事件 |
| stop-writes-on-bgsave-error | 當持久化出現錯誤之后,是否繼續提供寫服務 |
| rdbcompression | 持久化到RDB文件時,是否壓縮,“yes”為壓縮,“no”則反之 |
| rdbchecksum | 讀取和寫入的時候是否支持CRC64校驗,默認是開啟的 |
| dbfilename | 鏡像文件的名字 |
| dir | 當前工作目錄,配置文件和鏡像文件等都在此目錄下 |
| masterauth | 設置訪問master服務器的密碼 |
| slave-serve-stale-data | 當slave服務器和master服務器失去連接后,或者當數據正在復制傳輸的時候,如果此參數值設置“yes”,slave服務器可以繼續接受客戶端的請求,否則,會返回給請求的客戶端如下信息“SYNC with master in progress” |
| slave-read-only | 是否允許slave服務器節點只提供讀服務 |
| repl-disable-tcp-nodelay | 指定向slave同步數據時,是否禁用socket的NO_DELAY選項。若配置為“yes”,則禁用NO_DELAY,則TCP協議棧會合并小包統一發送,這樣可以減少主從節點間的包數量并節省帶寬,但會增加數據同步到slave的時間。若配置為“no”,表明啟用NO_DELAY,則TCP協議棧不會延遲小包的發送時機,這樣數據同步的延時會減少,但需要更大的帶寬。通常情況下,應該配置為no以降低同步延時,但在主從節點間網絡負載已經很高的情況下,可以配置為yes。 |
| slave-priority | 指定slave的優先級。在不只1個slave存在的部署環境下,當master宕機時,Redis Sentinel會將priority值最小的slave提升為master。需要注意的是,若該配置項為0,則對應的slave永遠不會自動提升為master。 |
| appendonly | 開啟append only 模式之后,redis 會把所接收到的每一次寫操作請求都追加到appendonly.aof 文件中,當redis 重新啟動時,會從該文件恢復出之前的狀態。但是這樣會造成appendonly.aof 文件過大,所以redis 還支持了BGREWRITEAOF 指令,對appendonly.aof 進行重新整理。默認是不開啟的。 |
| appendfilename | 默認為appendonly.aof。 |
| appendfsync | 設置aof的同步頻率,有三種選擇always、everysec、no,默認是everysec表示每秒同步一次。 |
| no-appendfsync-on-rewrite | 指定是否在后臺aof文件rewrite期間調用fsync,默認為no,表示要調用fsync(無論后臺是否有子進程在刷盤)。Redis在后臺寫RDB文件或重寫afo文件期間會存在大量磁盤IO,此時,在某些linux系統中,調用fsync可能會阻塞。 |
| auto-aof-rewrite-percentage | 指定Redis重寫aof文件的條件,默認為100,表示與上次rewrite的aof文件大小相比,當前aof文件增長量超過上次afo文件大小的100%時,就會觸發background rewrite。若配置為0,則會禁用自動rewrite |
| auto-aof-rewrite-min-size | 指定觸發rewrite的aof文件大小。若aof文件小于該值,即使當前文件的增量比例達到auto-aof-rewrite-percentage的配置值,也不會觸發自動rewrite。即這兩個配置項同時滿足時,才會觸發rewrite。 |
| lua-time-limit | 一個Lua腳本最長的執行時間,單位為毫秒,如果為0或負數表示無限執行時間,默認為5000 |
| notify-keyspace-events | 見參考3,按鍵通知事件 |
| aof-rewrite-incremental-fsync | aof rewrite過程中,是否采取增量文件同步策略,默認為“yes”。 rewrite過程中,每32M數據進行一次文件同步,這樣可以減少aof大文件寫入對磁盤的操作次數 |
4、Redis管理工具
Redis安裝好之后,進入安裝目錄的src文件夾,會發現里面有6個可執行文件:
它們對應著6個管理Redis的工具:
redis-server
redis-cli
redis-benchmark
redis-check-aof
redis-check-dump
redis-sentinel
4.1 redis-server
該工具用于啟動Redis服務器,處理與客戶端的對話,一個服務器可以與多個客戶端連接。
在終端輸入該命令,如果啟動成功,就會看到Redis那幅標志性的圖片.
4.2 redis-cli
該工具用于啟動Redis客戶端,發起與服務器的對話。可以使用參數來指定目標服務器的詳細信息,例如使用參數“-h”指定服務器IP地址、“-p”指定服務器端口、“-a”指定登錄密碼等,如:
Redis-cli –h 192.168.1.2 –p 6300
如不指定任何參數,則默認連接127.0.0.1的6379端口。
與Redis服務器取得連接后,就通過指令進行數據的存取、更改等操作了:
127.0.0.1:6379 > set name tom OK 127.0.0.1:6379 > get name "tom"4.3 redis-benchmark
該工具用于測試Redis在本機的性能,類似于魯大師的跑分程序。運行之后會得到一組數據存取效率的報告:
4.4 redis-check-aof
Redis雖然是基于內存的數據庫,但是會創建并更新在硬盤上的備份,備份有兩種方式,一個是把內存的數據導入dump.rdb文件中,另一中就是將每個執行過的命令記錄到AOF文件中。
該工具用于檢查、修復AOF文件。
4.5 redis-check-dump
與Redis-check-aof類似,該工具用于檢查dump.rdb文件。
4.6 redis-sentinel
該工具提供Redis實例的監控管理、通知和實例失效備援服務,是Redis集群的管理工具,監控各個其他節點的工作情況并且進行故障恢復,來提高集群的高可用性。
5、redis的適用場合
redis開創了一種新的數據存儲思路,使用redis我們可以利用redis靈活多變的數據結構和數據操作來進行一些復雜的操作。
下面是redis使用的一些場景:
1、取最新N個數據的操作
比如典型的區你網站的最新評論。通過下面的方式,我們可以將最新的5000條評論的ID放在redis的List集合中,并將超出集合的部分從數據庫中獲取。
使用LPUSH latest.comments命令,向list集合中插入數據;
插入完成后再用LTRIM latest.comments 0 5000命令使其永遠只保存最近5000個ID,然后我們在客戶端獲取某一頁評論時可以用下面的邏輯。
如果你還有不同的篩選維度,比如某個分類的最新N條,那么你可以再建一個按此分類的List。只存ID的話,redis是非常高效的。
2、排行榜應用,取TOP N操作
這個需求與上面需求的不同之處在于,前面操作以時間為權重,這個是以某個條件為權重。比如按頂的次數排序,這時候就需要我們的sorted set出來了。將你要排序的值設置成sorted set的score,將具體的數據設置成相應的value,每次只需要執行一條ZADD命令即可。
3、需要精準設定過期時間的應用
比如你可以把上面說到的sorted set的score值設置成過期時間的時間戳,那么就可以簡單的通過過期時間排序,定時清除過期數據了。不僅是清除redis中的過期數據,你完全可以把redis里這個過期時間當成是對數據庫中數據的索引,用redis來找出哪些數據需要過期刪除,然后再精確的從數據庫中刪除相應的記錄。
4、計數器應用
redis的命令是原子性的,你可以輕松地利用INCR,DECR命令來構建計數器系統。
–對存在的數字值 key 進行 DECR
redis> SET failure_times 10 OK redis> DECR failure_times (integer) 95、Uniq操作,獲取某段時間所有數據排重值
這個實用redis的set數據結構最合適了,只需要不斷講數據往set中扔就行了,set意為集合,所以會自動排重。
6、實時系統,反垃圾系統
通過上面說的set功能,你可以知道一個終端用戶是否進行了某個操作,可以找到其操作的集合并進行分析統計對比等。沒有做不到,只有想不到。
7、Pub/Sub構建實時消息系統
redis的Pub/Sub可以構建實時的消息系統,比如很多用Pub/Sub構建的實時聊天系統的例子。
8、構建隊列系統
使用List可以構建隊列系統,使用sorted set甚至可以構建有優先級的隊列系統。
9、緩存
這個不必說了,性能優于memcached,數據結構也更多樣化。
6、Java操作Redis
我們平時項目中使用最多的就是這個了,redis安裝部署完成之后,我們怎么使用Java操作redis呢?
目前Jedis是官方推薦的比較好的Redis操作API包,我們這里結合Spring來看下如何使用Redis這一神器。
首先在pom文件中引入Jedis包:
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.1.0</version> </dependency>在Spring的resource目錄中增加Redis的配置文件redis.properties
# Redis settingsredis.host=192.168.50.71redis.port=6379redis.pass=redis.timeout=0redis.maxIdle=300redis.maxActive=600redis.maxWait=1000redis.testOnBorrow=true配置Spring文件,完成Redis相關Bean的注入:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:property-placeholder location="classpath:redis.properties" /> <context:component-scan base-package="com.scott.demo" /><bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" /><bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"><property name="maxActive" value="50" /><property name="maxIdle" value="8" /><property name="maxWait" value="1000" /><property name="testOnBorrow" value="true"/><property name="testOnReturn" value="true"/><!-- <property name="testWhileIdle" value="true"/> --></bean><bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool" scope="singleton"><constructor-arg index="0" ref="jedisPoolConfig" /><constructor-arg index="1"><list><bean class="redis.clients.jedis.JedisShardInfo"><constructor-arg name="host" value="${redis.host}" /><constructor-arg name="port" value="${redis.port}" /><constructor-arg name="timeout" value="${redis.timeout}" /><constructor-arg name="weight" value="1" /></bean></list></constructor-arg></bean></beans>獲取Redis客戶端對象的類:
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import com.scott.demo.redis.service.RedisService;import redis.clients.jedis.ShardedJedis;import redis.clients.jedis.ShardedJedisPool;@Repository("redisService")public class RedisServiceImpl implements RedisService {private static final Logger log = LoggerFactory.getLogger(RedisServiceImpl.class);@Autowiredprivate ShardedJedisPool shardedJedisPool;public ShardedJedis getRedisClient() {try {ShardedJedis shardJedis = shardedJedisPool.getResource();return shardJedis;} catch (Exception e) {log.error("getRedisClent error", e);}return null;}public void returnResource(ShardedJedis shardedJedis) {shardedJedisPool.returnResource(shardedJedis);}public void returnResource(ShardedJedis shardedJedis, boolean broken) {if (broken) {shardedJedisPool.returnBrokenResource(shardedJedis);} else {shardedJedisPool.returnResource(shardedJedis);}}}實現redis相關操作的RedisClient類:
import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired;import com.scott.demo.redis.service.impl.RedisServiceImpl;import redis.clients.jedis.BinaryClient.LIST_POSITION; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPipeline; import redis.clients.jedis.SortingParams; import redis.clients.jedis.Tuple;public class RedisClient {private static final Logger log = LoggerFactory.getLogger(RedisClient.class);@Autowiredprivate RedisServiceImpl redisService;public void disconnect() {ShardedJedis shardedJedis = redisService.getRedisClient();shardedJedis.disconnect();}/*** 設置單個值*/public String set(String key, String value) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.set(key, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}/*** 獲取單個值*/public String get(String key) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.get(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Boolean exists(String key) {Boolean result = false;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.exists(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String type(String key) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.type(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}/*** 在某段時間后失效*/public Long expire(String key, int seconds) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.expire(key, seconds);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}/*** 在某個時間點失效*/public Long expireAt(String key, long time) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.expireAt(key, time);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long ttl(String key) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.ttl(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public boolean setbit(String key, long offset, boolean value) {ShardedJedis shardedJedis = redisService.getRedisClient();boolean result = false;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.setbit(key, offset, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public boolean getbit(String key, long offset) {ShardedJedis shardedJedis = redisService.getRedisClient();boolean result = false;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.getbit(key, offset);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public long setrange(String key, long offset, String value) {ShardedJedis shardedJedis = redisService.getRedisClient();long result = 0;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.setrange(key, offset, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String getrange(String key, long startOffset, long endOffset) {ShardedJedis shardedJedis = redisService.getRedisClient();String result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.getrange(key, startOffset, endOffset);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String getSet(String key, String value) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.getSet(key, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long setnx(String key, String value) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.setnx(key, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String setex(String key, int seconds, String value) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.setex(key, seconds, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long decrBy(String key, long integer) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.decrBy(key, integer);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long decr(String key) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.decr(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long incrBy(String key, long integer) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.incrBy(key, integer);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long incr(String key) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.incr(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long append(String key, String value) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.append(key, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String substr(String key, int start, int end) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.substr(key, start, end);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long hset(String key, String field, String value) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hset(key, field, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String hget(String key, String field) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hget(key, field);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long hsetnx(String key, String field, String value) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hsetnx(key, field, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String hmset(String key, Map<String, String> hash) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hmset(key, hash);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public List<String> hmget(String key, String... fields) {List<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hmget(key, fields);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long hincrBy(String key, String field, long value) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hincrBy(key, field, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Boolean hexists(String key, String field) {Boolean result = false;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hexists(key, field);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long del(String key) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.del(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long hdel(String key, String field) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hdel(key, field);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long hlen(String key) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hlen(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<String> hkeys(String key) {Set<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hkeys(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public List<String> hvals(String key) {List<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hvals(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Map<String, String> hgetAll(String key) {Map<String, String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.hgetAll(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}/*** 在redis list尾部增加一個String* */public Long rpush(String key, String string) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.rpush(key, string);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}/*** 在redis list頭部增加一個String* */public Long lpush(String key, String string) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.lpush(key, string);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long llen(String key) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.llen(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public List<String> lrange(String key, long start, long end) {List<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.lrange(key, start, end);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String ltrim(String key, long start, long end) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.ltrim(key, start, end);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String lIndex(String key, long index) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.lindex(key, index);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String lset(String key, long index, String value) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.lset(key, index, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long lrem(String key, long count, String value) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.lrem(key, count, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}/*** 從redis list頭部取出一個key* */public String lpop(String key) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.lpop(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}/*** 從redis list尾部取出一個key* */public String rpop(String key) {String result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.rpop(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long sadd(String key, String member) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.sadd(key, member);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<String> smembers(String key) {Set<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.smembers(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long srem(String key, String member) {ShardedJedis shardedJedis = redisService.getRedisClient();Long result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.srem(key, member);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String spop(String key) {ShardedJedis shardedJedis = redisService.getRedisClient();String result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.spop(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long scard(String key) {ShardedJedis shardedJedis = redisService.getRedisClient();Long result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.scard(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Boolean sismember(String key, String member) {ShardedJedis shardedJedis = redisService.getRedisClient();Boolean result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.sismember(key, member);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String srandmember(String key) {ShardedJedis shardedJedis = redisService.getRedisClient();String result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.srandmember(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long zadd(String key, double score, String member) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zadd(key, score, member);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<String> zrange(String key, int start, int end) {Set<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrange(key, start, end);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long zrem(String key, String member) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrem(key, member);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Double zincrby(String key, double score, String member) {Double result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zincrby(key, score, member);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long zrank(String key, String member) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrank(key, member);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long zrevrank(String key, String member) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrevrank(key, member);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<String> zrevrange(String key, int start, int end) {Set<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrevrange(key, start, end);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<Tuple> zrangeWithScores(String key, int start, int end) {Set<Tuple> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrangeWithScores(key, start, end);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<Tuple> zrevrangeWithScores(String key, int start, int end) {Set<Tuple> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrevrangeWithScores(key, start, end);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long zcard(String key) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zcard(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Double zscore(String key, String member) {Double result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zscore(key, member);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public List<String> sort(String key) {List<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.sort(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public List<String> sort(String key, SortingParams sortingParameters) {List<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.sort(key, sortingParameters);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long zcount(String key, double min, double max) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zcount(key, min, max);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<String> zrangeByScore(String key, double min, double max) {Set<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrangeByScore(key, min, max);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<String> zrevrangeByScore(String key, double max, double min) {Set<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrevrangeByScore(key, max, min);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<String> zrangeByScore(String key, double min, double max,int offset, int count) {Set<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrangeByScore(key, min, max, offset, count);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<String> zrevrangeByScore(String key, double max, double min,int offset, int count) {Set<String> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrevrangeByScore(key, max, min, offset, count);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<Tuple> zrangeByScoreWithScores(String key, double min, double max) {Set<Tuple> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrangeByScoreWithScores(key, min, max);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<Tuple> zrevrangeByScoreWithScores(String key, double max,double min) {Set<Tuple> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrevrangeByScoreWithScores(key, max, min);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<Tuple> zrangeByScoreWithScores(String key, double min,double max, int offset, int count) {Set<Tuple> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrangeByScoreWithScores(key, min, max,offset, count);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Set<Tuple> zrevrangeByScoreWithScores(String key, double max,double min, int offset, int count) {Set<Tuple> result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zrevrangeByScoreWithScores(key, max, min,offset, count);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long zremrangeByRank(String key, int start, int end) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zremrangeByRank(key, start, end);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long zremrangeByScore(String key, double start, double end) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.zremrangeByScore(key, start, end);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Long linsert(String key, LIST_POSITION where, String pivot,String value) {Long result = null;ShardedJedis shardedJedis = redisService.getRedisClient();if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.linsert(key, where, pivot, value);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}@SuppressWarnings("deprecation")public List<Object> pipelined(ShardedJedisPipeline shardedJedisPipeline) {ShardedJedis shardedJedis = redisService.getRedisClient();List<Object> result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.pipelined(shardedJedisPipeline);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Jedis getShard(String key) {ShardedJedis shardedJedis = redisService.getRedisClient();Jedis result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.getShard(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public JedisShardInfo getShardInfo(String key) {ShardedJedis shardedJedis = redisService.getRedisClient();JedisShardInfo result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.getShardInfo(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public String getKeyTag(String key) {ShardedJedis shardedJedis = redisService.getRedisClient();String result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.getKeyTag(key);} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Collection<JedisShardInfo> getAllShardInfo() {ShardedJedis shardedJedis = redisService.getRedisClient();Collection<JedisShardInfo> result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.getAllShardInfo();} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}public Collection<Jedis> getAllShards() {ShardedJedis shardedJedis = redisService.getRedisClient();Collection<Jedis> result = null;if (shardedJedis == null) {return result;}boolean flag = false;try {result = shardedJedis.getAllShards();} catch (Exception e) {log.error(e.getMessage(), e);flag = true;} finally {redisService.returnResource(shardedJedis, flag);}return result;}}總結
以上是生活随笔為你收集整理的【Redis学习】Redis的安装、管理、适用场合以及使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深入理解JVM】JVM字节码指令集
- 下一篇: 【深入理解JVM】ClassLoader