1. 程式人生 > >Redis進階實踐之五Redis的高階特性

Redis進階實踐之五Redis的高階特性

一、引言

    上一篇文章寫了Redis的特徵,使用場景,同時也介紹了Redis的基本資料型別,redis的資料型別是操作redis的基礎,這個必須好好的掌握。今天我們開始介紹一些Redis的高階特性,雖然有些命令很簡單,但是這些命令是使用很廣泛的,並且是通用的一些命令,好好的把握這些命令,通過組合這些命令可以完成比較複雜的任務,這都是基礎,我們就開始我們今天的學習之旅吧。

二、Redis的高階特性

   下面我們就是Redis高階特性的每個知識點,只是個人的理解,隨著學習的深入,也會更新相關的章節。

  1、通用命令:

    1.1】、語法:keys pattern,pattern可以是類似正則的匹配規則,可以是*,也可以是?,返回匹配規則的鍵值key的列表。

複製程式碼
           192.168.127.128:6379>keys *
           1"name"
           2"set2"
           3"set1"

           192.168.127.128:6379>keys n*
           1"name"

           192.168.127.128:6379>keys s*
           1"set2"
           2"set1"

           192.168.127.128:6379>keys set?
           1
"set2" 2"set1" 192.168.127.128:6379>keys n?me 1"name"
複製程式碼


    1.2】、語法:exists key [key ...],判斷一個或者多個key是否存在,並返回存在key的個數,不存在返回0。

複製程式碼
           192.168.127.128:6379>keys *
           1"name"
           2"age"

           192.168.127.128:6379>exists name age address(該值存在)
           (integer)
2 192.168.127.128:6379>exists name1 age1 address(該值存在) (integer)0
複製程式碼


    1.3】、語法:expire key seconds,給指定的key設定過期時間,單位是秒。用ttl命令可以檢視剩餘的時間,如果想更精確的、效能更好的倒計時功能,可以使用該功能。設定過期時間成功返回值為1,此命令可以多次執行,後面的過期值會覆蓋前面的過期值。過期的資料會從Redis資料庫裡刪除。

複製程式碼
           192.168.127.128:6379>expire name 60 設定name過期時間為60秒
           (integer)1

           192.168.127.128:6379>expire name 50 設定name過期時間為50秒
           (integer)1

           192.168.127.128:6379>ttl name
           (integer)48

           192.168.127.128:6379>ttl name
           (integer)45

            ttl返回值:

              -1、過期時間不存在

              -2、過期操作成功,資料已經移除
複製程式碼


    1.4】、語法:persist key,取消已經設定了過期時間的key的過期策略。取消過期策略成功返回1,key沒有過期策略返回0。

複製程式碼
           192.168.127.128:6379>keys *
           1"name"
           2"age"

           192.168.127.128:6379>expire name 60 設定name過期時間為60秒
           (integer)1

           192.168.127.128:6379>persist name
           (integer)1 //成功取消設定的過期策略

           192.168.127.128:6379>persist name
           (integer)0 //上一步已經取消了,在此執行取消操作返回0。
複製程式碼


    1.5】、語法:select index,在Redis中,邏輯劃分為16個數據庫,索引從0-15,我們在使用的過程中,可以針對不同的業務邏輯把資料快取在不同的資料庫,這是一個很好的架構設計,切記不要把所有的資料放在0號資料庫裡,不便於管理和分類。這16個數據庫資料是分離的,不是共享的,或者說資料都是獨立的。

複製程式碼
           192.168.127.128:6379>select 1
           OK

           192.168.127.128:6379[1]>

           192.168.127.128:6379[1]>select 5
           OK

           192.168.127.128:6379[5]>
複製程式碼


    1.6】、語法:move key db,至指定名稱為key的鍵值對轉移到指定資料庫db裡面,db是資料下標索引。

複製程式碼
           //索引為0的資料庫
           192.168.127.128:6379>keys *
           1"name"
           2"age"

           //索引為5的資料庫
           192.168.127.128:6379[5]>keys *
           (empty list or set)

           //在索引為5的資料庫裡面增加sex鍵值對,然後把其移動到索引為0的資料庫
           192.168.127.128:6379[5]>set sex nan
           OK

           192.168.127.128:6379[5]>keys *
           1)"sex"

           192.168.127.128:6379[5]>move sex 0
           (integer)1

           //索引為0的資料庫
           192.168.127.128:6379>keys *
           1"name"
           2"sex"    //從索引為5的資料已經移動到了索引為0的資料庫
           2"age"
