Jedis是Redis的java客戶端。咱們能夠在java編程中使用它來編寫java代碼訪問Redis服務。html
1、準備工做java
①安裝redis:git
windows版本:https://github.com/mythz/redis-windowsgithub
下載完成後,右鍵解壓到D:\redisredis
啓動redis服務數據庫
窗口保持開啓,關閉時redis服務會自動關閉編程
②下載java開發包jediswindows
下載地址:http://www.oschina.net/p/jedis安全
pom.xml配置服務器
③java代碼測試
運行結果:
1.字符串數據類型(String)接口說明
字符串類型是Redis中最爲基礎的數據存儲類型,它在Redis中是二進制安全的,這便意味着該類型能夠接受任何格式的數據,如JPEG圖像數據或Json對象描述信息等。在Redis中字符串類型的Value最多能夠容納的數據長度是512M。
#設定該Key持有指定的字符串Value,若是該Key已經存在,則覆蓋其原有值。
--> void set(final String key, final String value)
#獲取指定Key的Value,若是該Key不存在,返回null。
--> byte[] get(final String key)
#判斷該鍵是否存在,存在返回1,不然返回0
--> boolean exists(final String key)
#刪除指定的Key
--> long delete(final String... keys)
#重命名指定的Key, 若是參數中的兩個Keys的命令相同,或者是源Key不存在,該命令都會返回相關的錯誤信息。若是newKey已經存在,則直接覆蓋。
--> void rename(final String oldkey, final String newkey)
#若是新值不存在,則將參數中的原值修改成新值。其它條件和RENAME一致。
--> boolean renamenx(final String oldkey, final String newkey)
#設置某個key的過時時間(單位:秒), 在超過該時間後,Key被自動的刪除。若是該Key在超時以前被修改,與該鍵關聯的超時將被移除。
--> boolean expire(final String key, final int seconds)
# EXPIREAT 的做用和 EXPIRE 相似,都用於爲 key 設置生存時間。不一樣在於 EXPIREAT 命令接受的時間參數是 UNIX 時間戳(unix timestamp)。
--> boolean expireAt(final String key, final long unixTime)
#經過ttl命令查看一下指定Key的剩餘存活時間(秒數),0表示已通過期,-1表示永不過時。
--> long ttl(final String key)
#將當前數據庫中的mysetkey鍵移入到ID爲dbIndex的數據庫中
--> boolean move(final String key, final int dbIndex)
#原子性的設置該Key爲指定的Value,返回該Key的原有值,若是該Key以前並不存在,則返回null。
--> byte[] getSet(final String key, final String value)
#返回一組指定Keys的Values的列表。
--> List<byte[]> mget(final String... keys)
#若是指定的Key不存在,則設定該Key持有指定字符串Value,此時其效果等價於SET命令。相反,若是該Key已經存在,該命令將不作任何操做並返回。
--> boolean setnx(final String key, final String value)
--> boolean setex(final String key, final int seconds, final String value)
#該命令原子性的完成參數中全部key/value的設置操做,若是在這一批Keys中有任意一個Key已經存在了,那麼該操做將所有回滾,即全部的修改都不會生效。
--> boolean msetnx(final String... keysvalues)
#將指定Key的Value原子性的遞增1。若是該Key不存在,其初始值爲0,在incr以後其值爲1,返回遞增後的值。
--> void incrBy(final String key, final long integer)
--> void incr(final String key)
#將指定Key的Value原子性的遞減1。若是該Key不存在,其初始值爲-1,在incr以後其值爲1,返回遞減後的值。
--> long decrBy(final String key, final long integer)
--> long decr(final String key)
#若是該Key已經存在,APPEND命令將參數Value的數據追加到已存在Value的末尾。若是該Key不存在,APPEND命令將會建立一個新的Key/Value。返回追加後的Value的長度。
--> long append(final String key, final String value)
2. 字符鏈表(List)數據類型接口說明
在Redis中,List類型是按照插入順序排序的字符串鏈表。和數據結構中的普通鏈表同樣,咱們能夠在其頭部(left)和尾部(right)添加新的元素。在插入時,若是該鍵並不存在,Redis將爲該鍵建立一個新的鏈表。與此相反,若是鏈表中全部的元素均被移除,那麼該鍵也將會被從數據庫中刪除。List中能夠包含的最大元素數量是4,294,967,295(42億左右)。
#在指定Key所關聯的List Value的尾部插入參數中給出的全部Values。若是該Key不存在,該命令將在插入以前建立一個與該Key關聯的空鏈表,以後再將數據從鏈表的尾部插入。若是該鍵的Value不是鏈表類型,該命令將返回相關的錯誤信息。
--> void rpush(final String key, final String... string)
#在指定Key所關聯的List Value的頭部插入參數中給出的全部Values。若是該Key不存在,該命令將在插入以前建立一個與該Key關聯的空鏈表,以後再將數據從鏈表的頭部插入。若是該鍵的Value不是鏈表類型,該命令將返回相關的錯誤信息。
--> void lpush(final String key, final String... string)
#返回指定Key關聯的鏈表中元素的數量,若是該Key不存在,則返回0。若是與該Key關聯的Value的類型不是鏈表,則返回相關的錯誤信息。
--> long llen(final String key)
#返回指定範圍內元素的列表。該命令的參數start和end都是0-based。即0表示鏈表頭部(leftmost)的第一個元素。其中start的值也能夠爲負值,-1將表示鏈表中的最後一個元素,即尾部元素,-2表示倒數第二個並以此類推。該命令在獲取元素時,start和end位置上的元素也會被取出。若是start的值大於鏈表中元素的數量,空鏈表將會被返回。若是end的值大於元素的數量,該命令則獲取從start(包括start)開始,鏈表中剩餘的全部元素。
--> List<byte[]> lrange(final String key, final long start, final long end)
#該命令將僅保留指定範圍內的元素,從而保證連接中的元素數量相對恆定。start和stop參數都是0-based,0表示頭部元素。和其餘命令同樣,start和stop也能夠爲負值,-1表示尾部元素。若是start大於鏈表的尾部,或start大於stop,該命令不錯報錯,而是返回一個空的鏈表,與此同時該Key也將被刪除。若是stop大於元素的數量,則保留從start開始剩餘的全部元素。
--> void ltrim(final String key, final long start, final long end)
#該命令將返回鏈表中指定位置(index)的元素,index是0-based,表示頭部元素,若是index爲-1,表示尾部元素。若是與該Key關聯的不是鏈表,該命令將返回相關的錯誤信息。
--> byte[] lindex(final String key, final long index)
#設定鏈表中指定位置的值爲新值,其中0表示第一個元素,即頭部元素,-1表示尾部元素。若是索引值Index超出了鏈表中元素的數量範圍,該命令將返回相關的錯誤信息。
--> void lset(final String key, final long index, final String value)
#在指定Key關聯的鏈表中,刪除前count個值等於value的元素。若是count大於0,從頭向尾遍歷並刪除,若是count小於0,則從尾向頭遍歷並刪除。若是count等於0,則刪除鏈表中全部等於value的元素。若是指定的Key不存在,則直接返回0,返回被刪除的元素數量。
--> long lrem(final String key, long count, final String value)
#返回並彈出指定Key關聯的鏈表中的第一個元素,即頭部元素。若是該Key不存,返回null。
--> byte[] lpop(final String key)
#返回並彈出指定Key關聯的鏈表中的最後一個元素,即尾部元素。若是該Key不存,返回nil。
--> byte[] rpop(final String key)
#原子性的從與srckey鍵關聯的鏈表尾部彈出一個元素,同時再將彈出的元素插入到與dstkey鍵關聯的鏈表的頭部。若是srckey鍵不存在,該命令將返回null,同時再也不作任何其它的操做了。若是srckey和dstkey是同一個鍵,則至關於原子性的將其關聯鏈表中的尾部元素移到該鏈表的頭部。
--> byte[] rpoplpush(final String srckey, final String dstkey)
3. Hashes數據類型接口說明
Redis中的Hashes類型能夠當作具備String Key和String Value的map容器。因此該類型很是適合於存儲值對象的信息。如Username、Password和Age等。若是Hash中包含不多的字段,那麼該類型的數據也將僅佔用不多的磁盤空間。每個Hash能夠存儲4,294,967,295個鍵值對。
#爲指定的Key設定Field/Value對,若是Key不存在,該命令將建立新Key以參數中的Field/Value對,若是參數中的Field在該Key中已經存在,則用新值覆蓋其原有值。
--> boolean hset(final String key, final String field, final String value)
#返回參數中Field的關聯值,若是參數中的Key或Field不存,返回null。
--> void hget(final String key, final String field)
#只有當參數中的Key或Field不存在的狀況下,爲指定的Key設定Field/Value對,不然該命令不會進行任何操做。
--> void hsetnx(final String key, final String field, final String value)
#逐對依次設置參數中給出的Field/Value對。若是其中某個Field已經存在,則用新值覆蓋原有值。若是Key不存在,則建立新Key,同時設定參數中的Field/Value。
--> void hmset(final String key, final Map<String, String> hash)
#獲取和參數中指定Fields關聯的一組Values。若是請求的Field不存在,其值返回null。若是Key不存在,該命令將其視爲空Hash,所以返回一組null。
--> byte[] hmget(final String key, final String... fields)
#增長指定Key中指定Field關聯的Value的值。若是Key或Field不存在,該命令將會建立一個新Key或新Field,並將其關聯的Value初始化爲0,以後再指定數字增長的操做。返回運算後的值
--> long hincrBy(final String key, final String field, final long value)
#判斷指定Key中的指定Field是否存在。
--> void hexists(final String key, final String field)
#從指定Key的Hashes Value中刪除參數中指定的多個字段,若是不存在的字段將被忽略。若是Key不存在,則將其視爲空Hashes,並返回0.返回實際刪除的Field數量。
--> void hdel(final String key, final String... fields)
#獲取該Key所包含的Field的數量。
--> void hlen(final String key)
#返回指定Key的全部Fields名。
--> List<byte[]> hkeys(final String key)
#返回指定Key的全部Values名。
--> List<byte[]> hvals(final String key)
#獲取該鍵包含的全部Field/Value。其返回格式爲一個Field、一個Value,並以此類推。
--> Map<byte[], byte[]> hgetAll(final String key)
4. 字符集合(Set)數據類型接口說明
在Redis中,將Set類型看做爲沒有排序的字符集合,和List類型同樣,也能夠在該類型的數據值上執行添加、刪除或判斷某一元素是否存在等操做。Set可包含的最大元素數量是4,294,967,295。
和List類型不一樣的是,Set集合中不容許出現重複的元素,這一點和C++標準庫中的set容器是徹底相同的。換句話說,若是屢次添加相同元素,Set中將僅保留該元素的一份拷貝。和List類型相比,Set類型在功能上還存在着一個很是重要的特性,即在服務器端完成多個Sets之間的聚合計算操做,如unions、intersections和differences。因爲這些操做均在服務端完成,所以效率極高,並且也節省了大量的網絡IO開銷。
#若是在插入的過程用,參數中有的成員在Set中已經存在,該成員將被忽略,而其它成員仍將會被正常插入。若是執行該命令以前,該Key並不存在,該命令將會建立一個新的Set,此後再將參數中的成員陸續插入。若是該Key的Value不是Set類型,該命令將返回相關的錯誤信息。
--> boolean sadd(final String key, final String... members)
#獲取與該Key關聯的Set中全部的成員。
--> List<byte[]> smembers(final String key)
#從與Key關聯的Set中刪除參數中指定的成員,不存在的參數成員將被忽略,若是該Key並不存在,將視爲空Set處理。
--> void srem(final String key, final String... members)
#隨機的移除並返回Set中的某一成員。因爲Set中元素的佈局不受外部控制,所以沒法像List那樣肯定哪一個元素位於Set的頭部或者尾部。
--> byte[] spop(final String key)
#原子性的將參數中的成員從srckey 鍵移入到dstkey鍵所關聯的Set中。所以在某一時刻,該成員或者出如今source中,或者出如今dstkey中。若是該成員在srckey中並不存在,該命令將不會再執行任何操做並返回0,不然,該成員將從srckey移入到dstkey。若是此時該成員已經在dstkey中存在,那麼該命令僅是將該成員從srckey中移出。若是和Key關聯的Value不是Set,將返回相關的錯誤信息。
--> boolean smove(final String srckey, final String dstkey,final String member)
#獲取Set中成員的數量。
--> long scard(final String key)
#判斷參數中指定成員是否已經存在於與Key相關聯的Set集合中。
--> boolean sismember(final String key, final String member)
#該命令將返回參數中全部Keys關聯的Sets中成員的交集。所以若是參數中任何一個Key關聯的Set爲空,或某一Key不存在,那麼該命令的結果將爲空集。
--> List<byte[]> sinter(final String... keys)
#該命令和sinter 命令在功能上徹底相同,二者之間惟一的差異是sinter返回交集的結果成員,而該命令將交集成員存儲在dstkey關聯的Set中。若是dstkey鍵已經存在,該操做將覆蓋它的成員。
--> void sinterstore(final String dstkey, final String... keys)
#該命令將返回參數中全部Keys關聯的Sets中成員的並集。
--> List<byte[]> sunion(final String... keys)
#該命令和sunion命令在功能上徹底相同,二者之間惟一的差異是sunion返回並集的結果成員,而該命令將並集成員存儲在dstkey關聯的Set中。若是dstkey鍵已經存在,該操做將覆蓋它的成員。
--> void sunionstore(final String dstkey, final String... keys)
#返回參數中第一個Key所關聯的Set和其後全部Keys所關聯的Sets中成員的差別。若是Key不存在,則視爲空Set。
--> List<byte[]> sdiff(final String... keys)
#該命令和SDIFF命令在功能上徹底相同,二者之間惟一的差異是SDIFF返回差別的結果成員,而該命令將差別成員存儲在dstkey關聯的Set中。若是dstkey鍵已經存在,該操做將覆蓋它的成員。
--> void sdiffstore(final String dstkey, final String... keys)
#和SPOP同樣,隨機的返回Set中的一個成員,不一樣的是該命令並不會刪除返回的成員。
--> void srandmember(final String key)
5.有序集合(Sorted-Sets)數據類型接口說明
Sorted-Sets和Sets類型極爲類似,它們都是字符串的集合,都不容許重複的成員出如今一個Set中。它們之間的主要差異是Sorted-Sets中的每個成員都會有一個分數(score)與之關聯,Redis正是經過分數來爲集合中的成員進行從小到大的排序。然而須要額外指出的是,儘管Sorted-Sets中的成員必須是惟一的,可是分數(score)倒是能夠重複的。
在Sorted-Set中添加、刪除或更新一個成員都是很是快速的操做,其時間複雜度爲集合中成員數量的對數。因爲Sorted-Sets中的成員在集合中的位置是有序的,所以,即使是訪問位於集合中部的成員也仍然是很是高效的。事實上,Redis所具備的這一特徵在不少其它類型的數據庫中是很難實現的,換句話說,在該點上要想達到和Redis一樣的高效,在其它數據庫中進行建模是很是困難的。
#在該命令中咱們能夠指定多組score/member做爲參數。若是在添加時參數中的某一成員已經存在,該命令將更新此成員的分數爲新值,同時再將該成員基於新值從新排序。若是鍵不存在,該命令將爲該鍵建立一個新的Sorted-Sets Value,並將score/member對插入其中。若是該鍵已經存在,可是與其關聯的Value不是Sorted-Sets類型,相關的錯誤信息將被返回。
--> boolean zadd(final String key, final double score, final String member)
#該命令按順序返回在參數start和stop指定範圍內的成員,這裏start和stop參數都是0-based,即0表示第一個成員,-1表示最後一個成員。若是start大於該Sorted-Set中的最大索引值,或start > stop,此時一個空集合將被返回。若是stop大於最大索引值,該命令將返回從start到集合的最後一個成員。若是命令中帶有可選參數WITHSCORES選項,該命令在返回的結果中將包含每一個成員的分數值,如value1,score1,value2,score2...。
--> List<byte[]> zrange(final String key, final long start, final long end)
#該命令將移除參數中指定的成員,其中不存在的成員將被忽略。若是與該Key關聯的Value不是Sorted-Set,相應的錯誤信息將被返回。
--> boolean zrem(final String key, final String... members)
#該命令將爲指定Key中的指定成員增長指定的分數。若是成員不存在,該命令將添加該成員並假設其初始分數爲0,此後再將其分數加上increment。若是Key不存,該命令將建立該Key及其關聯的Sorted-Sets,幷包含參數指定的成員,其分數爲increment參數。若是與該Key關聯的不是Sorted-Sets類型,相關的錯誤信息將被返回。
--> Double zincrby(final String key, final double score,final String member)
# Sorted-Set中的成員都是按照分數從低到高的順序存儲,該命令將返回參數中指定成員的位置值,其中0表示第一個成員,它是Sorted-Set中分數最低的成員。
--> long zrank(final String key, final String member)
#該命令的功能和ZRANK基本相同,惟一的差異在於該命令獲取的索引是從高到低排序後的位置,一樣0表示第一個元素,即分數最高的成員。
--> long zrevrank(final String key, final String member)
#該命令的功能和ZRANGE基本相同,惟一的差異在於該命令是經過反向排序獲取指定位置的成員,即從高到低的順序。若是成員具備相同的分數,則按降序字典順序排序。
--> List<byte[]> zrevrange(final String key, final long start, final long end)
#該命令將返回分數在min和max之間的全部成員,即知足表達式min <= score <= max的成員,其中返回的成員是按照其分數從低到高的順序返回,若是成員具備相同的分數,則按成員的字典順序返回。
--> List<byte[]> zrangeWithScores(final String key, final long start,final long end)
#該命令除了排序方式是基於從高到低的分數排序以外,其它功能和參數含義均與ZRANGEBYSCORE相同。
--> List<byte[]> zrevrangeWithScores(final String key, final long start,final long end)
#獲取與該Key相關聯的Sorted-Sets中包含的成員數量。
--> long zcard(final String key)
#獲取指定Key的指定成員的分數。
--> Double zscore(final String key, final String member)
#獲取指定Key的指定成員的分數。
--> void watch(final String... keys)
#給指定的Key的成員排序
--> Sort sort(final String key)
--> Sort sort(final String key, final SortingParams sortingParameters, final String dstkey)
--> Sort sort(final String key, final String dstkey)
#從左到右掃描返回對第一個非空 list 進行 lpop 操做並返回, 好比 blpop list1 list2 list3 0 ,若是 list 不存在,list2,list3 都是非空則對 list2 作 lpop 並返回從 list2 中刪除的元素。若是全部的 list 都是空或不存在,則會阻塞 timeout 秒,timeout 爲 0 表示一直阻塞。當阻塞時,若是有client 對 key1...keyN 中的任意 key 進行 push 操做, 則第一在這個 key 上被阻塞的 client 會當即返回。若是超時發生,則返回 nil。有點像 unix 的 select 或者 poll。
--> void blpop(final String[] args)
#與blpop相反
--> void brpop(final String[] args)
#該命令用於獲取分數(score)在min和max之間的成員數量。
--> long zcount(final String key, final double min, final double max)
--> long zcount(final String key, final String min, final String max)
#該命令將返回分數在min和max之間的全部成員,即知足表達式min <= score <= max的成員,其中返回的成員是按照其分數從低到高的順序返回,若是成員具備相同的分數,則按成員的字典順序返回。
--> List<byte[]> zrangeByScore(final String key, final double min,final double max)
--> List<byte[]> zrangeByScore(final String key, final String min,final String max)
--> List<byte[]> zrangeByScore(final String key, final double min,final double max, final int offset, int count)
--> List<byte[]> zrangeByScoreWithScores(final String key, final double min,final double max)
--> List<byte[]> zrangeByScoreWithScores(final String key, final double min,
final double max, final int offset, final int count)
#刪除集合中排名在給定區間的元素
--> void zremrangeByRank(final String key, final long start,final long end)
#刪除集合中 score 在給定區間的元素
--> void zremrangeByScore(final String key, final double start,final double end)
--> void zremrangeByScore(final String key, final String start,final String end)