Redis系列七、redis全域性常用指令和redis相關介紹
redis全域性常用指令和redis相關介紹
一、全域性命令
以下指令對5中資料型別都有效,統計檢視型別的會把5種資料型別全部統計進去,操作型別指令對5中資料型別都有效。
- 檢視所有鍵:keys * set school dongnao set hello world
- 鍵總數 dbsize //2個鍵,如果存在大量鍵,線上禁止使用此指令
- 檢查鍵是否存在:exists key //存在返回1,不存在返回0
- 刪除鍵:del key //del hello school, 可以一次刪除多個鍵,返回刪除鍵個數,刪除不存在鍵返回0
- 鍵過期:expire key seconds //set name test expire name 10 //10秒過期
- ttl key 檢視剩餘的過期時間,單位是秒,永久有效返回-1,已失效或不存在返回-2
- 鍵的資料結構型別:type key //type hello //返回string,鍵不存在返回none
二、redis鍵管理
1、鍵重新命名
格式: rename oldKey newKey //若oldKey之前存在則被覆蓋
set name james ;
set name1 mike //資料初始化
renamenx name name1 //重新命名失敗,只有當name1不存在才能改名
renamenx name name2 //重新命名成功
2、鍵過期
格式:
a、expire key seconds
seconds設定為-2表示直接過期和del一樣的效果
expire name:03 20 //鍵name:03 在10秒後過期
expire name:06 -2 //直接過期,和del一樣
b、pexpire key milliseconds
設定鍵過期時間,單位為毫秒
pexpire name:05 20000 //20000毫秒(20S)後過期
c、expireat key timestamp
設定鍵過期時間,單位是時間戳
expireat name:04 1516971599 //設定在2018/01/26 20:59:59過期
3、取消鍵過期
格式: persist key
persist user:01 //去掉過期
4、檢視鍵有效時間
ttl name:03 //檢視過期按秒到計時,當返回-2說明已刪除 pttl name:03 //檢視過期按毫秒到時計
注意: 對於字串重設值後,expire無效,
set name james
expire name 50
ttl name
set name james1 //此時expire取消
ttl name //返回-1, 長期有效
5、鍵的遷移:把部分資料遷移到另一臺redis伺服器
1, 格式: move key db //reids有16個庫, 編號為0-15
set name james1;
move name 5 //遷移到第6個庫
select 5 //資料庫切換到第6個庫,
get name //可以取到james1
補充:這種模式不建議在生產環境使用,在同一個reids裡可以玩
2, dump和restore的配合使用
格式:
dump name //得到name的持久化儲存格式資料
restore key ttl value//實現不同redis例項的鍵遷移,ttl=0代表沒有過期時間
例子:在A伺服器上 192.168.1.111
set name james;
dump name; // 得到"\x00\x05james\b\x001\x82;f\"DhJ"
在B伺服器上:192.168.1.118
restore name 0 "\x00\x05james\b\x001\x82;f\"DhJ"
get name //返回james
6、鍵的遍歷
//資料初始化
mset country china city bj name james //設定3個字串鍵值對
keys * //返回所有的鍵, *匹配任意字元多個字元
keys *y //以結尾的鍵
keys n*e //以n開頭以e結尾,返回name
keys n?me // ?問號代表只匹配一個字元 返回name,全域性匹配
keys n?m* //返回name
keys [j,l]* //返回以j l開頭的所有鍵 keys [j]ames 全量匹配james
注意: 考慮到是單執行緒, 在生產環境不建議使用,如果鍵多可能會阻塞
7、漸進式遍歷
mset a a b b c c d d e e f f g g h h i i j j k k l l m m n n o o p p q q r r s s t t u u v v w w x x y y z z //初始化26個字母鍵值對
字串型別:
SCAN命令用於迭代當前資料庫中的資料庫鍵。
返回結果為:用於下一次迭代的新遊標18;所有被迭代的元素
如果資料集合不是以雜湊表作為底層實現的話,則scan類命令無視count選項,直接返回資料集合中的所有元素
mset n1 1 n2 2 n3 3 n4 4 n5 5 n6 6 n7 7 n8 8 n9 9 n10 10 n11 11 n12 12 n13 13
scan 0 match n* //匹配以n開頭的鍵,最大是取10條,第一次scan 0開始
當最後返回0時,鍵被取完。
這一用法並不是很常用,有興趣的同學可以去這裡看看:http://redisdoc.com/key/scan.html
注:可有效地解決keys命令可能產生的阻塞問題
除scan字串外:還有以下
- SCAN 命令用於迭代當前資料庫中的資料庫鍵。
- SSCAN 命令用於迭代集合鍵中的元素。
- HSCAN 命令用於迭代雜湊鍵中的鍵值對。
- ZSCAN 命令用於迭代有序集合中的元素(包括元素成員和元素分值)。
三、redis資料庫管理
1、select
一個redis共16個庫, 0 -15, 可以用select切換資料庫;eg:
set name james
select 1
get name //隔離了,取不到,和mysql不同庫一樣
**補充:**其中redis3.0以後的版本慢慢弱化了這個功能,如在redis cluster中只允許0資料庫
原因:
- redis單執行緒,如果用多個庫,這些庫使用同一個CPU,彼此會有影響
- 多資料庫,除錯與運維麻煩,若有一個慢查詢,會影響其它庫查詢速度
- 來回切換,容易混亂
2、flushdb: 只清空當前資料庫的鍵值對(慎用!!!!)
3、flushall: 清空所有庫的鍵值對 (慎用!!!!)
四、單執行緒架構
效率極高
redis的命令執行是用單執行緒的模式,這種模式的效率非常高,這也是redis能處理那麼多併發,執行那麼快,這麼火爆的原因。
而這種模式快的原因是:純記憶體訪問, 非阻塞I/O(使用多路複用),單執行緒避免執行緒切換和競爭產生資源消耗。對此理解不了的同學可以去看一下我之前寫的nio的部落格:Netty之前篇——NIO基礎,和Netty,特別是前一篇,你看完這兩篇部落格就能非常清楚的瞭解redis這種模式為什麼快了。
弊病
但是這種模式也會有弊病,因為是單執行緒,執行某個命令,會造成其它命令的阻塞,所以如果在生產環境指行了某個非常耗時的指令,例如:keys *
,那麼可能就會造成連鎖反應帶來災難。
過程如下:keys *
指令非常耗時,一直在執行,造成其它命令的阻塞,併發量大會造成快取伺服器奔潰,並且大量的請求在redis請求不到結果會到MySQL等本地關係型資料庫查詢,造成MySQL伺服器的奔潰,進而可能造成整個分散式集群系統的奔潰。
前幾天就有某公司的工程師執行了keys *
指令導致公司損失了400萬,一個小小的指令就有這麼大的威力,所以這些耗時指令千萬不要在生產環境中使用。
列舉例子:三個客戶端同時執行命令
客戶端1:set name test
客戶端2:incr num
客戶端3:incr num
執行過程:傳送指令-〉執行命令-〉返回結果
執行命令:單執行緒執行,所有命令進入佇列,按順序執行,使用I/O多路複用解決I/O問題,後面有介紹(通過select/poll/epoll/kqueue這些I/O多路複用函式庫,我們解決了一個執行緒處理多個連線的問題)
相關推薦
Redis系列七、redis全域性常用指令和redis相關介紹
redis全域性常用指令和redis相關介紹 一、全域性命令 以下指令對5中資料型別都有效,統計檢視型別的會把5種資料型別全部統計進去,操作型別指令對5中資料型別都有效。 檢視所有鍵:keys * set school dongnao set
Redis系列六、redis的五種資料結構和相關指令之Sorted Set
本節中將介紹Redis支援的主要資料結構,以及相關的常用Redis命令。redis是一種基於鍵值對(key-value)的記憶體資料庫,redis資料結構可以分為string、hash、list、set、sorted set。 redis的五種資料結構和相關指令
Redis系列--2、Redis配置
redis配置詳解1、Redis配置在Redis有配置文件(redis.conf)可在Redis的根目錄下找到。可以通過Redis的CONFIG命令設置所有Redis的配置。2、配置文件說明:1. Redis默認不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程 daemonize
Redis系列--7、RedisTemplate和 Serializer詳解
redistemplate serializer詳解<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionF
Redis系列--6、Redis Java連接操作
redis java連接操作安裝要在Java程序中使用使用操作Redis,需要確保有Redis的Java驅動程序和Java設置在機器上。可以檢查看Java教程-學習如何在機器上安裝Java。現在,讓我們來看看如何設置Redis的Java驅動程序。需要下載jedis.jar。請一定要下載它的最新版本。需要包括j
Redis系列七:redis持久化
always redis hset 順序 保存 退出 老版本 參數 div redis支持RDB和AOF兩種持久化機制,持久化可以避免因進程退出而造成數據丟失 一、RDB持久化 RDB持久化把當前進程數據生成快照(.rdb)文件保存到硬盤的過程,有手動觸發和自動觸發
redis常用指令總結以及功能介紹
第一部分 redis的常用指令 一、針對key的操作 1.1 del key [key .. ] , 刪除指定的一個或者多個key;1.2 dump key , 序列化給定的key1.3 r
kafka系列七、kafka核心配置
1、producer核心配置 1、acks :傳送應答(預設值:1) 生產者在考慮完成請求之前要求leader收到的確認的數量。這控制了傳送的記錄的永續性。允許以下設定: acks=0:設定為0,則生產者將完全不等待來自伺服器的任何確認。記錄將立即新增到socket緩衝區,並被認為已傳送。在這種情
Redis的安裝、使用以及php中擴充套件redis並實現php操作redis的一個例子
1、下載原始碼包redis-2.8.21.tar.gz,並將其上傳到指定目錄/urs/src,然後對其進行解壓: [[email protected] src]# tar -xvf redis-2.8.21.tar.gz 進入解壓後的目錄,並執行下面命令,指定安裝
移動開發過程中grep、find、adb、git、repo等常用指令的使用場景
專案開發中通常都會涉及到相關指令,這是我這整理的日常使用最頻繁的一些 一.find命令 基本格式:find path expression 1.按照檔名查詢 (1)find / -name httpd.conf #在根目錄下查
Linux常用指令和系統管理命令總結
刪除 系統管 pin echo 隱藏 狀態 網絡連接 ifconfig 管理命令 Linux常用指令: ls 顯示文件或目錄 ls -l 列出文件詳細信息 ls -a 列出當前目錄下所有文件或目錄,包括隱藏的 ls -al 顯示詳細文件信息,包括隱藏的文件 mkd
kafka系列二、 kafka manager的安裝和使用
1. Yahoo kafka manager介紹 專案地址:https://github.com/yahoo/kafka-manager Requirements: Kafka 0.8.1.1 or 0.8.2.* sbt 0.13.x Java 8+ Kafka Mana
大資料(二十七):Sqoop常用命令和公用引數
一、常用命令列舉 命令 類 說明 import ImportTool 將資料匯入到叢集 export ExportTool
Redis全方位詳解--資料型別使用場景和redis分散式鎖的正確姿勢
一、Redis資料型別 1.string string是Redis的最基本資料型別,一個key對應一個value,每個value最大可儲存512M。string一半用來存圖片或者序列化的資料。 2.hash 相當於一個string型別的對映表。特別適合用來儲存物件。例如可以儲存使用者
maven的常用指令和 eclipse下的m2e外掛
maven 配置環境變數 maven可以通過dos視窗進行命令操作,安裝maven後,需要配置環境變數 注意: maven的使用需要本地java環境的支援,所以,必須要安裝好java並配置好java的環境變數 maven配置環境變數 方法一: 設定path的值為
git常用指令和ignore的配置方法
轉載至轉載請標明:http://blog.csdn.net/zxyudia/article/details/67633321 要很好的掌握Git,先要明白四個名詞概念: Workspace(工作區):新新增的,和修改的未add操作的。 Stage(暫存區):add操作過後,會進入暫
玩轉Windows服務系列——Debug、Release版本的註冊和解除安裝,及其原理
Windows服務Debug版本 註冊 Services.exe -regserver 解除安裝 Services.exe -unregserver Windows服務Release版本 註冊 Services.exe -service 解除安裝 Services
Docker系列(七):Docker圖形化管理和監控
Docker管理工具之官方三劍客 Docker Machine是什麼鬼 從前 現在 你需要登入主機,按照主機及作業系統特有的安裝以及配置步驟安裝Docker,使其 能執行Docker容器。 Docker Machine的產生簡化了這一過程,讓你可以使用一條命令在你的計算機,公有云
JSP的3個編譯指令、7個動作指令和9個內建物件
3個編譯指令: 1、page:針對當前頁面的指令<%@ page ...%> 2、include:指定包含另一個頁面<%@ include file="jsp.jsp"%> 3、taglib:定義和訪問自定義標籤<%@ tag
sqlmap常用指令和引數
/* -u型別為指令 --tables為引數 當使用的程式碼為巢狀型(例如先猜表名 後猜指定欄位時) 需要鍵入上一次用到的指令(如果上一次為引數要轉換) 引數轉換為指令 : --tables >> -T 例如 要猜欄位時 需要鍵入指定表段