複製程式碼


    1.7】、語法:randomkey,隨機返回當前資料庫中的key,其實這個功能我們可以使用在抽獎的場景,如果在併發比較高,而且有要保證效能的情況下,我建議大家使用Redis的這個功能來完成抽獎的功能。有時候會返回重複的值,如果做抽獎需要做處理一下。

複製程式碼
           192.168.127.128:6379>keys *
           1"name"
           2"sex"
           2"age"

           192.168.127.128:6379>randomkey
           "name"

           192.168.127.128:6379>randomkey
           "age"

           192.168.127.128:6379>randomkey
           "age"
複製程式碼


    1.8】、語法:rename key newkey,重新給指定的key命名。

複製程式碼
           192.168.127.128:6379>keys *
           1"name"
           2"sex"
           2"age"

           192.168.127.128:6379>rename name name1
           OK

           192.168.127.128:6379>keys *
           1"name1"
           2"sex"
           2"age"

           192.168.127.128:6379>rename name1 name
           OK
複製程式碼


    1.9】、語法:echo message,在當前介質上列印message資訊。

           192.168.127.128:6379>echo patrickLiu
           "patrickLiu"


    1.10】、語法:dbsize,返回當前資料中鍵值對的個數,或者更準確的說是key的個數。

複製程式碼
           192.168.127.128:6379>keys *
           1"name"
           2"sex"
           2"age"

           192.168.127.128:6379>dbsize
           3
複製程式碼


    1.11】、語法:info [section],可以獲取當前資料的詳細資訊。

複製程式碼
           192.168.127.128:6379>info //顯示當前資料的所有資料


           192.168.127.128:6379>info replication //顯示指定節的資訊
           # Replication

           role:master
           connected_slaves:0
           ...
複製程式碼


    1.12】、語法:config get *,獲取配置檔案中的所有的配置資料。

複製程式碼
           192.168.127.128:6379>config get *
           ...

           192.168.127.128:6379>config get bind
           1"bind"
           2"192.168.127.128"

           192.168.127.128:6379>config get port
           1"port"
           2"6379"
複製程式碼


    1.13】、語法:flushdb,清空當前資料所有的鍵值對。

           192.168.127.128:6379>flushdb
           OK

           192.168.127.128:6379>keys *
           (empty list or set)


    1.14】、語法:flushall,清空所有資料庫的所有鍵值對。

複製程式碼
           192.168.127.128:6379>flushall
           OK


           192.168.127.128:6379[1]>keys *
           (empty list or set)

           ...

           192.168.127.128:6379[5]>keys *
           (empty list or set)

           ...
複製程式碼


  2、安全設定

     2.1】、vi 或者 vim 編輯 redis.conf 文件,修改

     
          #requirepass 123456 (設定密碼)
          
           requirepass admin

     2.2】、重啟伺服器 pkill redis-server

複製程式碼
           [[email protected]~]# application/program/redis-tool/redis-cli -h 192.168.127.128 -p 6379

           192.168.127.128:6379>keys *
           (error)NOAUTH Authentication required.

           192.168.127.128:6379>auth admin   //授權
            OK

           192.168.127.128:6379>keys *  //可以執行
           (empty list or set)
複製程式碼


     2.3】、[[email protected]~]/root/application/program/redis-tool/redis-cli -h 192.168.127.128 -p 6379 -a admin

  3、事務模型


     redis也是支援事務的,但是這個事務是比較簡單的,之所以說簡單,是因為redis的事務不能保證操作的同時成功或者同時失敗而進行提交或者回滾,這種情形很容易導致資料的不一致性,大家使用的時候要特別注意。

     3.1】、首先通過multi命令開啟事務,然後進行事務性的設定,這些設定完的資料會儲存在虛擬佇列中,最後可以通過exec命令執行事務。

