一、Redis簡介
redis是Nosql資料庫中使用較為廣泛的非關系型記憶體資料庫,redis內部是一個key-value存盤系統,它支持存盤的value型別相對更多,包括string(字串)、list(鏈表)、set(集合)、zset(有序集合)和hash(哈希型別,類似于Java中的map),Redis基于記憶體運行并支持持久化的NoSQL資料庫,是當前最熱門的NoSql資料庫之一,也被人們稱為資料結構存盤服務務器,
二、Redis的特性
多種資料型別存盤:
1、字串型別
2、散列型別
3、串列型別
4、集合型別
5、有序集合型別
記憶體存盤與持久化:
1、記憶體的讀寫速度遠快于硬碟
2、自身提供了持久化功能(RDB、AOF兩種方式)
功能豐富:
1、可用作快取、佇列、訊息訂閱/發布
2、支持鍵的生存時間
3、按照一定規則洗掉相應的鍵
簡單穩定:
1、相比SQL而言更加簡單
2、不同語言的客戶端豐富
3、基于C語言開發,代碼量少
Redis特性:
1、性能極高:Redis能讀的速度是110000次/s,寫的速度是81000次/s,
2、豐富的資料型別:Redis支持二進制案例的Strings、Lists、Hashes、Sets及OrderedSets資料型別操作,
3、原子:Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全并后的原子性執行,
4、其它特性:Redis還支持publish/subscribe、通知、key過期等特性,
三、下載安裝(MacOS)
1、下載地址:https://redis.io/download/

2、解壓安裝
# 解壓安裝包
tar xzf redis-6.0.8.tar.gz
# 進入解壓后的目錄
cd redis-6.0.8
# 編譯
make
# 編譯成功后,進入到src目錄下
cd src
# 使用默認配置啟動redis服務
./redis-server
# 啟動redis客戶端,用于與redis-server進行互動
./redis-cli
3、測驗連接性與狀態回復

