1. 程式人生 > >Redis學習總結(JAVA篇)

Redis學習總結(JAVA篇)

Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。

Jedis是Redis官方首選的Java客戶端開發包,Redis是一個開源的Key-Value資料快取。

使用JAVA進行Redis開發需要安裝Jedis客戶端,並且會用到相關的jar包:

jedis.jar:開發過程中使用的最基本的jar包

commons-pool.jar:當需要連線池時需要的jar包

jedis開發可以針對String、list、set、map、entity進行不同的操作,即可以儲存不同型別的key-value鍵值對。

1、連線Redis:引數1、redis伺服器IP(這裡為本地的電腦IP),引數2、埠(這裡為本地的埠號),引數3、連線時間(需不需要該引數視具體情況而定)

Jedis jedis = new Jedis("127.0.1.1","6379",5000);

2、密碼驗證,當連線Redis時不需要密碼驗證的時候,就可以省略掉本行程式碼

jedis.auth("pwd");

3、開始連線

jedis.connect();

4、斷開連線

jedis.disconnect();

5、jedis的一些常用操作:

a、列出所有的key

Set jedisKeys = jedis.keys("*");

b、查詢指定的key

Set keys = jedis.keys("key");

c、移除指定的一個或多個key,如果key不存在,則忽略此命令:

jedis.del("key1","key2",...);

d、檢查指定的key是否存在:

jedis.exists("key");

e、將存在的key1進行重新命名為key2,當操作的key不存在或者key1與key2相同時,會報錯

jedis.rename("key1","key2");

f、獲取儲存key值得型別(String、list、set、map、entity):

jedis.type("key");

g、設定key值得生存時間,當key過期時,該key會被自動刪除:引數1、key值,引數2、生存時間,單位為秒

jedis.expire("key",10);

h、移除key值得生存時間,移除後該key永不過期

jedis.persist("key");

i、返回jedis中key值得個數:

jedis.dbSize();

6、jedis對String的操作:

a、新增key-value鍵值對:(如果存在相同的key,覆蓋原來的value)

jedis.set("key","value");

b、新增key-value鍵值對:(如果key值存在則不做任何操作,不存在設值成功)

jedis.setnx("key", "value");

c、新增key-value鍵值對,並設定key值的有效期(如果key值存在則覆蓋,設定成功返回‘OK’)

jedis.setex("key", seconds, "value")

d、修改對應key的value值

jedis.setrange("key", 6, "value")

e、同時設定一個或多個key-value鍵值對:(如果某個key-value存在會用新值覆蓋原來的舊值,總是成功,成功返回OK)

jedis.mset("key1", "value1", "key2", "value2", ..., ...);

f、同時設定一個或多個 key-value鍵值對:(如果某個key-value存在返回0,所有操作都會回滾, 如果成功返回ok)

jedis.msetnx("key1", "value1", "key2", "value2",...,...)

g、通過key值獲取對應的value值,如果key不存在 返回null

jedis.get("key");

h、通過key獲取對應的value,然後通過key設定新的value值

jedis.getSet("key","value");

i、返回key對應的value值的指定字元

jedis.getrange("key", start, end);

j、返回多個key的value值:

jedis.mget("key1","key2",...);

k、返回key對應value加1後的值(原value值必須是String型別的Integer值)

jedis.incr("key");

l、返回key對應value減1後的值(原value值必須是String型別的Integer值)

jedis.decr("key");

m、返回指定key對應value加指定值後的新值,如果key不存在則認為原來的value為0(原value值必須是String型別的Integer值)

jedis.incrBy("key",num);

n、返回指定key對應value減指定值後的新值,如果key不存在則認為原來的value為0(原value值必須是String型別的Integer值)

jedis.decrBy("key",num);

o、給指定的key的值追加, 返回新字串的長度

jedis.append("key","appValue");

p、取得指定key的value值的長度

jedis.strlen("key"); 

 7、jedis對list的操作:

在Redis中,List型別是按照插入順序排序的字串連結串列。和資料結構中的普通連結串列一樣,我們可以在其頭部(left)和尾部(right)新增新的元素。在插入時,如果該鍵並不