複製程式碼
           //當前資料庫中無值
           192.168.127.128:6379>keys *
           (empty list or set)


           192.168.127.128:6379>multi
           OK

           192.168.127.128:6379>set p1 1
           QUEUED

           192.168.127.128:6379>set p2 2
           QUEUED

           192.168.127.128:6379>set p3 3
           QUEUED

           192.168.127.128:6379>exec
           1)OK
           2)OK
           3)OK

           192.168.127.128:6379>keys *
           1)"p3"
           2)"p2"
           3)"p1"
複製程式碼


     3.2】、redis的事務可以通過discard命令取消事務。

複製程式碼
           //當前資料庫中的值
           192.168.127.128:6379>keys *
           1)"p3"
           2)"p2"
           3)"p1"

           192.168.127.128:6379>multi
           OK

           192.168.127.128:6379>set p4 4
           QUEUED

           192.168.127.128:6379>set p5 5
           QUEUED

           192.168.127.128:6379>discard  //取消事務
           OK

           //值沒變
           192.168.127.128:6379>keys *
           1)"p3"
           2)"p2"
           3)"p1"
複製程式碼


     3.3】、特別注意redis事務的不一致性。

複製程式碼
           //當前資料庫中的值
           192.168.127.128:6379>keys *
           1)"age"
           2)"name"

           192.168.127.128:6379>get name
           "huangfeihong"

           192.168.127.128:6379>get age
           (integer)18

           192.168.127.128:6379>multi
           OK

           192.168.127.128:6379>incr name
           QUEUED

           192.168.127.128:6379>incr age
           QUEUED

           192.168.127.128:6379>exec
           1)(error)ERR value is not an integer or 
            
           

相關推薦

Redis實踐Redis高階特性

一、引言     上一篇文章寫了Redis的特徵,使用場景,同時也介紹了Redis的基本資料型別,redis的資料型別是操作redis的基礎,這個必須好好的掌握。今天我們開始介紹一些Redis的高階特性,雖然有些命令很簡單,但是這些命令是使用很廣泛的,並且是通用的一些命令,好好的把握這些命令,通過組合這些

Redis實踐Redis的基本數據類型

規模 card 擴展 系統 fse nat 四大 軟件使用 html 轉載來源:http://www.cnblogs.com/PatrickLiu/p/8328669.html 一、引言 今天正式開始了Redis的學習,如果要想學好Redis,必須先學好Redi

Redis實踐Redis哨兵叢集模式

一、引言             上一篇文章我們詳細的講解了Redis的主從叢集模式,其實這個叢集模式配置很簡單,只需要在Slave的節點上進行配置,Master主節點的配置不需要做任何更改,但是有一點,Master和Slave兩個節點的持久化配置儘量保持一致,否則會有奇怪的問題出現。從今天開始我們開始講Re

Redis實踐二如何在Linux系統上安裝安裝Redis

進行 redis-cli windows 也會 www. 有關 目標 onf 名稱 原文:Redis進階實踐之二如何在Linux系統上安裝安裝Redis一、引言 上一篇文章寫了“如何安裝VMware Pro虛擬機”和在虛擬機上安裝Linux操作系統。那是第一步,有

Redis實踐十一 Redis的Cluster集群搭建

key 第一個 class 分布式 開關 rep redis 3.0 應用程序 嘗試 原文:Redis進階實踐之十一 Redis的Cluster集群搭建一、引言    本文檔只對Redis的Cluster集群做簡單的介紹,並沒有對分布式系統的所涉及到的概念做深入的探

Redis實踐三如何在Windows系統上安裝安裝Redis

Redis進階實踐之三如何在Windows系統上安裝安裝Redis 一、Redis的簡介         Redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括strin

Redis實踐十二 Redis的Cluster叢集動態擴容

一、引言       上一篇文章我們一步一步的教大家搭建了Redis的Cluster叢集環境,形成了3個主節點和3個從節點的Cluster的環境。當然,大家可以使用 Cluster info 命令檢視Cluster叢集的狀態,也可以使用Cluster Nodes 命令來詳細瞭

Redis實踐十一 Redis的Cluster叢集搭建

