redis操作:
1、啟動服務 redis-server.exe redis.windows.conf
2、啟動客戶端 redis-cli.exe -h 127.0.0.1 -p 6379
3、redis 選庫和對key的操作命令
3.1)--選擇第幾個數據庫:選擇第一個數據庫
select 1
3.2)--將key從數據1移動到數據庫0:
select 1
move mykey 0
3.3)--設置鍵值對:
set myKey abc
--一次設置多個鍵值對信息:
MSET fruit "apple" drink "beer" food "cookies"
3.4)--取出鍵值對:
get myKey
--隨機獲取一個key:
randomkey
--查看數據庫內所有key:
keys *
3.5)--刪除key:
del myKey
備注:如果鍵被刪除成功,命令執行后輸出 (integer) 1,否則將輸出 (integer) 0
--同時刪除多個key
del key1 key2
--刪除當前數據庫所有 key
flushdb
3.6)--key是否存在
exists myKey
3.7)--設置過期時間:(以秒來計算)
expire myKey 10
--設置過期時間:(以毫秒計)
PEXPIRE key milliseconds
--設置過期時間:(以毫秒來計算)
expireat key timestamp
備注:expireat 的作用和 EXPIRE 類似,都用於為 key 設置過期時間。 不同在於 expireat 命令接受的時間參數是 UNIX 時間戳(unix timestamp)
--查詢key的過期時間: (以秒為單位,返回給定 key 的剩余生存時間(TTL-time to live)
ttl key
備注:當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩余生存時間時,返回 -1 。 否則,以毫秒為單位,返回 key 的剩余生存時間。
--查詢key的過期時間: (以毫秒為單位返回 key 的剩余的過期時間)
pttl key
--移除key的過期時間: (移除key的過期時間之后,key將持久保持)
persist key
3.8)--返回 key 所儲存的值的類型
type mykey
3.9)--重名令key
renamenx mykey mynewkey 僅當 mynewkey 不存在時,將 mykey 改名為 mynewkey
3.10)--查看redis版本信息
info
3.11)--序列化給定 key
DUMP mykey
DUMP 命令用於序列化給定 key ,並返回被序列化的值。
3.12)--key模糊搜索:
*: 通配任意多個字符
?: 通配單個字符
[]: 通配括號內的某1個字符
--查詢以m開頭的所有key
keys m*
--查詢以t結尾的所有key
keys *t
--查詢字符長度為3位的所有key
keys ???
--查詢以son開始,並且后面有一位字符的key
keys son?
--查詢key是以my開始之后為l或k或者i的所有key的集合
keys my[lki]*
查詢結果為
1) "mykey"
2) "mykey4"
3) "mykey3"
4) "myintkey"
5) "mykey2"
6) "mylist"
3.13) 配置:獲取所有配置項(config get rdbcompression 獲取存儲至本地數據庫時是否壓縮數據)
--CONFIG GET *
指定存儲至本地數據庫時是否壓縮數據,默認為 yes,Redis 采用 LZF 壓縮,如果為了節省 CPU 時間,可以關閉該選項,但會導致數據庫文件變的巨大。config get dbfilename
指定本地數據庫文件名,默認值為 dump.rdb
4) redis 數據類型
4.1) string 類型是二進制安全的。意思是 redis 的 string 可以包含任何數據。比如jpg圖片或者序列化的對象。string 類型的值最大能存儲 512MB
4.2) hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象;Redis 中每個 hash 可以存儲 2的32次方 - 1 鍵值對(40多億)
示例1:同時將多個 field-value (域-值)對設置到哈希表 key 中。
hmset studentNo1 name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
備注:設置了 studentNo1 的一些描述信息(name, description, likes, visitors) 到哈希表的 studentNo1 key 中
示例2:刪除一個或多個哈希表字段
hdel studentNo1 name
示列3:查看哈希表 key 中,指定的字段是否存在
hexists studentNo1 naem
hexists yeb:hash_town_all_info_town_{by:indexkey=31611}{exp=86400} name
示列4:獲取存儲在哈希表中指定字段的值。
hget studentNo1 description
示列5:獲取在哈希表中指定 key 的所有字段和值
hgetall studentNo1
示列6:獲取所有哈希表中的字段
hkeys studentNo1
示列7:只有在字段 field 不存在時,設置哈希表字段的值。
hsetnx studentNo2 description "loveDaJia"
4.3) list Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)一個列表最多可以包含 2的32次方 - 1 個元素 (4294967295, 每個列表超過40億個元素)
示列1:LPUSH 將值test1 插入了名為 mylist 的列表當中
lpush mylist test1
示列2:獲取列表長度
LLEN key
示例3:移出並獲取列表的第一個元素
LPOP key
4.4) Set Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重復的數據。Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1) 集合中最大的成員數為 2的32次方 - 1 (4294967295, 每個集合可存儲40多億個成員)
示列1:向集合添加一個或多個成員
sadd settest test1
示例2:獲取集合的成員數
scard settest
4.5) sorted set 有序集合和集合一樣也是string類型元素的集合,且不允許重復的成員。不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數(score)卻可以重復。集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。 集合中最大的成員數為 2的32次方 - 1 (4294967295, 每個集合可存儲40多億個成員)
示列1:ZADD 向 redis 的有序集合中添加了三個值並關聯上分數
zadd sortedSetTest 1 test1
示列2: 通過索引區間返回有序集合成指定區間內的成員
zrange sortedSetTest 0 10 withscores
4.6) HyperLogLog Redis 在 2.8.9 版本添加了 HyperLogLog 結構。Redis HyperLogLog 是用來做基數統計的算法,HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的、並且是很小的。在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基 數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素
示列1:添加指定元素到 HyperLogLog 中
pfadd hyperloglogTest test1
示列2:返回給定 HyperLogLog 的基數估算值。
pfcount hyperloglogTest
5) redis 發布訂閱
發布訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。Redis 客戶端可以訂閱任意數量的頻道。訂閱頻道(channel1)的三個客戶端 client1、client2 和 client3. 當有新消息通過 PUBLISH 命令發送給頻道 channel1 時, 這個消息就會被發送給訂閱它的三個客戶端:
示列1:創建了訂閱頻道名為 redisChat
subscribe redisChat
示列2:重新開啟個 redis 客戶端,然后在同一個頻道 redisChat 發布兩次消息,訂閱者就能接收到消息
publish redisChat "Redis is a great caching technique"
6) redis 事務
a. Redis 事務可以一次執行多個命令, 並且帶有以下三個重要的保證:
批量操作在發送 EXEC 命令前被放入隊列緩存;
收到 EXEC 命令后進入事務執行,事務中任意命令執行失敗,其余的命令依然被執行;
在事務執行過程,其他客戶端提交的命令請求不會插入到事務執行命令序列中;
b. 一個事務從開始到執行會經歷以下三個階段:
開始事務;
命令入隊;
執行事務;
c. 單個 Redis 命令的執行是原子性的,但 Redis 沒有在事務上增加任何維持原子性的機制,所以 Redis 事務的執行並不是原子性的。事務可以理解為一個打包的批量執行
腳本,但批量指令並非原子化的操作,中間某條指令的失敗不會導致前面已做指令的回滾,也不會造成后續的指令不做。
示列:
--開啟事務
multi
--將命令入隊到事務中
set mykey1 test1
set mykey4 test4
-- 執行所有事務塊內的命令
EXEC
7) redis 腳本:使用 Lua 解釋器來執行腳本。 Redis 2.6 版本通過內嵌支持 Lua 環境。執行腳本的常用命令為 EVAL。
8) redis 連接
-- 通過密碼驗證連接到 redis 服務
auth "password"
-- 並檢測服務是否在運行
ping
-- 關閉當前連接
quit
9) redis 數據備份與恢復
-- 該命令將在 redis 安裝目錄中創建dump.rdb文件
SAVE
-- 獲取 redis的 安裝目錄
CONFIG GET dir
10) redis 安全
--查看是否設置了密碼驗證
config get requirepass
--設置密碼
config set requirepass zjb
--客戶端連接 redis 服務密碼驗證
auth zjb
11) Redis 客戶端連接
Redis 通過監聽一個 TCP 端口或者 Unix socket 的方式來接收來自客戶端的連接,當一個連接建立后,Redis 內部會進行以下一些操作:首先,客戶端 socket 會被設置為非阻塞模式,因為 Redis 在網絡事件處理上采用的是非阻塞多路復用模型。然后為這個 socket 設置 TCP_NODELAY 屬性,禁用 Nagle 算法然后創建一個可讀的文件事件用於監聽這個客戶端 socket 的數據發送。在 Redis2.4 中,最大連接數是被直接硬編碼在代碼里面的,而在2.6版本中這個值變成可配置的。maxclients 的默認值是 10000,你也可以在 redis.conf 中對這個值進行修改。
--獲取最大連接數
config get maxclients
--在服務啟動時設置最大連接數為 100000
redis-server --maxclients 100000
12) Redis 管道技術
Redis是一種基於客戶端-服務端模型以及請求/響應協議的TCP服務。這意味着通常情況下一個請求會遵循以下步驟:客戶端向服務端發送一個查詢請求,並監聽Socket返回,通常是以阻塞模式,等待服務端響應。服務端處理命令,並將結果返回給客戶端。Redis 管道技術可以在服務端未響應時,客戶端可以繼續向服務端發送請求,並最終一次性讀取所有服務端的響應。
13) Redis 分區
分區是分割數據到多個Redis實例的處理過程,因此每個實例只保存key的一個子集。
分區的優勢:
a.通過利用多台計算機內存的和值,允許我們構造更大的數據庫。
b.通過多核和多台計算機,允許我們擴展計算能力;通過多台計算機和網絡適配器,允許我們擴展網絡帶寬。
分區的不足:
a.涉及多個key的操作通常是不被支持的。舉例來說,當兩個set映射到不同的redis實例上時,你就不能對這兩個set執行交集操作;
b.涉及多個key的redis事務不能使用;
c.當使用分區時,數據處理較為復雜,比如你需要處理多個rdb/aof文件,並且從多個實例和主機備份持久化文件;
d.增加或刪除容量也比較復雜。redis集群大多數支持在運行時增加、刪除節點的透明數據平衡的能力,但是類似於客戶端分區、代理等其他系統則不支持這項特性。然而,一種叫做presharding的技術對此是有幫助的;
分區類型:
a.范圍分區:最簡單的分區方式是按范圍分區,就是映射一定范圍的對象到特定的Redis實例。
b.哈希分區:另外一種分區方法是hash分區,這對任何key都適用,也無需是object_name:這種形式,像下面描述的一樣簡單.
用一個hash函數將key轉換為一個數字,比如使用crc32 hash函數。對key foobar執行crc32(foobar)會輸出類似93024922的整數。對這個整數取模,將其轉化為0-3之間的數字, 就可以將這個整數映射到4個Redis實例中的一個了。93024922 % 4 = 2,就是說key foobar應該被存到R2實例中。注意:取模操作是取除的余數,通常在多種編程語言中用%操作符實現。
參看文章:
https://www.runoob.com/redis/redis-install.html
https://www.cnblogs.com/Rawls/p/10574511.html --redis桌面管理工具使用
https://www.redis.net.cn/order/3539.html
