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 中的複製分為同步和命令傳播兩個操作。 同步操作是將從伺服器的資