4、Redis的多資料庫
Redis默認支持16個資料庫,可以通過修改組態檔來更改支持資料庫的數量,對外都是以一個從0開始的遞增數字命名,可以通過引數databases來修改默認資料庫個數,客戶端連接Redis服務后會自動選擇0號資料庫,可以通過select命令更換資料庫,例如選擇1號資料庫:
# 選擇1號資料庫命令
127.0.0.1:6379>select 1
說明:
1、Redis不支持自定義資料庫名稱,
2、Redis不支持為每個資料庫設定訪問密碼,
3、Redis的多個資料庫之間是完全隔離的,
四、Redis的基本命令
以下命令均在redis-cli客戶端執行
# 清空所有資料庫的資料
flushall
# 清空當前所在資料庫的資料
flushdb
# 查詢所有鍵,查詢某個具體的鍵,將后面的*改為鍵名即可
keys *
# 判斷一個鍵是否存在,存在回傳1,否則回傳0,其中key是鍵名
exists key
# 洗掉一個鍵,回傳洗掉鍵的個數,其中key是鍵名
del key
# 查看鍵的資料型別,其中key是鍵名
# string(字串)、hash(散列型別)、list(串列型別)、set(集合型別)、zset(有序集合型別)
type key
# 幫助
help
五、Redis的字串資料型別
字串型別是Redis中最基本的資料型別,它能存盤任何形式的字串,包括二進制資料,可以存盤json化的物件、位元組陣列等,一個字串型別鍵允許存盤的資料最大容量是512MB,
賦值與取值:
127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> get test
"123"
遞增數字:
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
增加定制的整數:
127.0.0.1:6379> incrby num 3
(integer) 6
127.0.0.1:6379> incrby num 3
(integer) 9
127.0.0.1:6379> incrby num 3
(integer) 12
減少整數:
127.0.0.1:6379> decr num
(integer) 11
127.0.0.1:6379> decr num
(integer) 10
127.0.0.1:6379> decr num
(integer) 9
減少指定的整數:
127.0.0.1:6379> decrby num 2
(integer) 7
127.0.0.1:6379> decrby num 2
(integer) 5
127.0.0.1:6379> decrby num 2
(integer) 3
尾部追加值:
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str "hanmeimei"
(integer) 14
127.0.0.1:6379> get str
"hellohanmeimei"
獲取字串長度:
127.0.0.1:6379> strlen str
(integer) 14
同時設定多個值:
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
"v1"
同時獲取多個值:
127.0.0.1:6379> mget k1 k3
1) "v1"
2) "v3"
六、串列型別
Redis串列是簡單的字串串列,按照插入順序排序,可以添加一個元素到串列的頭部(左邊)或者尾部(右邊),一個串列最多可以包含 4294967295,每個串列超過40億個元素,
自動回傳并洗掉串列的第一個(LPOP)或最后一個(RPOP)元素,例如,如果串列包含元素“a”、“b”、“c”,LPOP將回傳“a”,而串列將變成“b”、“c”,如果鍵不存在或串列已為空,則回傳特殊值“nil”
# 洗掉串列的第一個元素
LPOP key
# 洗掉串列的最后一個元素
RPOP key
回傳存盤在指定鍵處的串列的指定元素,0是第一個元素,1是第二個元素,依此類推,支持負索引,例如-1是最后一個元素,-2是倒數第二個元素,依此類推,
如果鍵處存盤的值不是串列型別,則回傳錯誤,如果索引超出范圍,則回傳空字串,請注意,即使平均時間復雜度是O(n),請求串列的第一個或最后一個元素也是O(1),
LINDEX key index
在串列的元素前或者后插入元素
LINSERT key before pivot value
LINSERT key after pivot value
回傳存盤在指定鍵的串列的長度,如果鍵不存在,則回傳零(與空串列的行為相同),如果鍵處存盤的值不是串列,則回傳錯誤
LLEN key
將一個值插入到串列頭部
LPUSH key value1
將一個值插入到已存在的串列頭部
LPUSHX key value
獲取串列指定范圍內的元素
LRANGE key start stop
移除串列元素
LREM key count value
通過索引設定串列元素的值
LSET key index value
對一個串列進行修剪(trim),即讓串列只保留指定區間內的元素,不在指定區間之內的元素都將被洗掉
LTRIM key start stop
移除串列的最后一個元素,并將該元素添加到另一個串列并回傳
RPOPLPUSH source destination
在串列中添加一個或多個值
RPUSH key value1
為已存在的串列添加值
RPUSHX key value
七、Redis集合
Redis的set是string型別的無序集合,集合成員是唯一的,這就意味著集合中不能出現重復的資料,Redis中集合是通過哈希表實作的,所以添加、洗掉、查找的復雜度都是O(1),集合中最大的成員數為4294967295,每個集合可存盤40多億個成員,
向集合添加一個成員:
sadd key member1
獲取集合的成員數
scard key
回傳給定所有集合的差集
sdiff key1
回傳給定所有集合的差集并存盤在destination中
sdiffstore destination key1
回傳給定所有集合的交集
sinter key1
回傳給定所有集合的交集并存盤在destination中
sinterstore destination key1
判斷member元素是否是集合key的成員
sismember key member
回傳集合中的所有成員
smembers key
將member元素從source集合移動到destination集合
smove source destination member
移除并回傳集合中的一個隨機元素
spop key
回傳集合中一個亂數
srandmember key [count]
移除集合中一個或多個成員
srem key member1
回傳所有給定集合的并集
sunion key1
所有給定集合的并集存盤在 destination 集合中
sunionstore destination key1
八、Hash資料結構
Redishash是一個string型別的field和value的映射表,hash特別適合用于存盤物件,Redis中每個hash可以存盤4294967295個鍵值對,
取值與賦值:
執行插入操作時回傳1,執行更新操作時回傳0
127.0.0.1:6379> hset user username suiyi
(integer) 1
127.0.0.1:6379> hget user username
"suiyi"
判斷欄位是否存在:
127.0.0.1:6379> hexists user username
(integer) 1
127.0.0.1:6379> hexists user age
(integer) 0
Hash的自增長:
127.0.0.1:6379> hincrby user age 2
(integer) 22
127.0.0.1:6379> hincrby user age 2
(integer) 24
127.0.0.1:6379> hincrby user age 2
(integer) 26
洗掉欄位,回傳值是被洗掉的欄位個數:
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hdel user age name
(integer) 0
127.0.0.1:6379> hdel user age username
(integer) 1
只獲取欄位名或欄位值:
127.0.0.1:6379> hmset user age 20 name suiyi
OK
127.0.0.1:6379> hkeys user
1) "age"
2) "name"
127.0.0.1:6379> hvals user
1) "20"
2) "suiyi"
獲取欄位數量:
127.0.0.1:6379> hlen user
(integer) 2
九、Redis職務
9.1、Redis事務
Redis事務可以一次執行多個命令,并且帶有以下兩個重要的保證:
1、事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行,事務在執行的程序中,不會被其他客戶端發送來的命令請求所打斷,
2、事務是一個原子操作:事務中的命令要么全部被執行,要么全部都不執行,
一個事務從開始到執行會經歷以下三個階段:
1、開始事務,
2、命令入隊,
3、執行事務,
9.2、Redis事務命令
下表列出了redis事務的相關命令:
取消事務,放棄執行事務塊內的所有命令:
discard
執行所有事務塊內的命令:
exec
標記一個事務塊的開始:
multi
取消WATCH命令對所有key的監視:
unwatch
監視一個key ,如果在事務執行之前這個key被其他命令所改動,那么事務將被打斷:
watch key
CSDN認證博客專家
安全博客專家
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232572.html
標籤:java
上一篇:打遍天下二叉樹