存在,Redis將為該鍵建立一個新的連結串列。與此相反,如果連結串列中所有的元素均被移除,那麼該鍵也將會被從資料庫中刪除

a、從list的右邊插入元素(插入的value值可以是一個或多個):

jedis.rpush("key","value1","value2",...);

b、從list的左邊插入元素(插入的value值可以是一個或多個):

jedis.lpush("key","value1","value2",...);

c、返回指定Key關聯的連結串列中元素的數量,如果該Key不存在,則返回0

jedis.llen("key");

d、返回指定範圍內元素的列表。其中start的值也可以為負值,-1將表示連結串列中的最後一個元素,即尾部元素,-2表示倒數第二個並以此類推。該命令在獲取元素時,start和end位置上的元素也會被取出。如果start的值大於連結串列中元素的數量,空連結串列將會被返回。如果end的值大於元素的數量,該命令則獲取從start(包括start)開始,連結串列中剩餘的所有元素

jedis.lrange("key",start,end);

e、該命令將僅保留指定範圍內的元素,從而保證連結中的元素數量相對恆定。start和stop也可以為負值,-1表示尾部元素。如果start大於連結串列的尾部,或start大於stop,該命令不錯報錯,而是返回一個空的連結串列,與此同時該Key也將被刪除。如果stop大於元素的數量,則保留從start開始剩餘的所有元素。

jedis.ltrim("key",start,end);

f、返回連結串列中指定位置(index)的元素,0表示頭部元素,如果index為-1,表示尾部元素

jedis.lindex("key",index);

g、給連結串列中指定位置的值替換為新值,0表示頭部元素,如果index為-1,表示尾部元素

jedis.lset("key",index,"newValue");

h、在指定Key關聯的連結串列中,刪除前count個值等於value的元素。如果count大於0,從頭向尾遍歷並刪除,如果count小於0,則從尾向頭遍歷並刪除。如果count等於0,則刪除連結串列中所有等於value的元素。如果指定的Key不存在,則直接返回0,返回被刪除的元素數量

jedis.lrem("key",count,value);

i、從指定list按順序取出元素(從右邊),返回取出的元素:

jedis.rpop("key");

j、從指定list按順序取出元素(從左邊),返回取出的元素:

jedis.lpop("key");

8、jedis對set的操作:

a、向set中增加元素:

jedis.sadd("key","value");

b、查詢指定key對應的所有value值:

jedis.smembers("key");

c、移除指定的key-value值:

jedis.srem("key","remValue");

d、判斷當前value是否是指定key集合中的元素:

jedis.sismember("key", "value");

e、返回指定key集合元素的個數:

jedis.scard("key");

f、取交集:

jedis.sinter("key1","key2");

g、取並集

   jedis.sunion("key1","key2");

h、取差集:

jedis.sdiff("key1","key2");

9、jedis對map的操作:

a、向map中增加元素(key:關聯map的key):

jedis.hmset("key",new HashMap());

b、從map集合中取指定的key的value值(key:關聯map的key;mapKey:map中key-value的key,可以為一個或多個):

jedis.hmget("key","mapKey");

c、刪除map中的某個鍵值(key:關聯map的key,mapKey:map中key-value的key):

jedis.hdel("key","mapKey");

d、返回map集合中key值存放的值的個數():

jedis.hlen("key");

e、是否存在指定key值的記錄:

jedis.exists("key");

f、返回map物件中的所有key:

jedis.hkeys("key");

g、返回map物件中的所有value:

jedis.hvalues("key");

h、向map中增加元素

jedis.hset("key","entryKey","entryValue");

i、判斷某個值是否存在

jedis.hexists("hashs", "entryKey");

j、從map集合中取指定的key的value值(key:關聯map的key;mapKey:map中key-value的key)

jedis.hget("key","entryKey");

k、為key中的域 field 的值加上增量 increment

jedis.hincrBy("hashs", "entryKey", 123l);

l、根據key獲取指定的map

jedis.hgetall("key");

