⑴ shell 下執行redis相關操作
redis-cli + redis命令 執行相關redis操作,這種情況經常用在模糊訪問key的場景。因為Redis keys命令支持模式匹配,其他命令不支持稿乎。
如有時候需要根據一定的模式來模糊刪除key,但是del命令不支持模式匹配,
這時只能結合shell命令來完成了。
如
[root@localhost ~]#/usr/local/redis-2.6.14/src/鍵伍悉redis-cli get lifekey
"hello"
刪除所有的鍵
[root@localhost src]# pwd
/usr/local/redis-2.6.14/src
[root@localhost src]# ./redis-cli keys"*" | xargs redis-cli del # 刪除本地 redis
橘脊 刪除遠程redis上指定的模式匹配鍵
[root@localhost src]# ./redis-cli -h 10.255.209.34-p 16379 -n 11 keys "*:custid" | xargs ./redis-cli -h 10.255.209.34-p 16379 -n 11 del
(integer) 12
導出redis數據到本地文件
[root@localhost src]# ./redis-cli -h 10.255.209.34-p 16379 -n 11 --rdb backup.rdb
shad@�����.
⑵ redis常用命令是什麼
1、連接操作相關命令:
type(key):返值類型。
使用的注意事項
1、 Redis和Memcache都是將數據存放在內存中,都是內存資料庫。不過memcache還可用於緩存其他東西,例如圖片、視頻等等。
2、Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。
3、虛擬內存–Redis當物理內存用完時,可以將一些很久沒用到的value 交換到磁碟 。
4、過期策略–memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定,例如expire name 10 。
⑶ Redis | Redis 字元串相關命令
Redis 支持多種數據結構,比如 字元串、列表、集合、有序集合 和 哈希 等數據結構。本次我整理了關於 字元串 相關的命令,也就是關於 Strings 相關的命令,如下圖。
上圖中用紅色圈中的部分,就是關於 字元串 相關的命令。如果想要在 Redis 中查看相關的命令也可以使用 help 命令來進行查看,命令如下。
在按下回車後,可以看到相應分類命令的說明,如下圖。
圖中就是部分關於 Strings 相關的部分命令。
常用 Strings 相關命令
為了大家能夠直接復制命令進行測試,下面我就不截圖了。
1、set 命令
set 命令的作用是 設置一個 key 的 value 值
設置 key 對應的字元串類型
上面的命令分別對 key1 設置為 value1,對 key2 設置為 value2。
set 命令除了基本的用法外,還有幾個參數,先來說一下 nx 和 xx 兩個參數。
nx 表示 key 不存在時,執行操作
xx 表示 Key 存在時,執行操作
命令 set k1 v1 nx 表示,當 k1 不存在時,給 k1 設置字元串值為 v1,此時 k1 並不存在,因此該命令被執行;
命令 set k2 v2 xx 表示,當 k2 存在時,給 k2 設置字元串值為 v2,此時 k2 並不存在,因此該命令沒有被執行
再介紹另外兩個參數,分別是 ex 和 px,ex 和 px 是在進行 set 命令時可以設置過期時間的命令
ex 表示 設置的過期時間以秒為單位
px 表示 設置的過期時間以毫秒為單位
2、setnx 命令
setnx 命令的作用是 當指定的鍵不存在時給該鍵設置一個值
該命令類似 set 命令附帶了 nx 參數
在上面的命令中,setnx k1 value1,由於 k1 存在,因此命令沒有被執行,setnx k2 value2,由於 k2 不存在,因此命令被執行。
當命令執行成功,返回值為 1
當命令執行不成功,返回值為 0
3、get 命令
get 命令的作用是 獲取指定 key 的值
該命令已經被多次使用了,演示如下:
4、getset 命令
getset 命令的作用是 設置一個 key 的 value,並獲取設置前的值
該命令相當於 先對指定的 key 進行一次 get 操作,再執行一次 set 操作,兩個命令合並,可以保證原子性。
5、mget 命令
mget 命令的作用是 一次獲取多個 key 的值,如果 key 不存在則返回 nil
可以看到,key3 是不存在的,因此 key3 返回的值是 nil
6、mset 命令
mset 命令的作用是 設置多個key value
7、msetnx 命令
msetnx 命令的作用是 設置多個key value,僅當key不存在時
可以看出,msetnx k4 vv4 k5 vv5 時,此時不存在 k4 和 k5 因此該命令執行成功,在執行 msetnx k4 v4 k5 v5 k6 v6 時,由於 k4 和 k5 已經存在,則使得這條命令執行失敗,因此 k4 和 k5 的值仍然是 vv4 和 vv5,並且沒有 k6 這個 key。
8、incr 命令
incr 命令的作用是 執行原子加1操作
9、decr 命令
decr 命令的作用是 整數原子減1
10、incrby 命令
incrby 命令的作用是 執行原子增加一個整數
11、decrby 命令
decrby 命令的作用是 原子減指定的整數
12、incrbyfloat 命令
incrbyfloat 命令的作用是 執行原子增加一個浮點數
13、setrange 命令
setrange 命令的作用是 修改字元串指定偏移的值
字元串的偏移從 0 開始,hello 的長度為 5,最後 1 個下標為 4,當我們 setrange kstr 6 x 時,我們將 kstr 下標 6 的位置設置為了 x,因此在下標 5 的位置處給了一個 x00,即 ASCII 碼的 0。
14、getrange 命令
getrange 命令的作用是 獲取存儲在key上的值的一個子字元串
下標 -1 為最後一個下標,下標 -2 為倒數第二個下標
15、append 命令
append 命令的作用是 追加一個值到key上
總結
這些基礎的命令當中,除了可以當作基礎的操作 字元串 的命令來用,也有其他方面的用處,比如在高並發當中可以用來設置鎖等。把今天整理的命令完善了一個思維導圖,圖片如下。
⑷ Redis停止的命令
Redis停止的命令
我的redis是部署在linux機器上的,而且是redis集群。下面的命令都是在linux上使用的。
執行後,輸出的記錄中,含有「redis-server」的行,全是運行的redis服務節點。
「redis-server」所在行的最後,會有「IP:埠號」,執行第3步停止redis集群時要使用。
第一行記錄,都要執行一次停止命令。
2. 進入redis-cli所在目錄
註:如果不知道redis-cli所在目錄,請使用如下命令查找(網上很多的人回答,redis-cli在redis/bin目錄,我的機器卻不是)
3. 停止redis服務,使用的IP、埠號為第1步查看出的IP、埠號。
第一步中的第一行記錄,都要執行一次停止命令。
註:不加「-h IP」參數時,會提示如下內容,停止是失敗的
Could not connect to Redis at 127.0.0.1:XXXX: Connection refused
4. 查看redis服務是否停止成功
執行後,輸出的記錄中,不存在含有「redis-server」的行,則redis服務停止成功。
原文:
YouLuoJv使用知識的小磚壘起質量、效率燈塔,希望可以照亮更多人的路
⑸ redis 命令執行過程
redis數據淘汰原理
redis過期數據刪除策略
redis server事件模型
redis cluster mget 引發的討論
redis 3.x windows 集群搭建
redis 命令執行過程
redis string底層數據結構
redis list底層數據結構
redis hash底層數據結構好鬧
redis set底層數據結構
redis zset底層數據結構
redis 客戶端管理
redis 主從同步-slave端
redis 主從同步-master端
redis 主從超時檢測
redis aof持久化
redis rdb持久化
redis 數據恢復過程
redis TTL實現原理
redis cluster集群建立
redis cluster集群選主
這篇文章的目的是為了描述redis server在處理client命令的執行過程,大概包括流程圖、源碼、以及redis的命令格式說明,redis的通信協議參考自redis的則頌 官網 。
整個redis的server端命令執行過程就如下面這個流程圖:
nread = read(fd, c->querybuf+qblen, readlen);負責讀取命令數,通過processInputBuffer進行下一步處理。
核心在於processInlineBuffer處理內聯命令,processMultibulkBuffer處理批量命令包括get/set等,核心的processCommand用於執行命令。
執行命令的過程其實主要是尋找命令對應的執行函數,通過lookupCommand查找對應的執行命令,通過call執行命令。
負責執行命令 c->cmd->proc 並更新統計信息,執行完成後負責同步數據 propagate 。
主要是負責同步數據到AOF文件和slave節點,feedAppendOnlyFile負責友盯罩同步到AOF文件,replicationFeedSlaves負責同步
AOF涉及的緩存有多份,包括
包含了命令和對應執行函數的映射關系,應該看上去很清晰命令。
協議的一般格式如下,注意前面的*或者$等字元,結尾的 是分隔符。
其中, 回復中的第二個元素為空。
⑹ redis cluster命令cluster nodes怎麼用
redis cluster配置好,並運行一段時間後,我們想添加節點,或者刪除節點,該怎麼辦呢。
一,redis cluster命令行
查看復制列印?
//集群(cluster)
CLUSTER INFO 列印集群的信息
CLUSTER NODES 列出集群當前已知的所有節點(node),以及這些節點的相關信息。
//節點(node)
CLUSTER MEET <ip> <port> 將 ip 和 port 所指定的節點添加到集群當中,讓它成為集群的一份子。
CLUSTER FORGET <node_id> 從集群中移除 node_id 指定的節點。
CLUSTER REPLICATE <node_id> 將當前節點設置為 node_id 指定的節點的從節點。
CLUSTER SAVECONFIG 將節點的配置文件保存到硬碟裡面。
//槽(slot)
CLUSTER ADDSLOTS <slot> [slot ...] 將一個或多個槽(slot)指派(assign)給當前節點。
CLUSTER DELSLOTS <slot> [slot ...] 移除一個或多個槽對當前節點的指派。
CLUSTER FLUSHSLOTS 移除指派給當前節點的所有槽,讓當前節點變成一個沒有指派任何槽的節點。
CLUSTER SETSLOT <slot> NODE <node_id> 將槽 slot 指派給 node_id 指定的節點,如果槽已經指派給另一個節點,那麼先讓另一個節點刪除該槽>,然後再進行指派。
CLUSTER SETSLOT <slot> MIGRATING <node_id> 將本節點的槽 slot 遷移到 node_id 指定的節點中。
CLUSTER SETSLOT <slot> IMPORTING <node_id> 從 node_id 指定的節點中導入槽 slot 到本節點。
CLUSTER SETSLOT <slot> STABLE 取消對槽 slot 的導入(import)或者遷移(migrate)。
//鍵 (key)
CLUSTER KEYSLOT <key> 計算鍵 key 應該被放置在哪個槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的鍵值對數量。
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 個 slot 槽中的鍵。
這些命令是集群所獨有的。執行上述命令要先登錄
查看復制列印?
[root@manage redis]# redis-cli -c -p 6382 -h 192.168.10.220 //登錄
192.168.10.220:6382> cluster info //查看集群情況
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:8
cluster_my_epoch:4
cluster_stats_messages_sent:82753
cluster_stats_messages_received:82754
二,添加節點
1,新配置二個測試節點
查看復制列印?
# cd /etc/redis
//新增配置
# cp redis-6379.conf redis-6378.conf && sed -i "s/6379/6378/g" redis-6378.conf
# cp redis-6382.conf redis-6385.conf && sed -i "s/6382/6385/g" redis-6385.conf
//啟動
# redis-server /etc/redis/redis-6385.conf > /var/log/redis/redis-6385.log 2>&1 &
# redis-server /etc/redis/redis-6378.conf > /var/log/redis/redis-6378.log 2>&1 &
2,添加主節點
# redis-trib.rb add-node 192.168.10.219:6378 192.168.10.219:6379
注釋:
192.168.10.219:6378是新增的節點
192.168.10.219:6379集群任一個舊節點
3,添加從節點
# redis-trib.rb add-node --slave --master-id 192.168.10.220:6385 192.168.10.219:6379
注釋:
--slave,表示添加的是從節點
--master-id ,主節點的node id,在這里是前面新添加的6378的node id
192.168.10.220:6385,新節點
192.168.10.219:6379集群任一個舊節點
4,重新分配slot
查看復制列印?
# redis-trib.rb reshard 192.168.10.219:6378 //下面是主要過程
How many slots do you want to move (from 1 to 16384)? 1000 //設置slot數1000
What is the receiving node ID? //新節點node id
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:all //表示全部節點重新洗牌
Do you want to proceed with the proposed reshard plan (yes/no)? yes //確認重新分
新增加的主節點,是沒有slots的,
⑺ 深入了解Redis操作五大數據類型常用命令
我們知道Redis默認有16個資料庫,默認是第0個資料庫,那麼如果在需要對資料庫進行切換的時候,我們就可以使用下面這個命令:
使用如下命令進行切換
如果想要清除指定某一個資料庫的數據
清除所有資料庫的數據
接下來這個命令應該是最常用的了
平常在開發中,我們還需要經常對key進行判斷,判斷其是否存在
因為我們設置的緩存數據一般都不能是永久的,這個時候就需要我們在存儲數據的時候,就為其設置過期時間。
string類型是Redis中五大基本數據類型之一,這也是最常使用到的一個數據類型,所有很多小夥伴們對Redis的認識和操作就僅僅的停留在了對Redis的操作層面,但是你是否知道string類型中的相關命令,還是有非常多實用的
接下來先看一下對string類型進行基本存儲和獲取的命令。
如果我們存儲的string中的內容是數字的話,我們也可以對其進行增或減操作,Redis可以自動的對字元串進行相關的操作。實現的命令如下:
使用msetnx時,同時設置一個或多個 key-value 對,當且僅當所有給定 key都不存在時才成立。
getset命令從字面意思就可以看出來,他的作用是先get再set。
總結string類似的使用場景:
在使用list類型進行存取的時候,有兩個命令需要進行區分:
注意:只有pop和push才分左右,其他的l都是list的意思
總結:
總結set集合一般用於元素的不重復的場景,比如抽獎系統,輪播等場景下
在使用hash集合的時候,要注意,hash其實就是一個Map集合,key-map的時候,值是一個map集合的形式進行存儲的,也和Java中的hashmap有一個類似。
HVALS獲取所有的value,HKEYS獲取所有的key,HGETALL獲取所有的鍵值
總結:
hash可以用於存儲變更的數據,比如user,name,age等,尤其是用戶信息之類的,hash更加適合用於對象的存儲,string更加適合用於字元串的存儲。
在set集合的基礎上增加一個序列號,來進行排序
ZRANGEBYSCORE使用語法
總結
以上是在對五種數據類型進行存取時的一些常用命令操作。關於其他的命令使用,小夥伴們在用到的時候可以直接入官網查看就可以了。