1. 程式人生 > >Redis系列七、redis全域性常用指令和redis相關介紹

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系列--2Redis配置

redis配置詳解1、Redis配置在Redis有配置文件(redis.conf)可在Redis的根目錄下找到。可以通過Redis的CONFIG命令設置所有Redis的配置。2、配置文件說明:1. Redis默認不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程 daemonize

Redis系列--7RedisTemplate Serializer詳解

redistemplate serializer詳解<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionF

Redis系列--6Redis 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 進入解壓後的目錄,並執行下面命令,指定安裝

移動開發過程中grepfindadbgitrepo等常用指令的使用場景

專案開發中通常都會涉及到相關指令,這是我這整理的日常使用最頻繁的一些 一.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服務系列——DebugRelease版本的註冊解除安裝,及其原理

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 例如 要猜欄位時 需要鍵入指定表段