一、引言        本文件只對Redis的Cluster叢集做簡單的介紹,並沒有對分散式系統的所涉及到的概念做深入的探討。本文只是針對如何設定叢集、測試和操作叢集做了簡述,並且從使用者的角度描述了系統的行為,並不涉及Redis叢集規範中所包含的細節。但是,本教程試圖從終端使用者的角度來解釋有關Redis的

Redis實踐之一VMWare Pro虛擬機安裝和Linux系統的安裝

quic 頻繁 消息隊列 spa 格式 效率 返回 com 會有 原文:Redis進階實踐之一VMWare Pro虛擬機安裝和Linux系統的安裝一、引言 設計模式寫完了,相當於重新學了一遍,每次學習都會有不同的感受,對設計模式的理解又加深了,理解的更加透徹了

Redis實踐之一

Redis進階實踐之一VMWare Pro虛擬機器安裝和Linux系統的安裝 一、引言       設計模式寫完了,相當於重新學了一遍,每次學習都會有不同的感受,對設計模式的理解又加深了,理解的更加透徹了。還差一篇關於設計模式的總結的文章了,

redis叢集伸縮實踐官方redis-cluster伸縮

redis叢集由於各種原因,可能需要下線機器,例如某臺機器經常故障,需要換掉;例如某些時間段不需要那麼多機器,都可以下線機器。某些時刻又需要增加機器,例如淘寶雙十一促銷,京東618等。下面我來實踐redis官方叢集的節點伸縮。這個例子單機實現叢集。ps:建議使用redis-t

redis學習() redis事務和過期時間的應用

事務redis中的事務是一組命令的集合。使得一個事務中的redis命令要麼全執行,要麼全不執行使用方式: multi 和exec完成multi: 告訴redis將同一個事務的命令儲存起來。  之後傳送兩個SADD, redis返回queued表示命令進入了等待執行的事務佇列中

Redis持久化

一、Redis高可用概述 在介紹Redis高可用之前,先說明一下在Redis的語境中高可用的含義。 我們知道,在web伺服器中,高可用是指伺服器可以正常訪問的時間,衡量的標準是在多長時間內可以提供正常服務(99.9%、99.99%、99.999% 等等)。但是在Red

Redis記憶體模型

前言 Redis是目前最火爆的記憶體資料庫之一,通過在記憶體中讀寫資料,大大提高了讀寫速度,可以說Redis是實現網站高併發不可或缺的一部分。 我們使用Redis時,會接觸Redis的5種物件型別(字串、雜湊、列表、集合、有序集合),豐富的型別是Redis相對於Mem

ansible運維自動化---roles高階

Roles應用場景 複雜場景(建議使用roles) 變更指定主機或主機組 如命名不規範維護和傳承成本大 某些功能需Inlogs.com/blog/675193/201901/675193-20190102225646401-1546983424.png) roles下面每一個目錄是一個

第十課 Python模塊Numpy

忽略 作用 擴展 .sh error pty logic 給定 線性 轉 從一位大神哪裏轉過來的,大家一起學習吧。今後會逐步增加示例代碼。 NumPy   NumPy是高性能科學計算和數據分析的基礎包。部分功能如下: ndarray, 具有矢量算術運算和復雜廣播能力

系統學習redis——redis數據類型list類型及操作

hello 保留 個數 描述 查詢 元素 例如 ltr 插入 list數據類型介紹 list是一個鏈表結構,主要功能是push、pop、獲取一個範圍的所有值等等,操作中key可以理解為鏈表的名字。redis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。

AngularJS(三十)瀏覽器相容性解決

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

redis cluster 4.0.9 : redis-trib.rb del-node

os: ubuntu 16.04 redis:4.0.9 ruby:2.4.4 ip規劃 192.168.0.101 7000,7001,7002,7003 192.168.0.102 7000,7001,7002,7003 192.168.0.103 7000,7001,700

知乎技術分享:從單機到2000萬QPS併發的Redis高效能快取實踐

本文來自知乎官方技術團隊的“知乎技術專欄”,感謝原作者陳鵬的無私分享。 1、引言 知乎儲存平臺團隊基於開源Redis 元件打造的知乎 Redis 平臺,經過不斷的研發迭代,目前已經形成了一整套完整自動化運維服務體系,提供很多強大的功能。本文作者陳鵬是該系統的負責人,本次文