10、jedis對實體的操作:

   Redis伺服器不能直接儲存實體,故對實體的操作中需要進行序列化和反序列化。剩下的操作和jedis操作String、list、set、map基本類似,把之前的key值型別由String改為byte[]就OK啦!

a、實體序列化:

public static byte[] serialize(Object object) {

ObjectOutputStream oos = null;

ByteArrayOutputStream baos = null;

try {

baos = new ByteArrayOutputStream();

oos = new ObjectOutputStream(baos);

oos.writeObject(object);

byte[] bytes = baos.toByteArray();

return bytes;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

b、反序列化:

public static Object unserialize(byte[] bytes) {

ByteArrayInputStream bais = null;

try {

bais = new ByteArrayInputStream(bytes);

ObjectInputStream ois = new ObjectInputStream(bais);

return ois.readObject();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

c、從list的右邊插入object元素(插入的value值可以是一個或多個):

jedis.rpush(byte[] key, byte[] obj);

d、根據指定的key獲取list的長度:

jedis.llen(byte[] key);

e、從指定list按順序取出元素(從右邊),返回取出的元素:

jedis.rpop(byte[] key);

注:其他各種操作都類似jedis操作String、list、set、map,把之前的key值型別由String改為byte[]就OK啦!

10、Redis連線池配置等請http://www.baidu.com.

 Redis學習總結就此結束! 

相關推薦

Redis學習總結(JAVA)

Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。 Jedis是Redis官方首選的Java客戶端開發包,Redis是一個開源的Key-Value資料快取。 使用JAVA進行Redis

Redis學習總結(1)——Redis記憶體資料庫詳細教程

1.Redis是什麼 2.redis的作者何許人也 3.誰在使用redis 4.學會安裝redis 5.學會啟動redis 6.使用redis客戶端 7.redis資料結構 – 簡介 8.redis資料結構 – strings 9.redis資料結構 – lists 10.redis

001 Java環境變數配置 java基礎學習總結——java環境變數配置

java基礎學習總結——java環境變數配置 前言   學習java的第一步就要搭建java的學習環境,首先是要安裝JDK,JDK安裝好之後,還需要在電腦上配置"JAVA_HOME”、"path”、"classpath"這三個環境變數才能夠把java的開發環境搭建好。在沒安裝過jdk的環境下,path環境

Python學習總結-基礎

正在學習python中,收集整理下學習筆記,以供參考。本篇主要為基礎語法。 一、基礎知識 1、資料型別和變數 python是動態語言,不像java的靜態語言那樣先宣告變數的資料型別才能使用,直接對變數賦值即可 2、字元編碼 統一用utf-8即可變長的Unicode 其中

本週學習總結JAVA

6. 為如下程式碼加上異常處理 byte[] content = null; FileInputStream fis = new FileInputStream("testfis.txt"); int bytesAvailabe = fis.available();//獲得該檔案可用的位元組數 if(byt

第十四節----Redis學習總結

14.1  Redis到底是什麼?         在上一小節中學習瞭如何在Java中使用Redis。在Java中使用Redis,只要使用Redis提供的JeRis介面即可。 撥雲見日      

超詳細的redis學習(1)-入門

什麼是Redis 基本概念 redis是一個開源的、使用C語言編寫的、支援網路互動的、可基於記憶體也可持久化的Key-Value資料庫(非關係性資料庫)。 redis的優勢 速度快,因為資料存在

Redis學習總結之(五)釋出訂閱

一、釋出訂閱 釋出訂閱是訊息傳遞的一種方式,即釋出者釋出訊息,訂閱者獲取訊息,中間傳輸的是一種訊息,所以應該有四個必須的要素:釋出者、訂閱(接受)者、通道、訊息。在Redis裡,由於redis分客戶端和服務端,redis服務端提供服務,所以釋出者(publishser)和訂

Redis學習總結(10)——快取雪崩、快取穿透、快取併發、快取預熱、快取演算法的概念及解決思路總結

一、快取雪崩 概念: 可能是因為資料未載入到快取中,或者快取同一時間大面積的失效,從而導致所有請求都去查資料庫,導致資料庫CPU和記憶體負載過高,甚至宕機。 解決思路: 1.1、加鎖計數(即限制併發的數量,可以用semphore)或者起一定數量的佇列來避免快取失效時大

Redis學習總結(12)——Redis常見面試題再總結

1、什麼是Redis? Redis本質上是一個Key-Value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料flush到硬碟上進行儲存。因為是純記憶體操作,Redis的效能非常出色,每秒可以處理超過 10

SQL Server 入門學習總結---基礎

首先相信很多人在開始準備學習的時候,肯定對資料庫的基本學習路線是蒙的,當然我也是這樣過來的。我也是在後來把基礎知識學完之後,才看到一張圖,很棒的學習路線圖。先把這個分享給大家: 對於這張圖,相信不用

redis學習總結

Redis 伺服器的所有資料庫儲存在redisServer.db陣列中,而資料庫的數量則是redisServer.dbnum屬性儲存。 客戶端通過修改目標資料庫指標,讓它指向redisServer.db陣列中的不同元素來切換不同的資料庫。 資料庫主要由dict和expires兩個字典構成,其中dict字典負

Android學習總結————Java程式設計技巧與開發例項(朱福喜)

第一部分   記於2013年7月21 1.安卓開發環境的安裝 (1)設定相關環境變數 a.JAVA_HOME        D:\Java\jdk1.6.0_29 b.PATH          %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;D:\

redis學習總結(超讚!!!)

我是技術搬運工,好東西當然要和大家分享啦原文地址Redis 是什麼Redis 是速度非常快的非關係型(NoSQL)記憶體鍵值資料庫,可以儲存鍵和五種不同型別的值之間的對映。五種型別資料型別為:字串、列表、集合、有序集合、散列表。Redis 支援很多特性,例如將記憶體中的資料持

NoSQL 資料庫之 Redis 學習總結

1、NoSQL介紹   為了解決高併發、高可用、高可擴充套件,大資料儲存等一系列問題而產生的資料庫解決方案。NoSql,叫非關係型資料庫,它的全名Not only sql。它不能替代關係型資料庫,只能作為關係型資料庫的一個良好補充。2、NoSQL分類a>  鍵值(Key

《第一行程式碼》第二版 學習總結結束

      最近利用下班時間,找了看什麼書比較適合初學android的朋友,很多人推薦了這本書,於是就買了一本,感覺看書,思考,動手,再思考和總結這樣過程還是很有必要的,於是就打算把自己學習的東西簡單的總結一下;方便自己以後查詢,也有利於學習的鞏固。在這裡首先要感謝一下書籍的

Android wakelock 學習總結第二

轉載自:http://slightsnow.blog.chinaunix.net/uid-29269256-id-4091805.html 如果看完第一篇的同學,是不是對大概上層睡眠流程有點小感了呢?如果你看過我說的幾個程式碼,細心的你會發現上篇文章最後Native層只是

Redis學習java程式碼實現(Jedis)

前面兩篇說過redis的安裝使用和密碼設定後,現在來看看怎麼用java程式碼連線伺服器,並使用redis。 首先專案中需要有redis的驅動包,下載Jedis.jar。 下載最新驅動包,放到專案的lib目錄下,確保專案包含該驅動包。 如果是maven專案,可以直接在pom

Redis 學習筆記(一):字串和連結串列

本次學習除了基本內容之外主要思考三個問題:why(為什麼)、what(原理是什麼)、which(同類中還有哪些類似的東西,相比有什麼區別)。 由於我對 java 比較熟悉,並且 java 中也有字串和連結串列。所以本篇暫拿 redis 中的字串和連結串列與 java 進行對比。 字串 先看幾個問題: red

Redis 學習筆記(九):主從複製

Redis 中,可以通過執行 savleof 命令或者設定 slaveof 選項,讓一個伺服器去複製另一個伺服器,我們稱被複制的伺服器為主伺服器,而對主伺服器進行復制的伺服器則被稱為從伺服器。 Redis 2.8 之前複製功能的實現 Redis 中的複製分為同步和命令傳播兩個操作。 同步操作是將從伺服器的資