Redis之安裝/操作快速入門

1、redis介紹

一種使用內存存儲的非關係型數據庫

2、支持的數據結構類型

類型 簡介 結構存儲的值 結構的讀寫能力
字符串(STRING) 二進制安全 可以是字符串、整數、或浮點數(Memcached相同) 對整個字符串或者字符串的其中一部分的其中一部分執行操作;
對整數和浮點數執行自增或自減操作;
列表(LIST) 鏈表(雙向鏈表) 一個鏈表,鏈表上的每個節點都包含一個字符串 從鏈表的兩端推入或者彈出元素;
根據偏移量對鏈表進行修剪(trim);
讀取單個或多個元素;
根據值查找或者移除元素;
集合(SET) 哈希表實現,元素不重複 包含字符串的無序收集器(unordered collection),並且被包含的每個字符串都是獨一無二、各不相同的 添加、獲取、移除單個元素;
檢查一個元素是否存在於集合中;
計算交集、並集、差集;
從集合裏面隨機獲取元素;
散列(HASH) 鍵值對集合,即編程語言中的Map類型 包含鍵值對的無序散列表 添加、獲取、移除單個鍵值對;
獲取所有鍵值對;
有序集合(ZSET) 將set中的元素添加一個權重參數score,元素按score有序排列 字符串成員(member)與浮點數分值(sore)之間的有序映射,元素的排列順序有分值的大小決定 添加、獲取、移除單個元素;
根據分值範圍(range)或者成員來獲取元素

3、Redis安裝

《CentOS7 安裝 Redis單實例》

《阿里雲CentOS7 Docker安裝Redis》

  • Windows

    • https://github.com/MSOpenTech/redis/releases
    • 啓動服務端:redis-server.exe redis.windows.conf
    • 啓動客戶端:redis-cli.exe -h 127.0.0.1 -p 6379
  • Linux

    yum -y install gcc gcc-c++ libstdc++-devel 
    make MALLOC=libc
    wget http://download.redis.io/releases/redis-5.0.5.tar.gz
    tar -zxvf redis-5.0.8.tar.gz
    cd redis-5.0.8
    make && make install
    

4、redis-server啓動

cd src

  • 默認啓動:redis-server
  • 指定配置文件:redis-server ../redis.conf
  • 指定參數啓動:redis-server …/redis.conf --daemonize yes --port 1122 --bind 0.0.0.0

啓動配置策略(修改redis-conf文件):

  • 後臺啓動

    • daemonize no 修改成 daemonize yes 開啓守護
  • 支持所有ip訪問

    • bind 127.0.0.1 爲 bind 0.0.0.0
  • 允許外網訪問

    • protected-mode yes 修改爲 protected-mode no(3.2後增加protected-mode保護模式)
  • 設置密碼(遠端訪問必須設置密碼):

    • requirepass xxxx 改爲requirepass #密碼#
  • 開啓防火牆(不然遠端不可訪問)

    • firewall-cmd --add-port=6379/tcp --permanent
      firewall-cmd --reload
      
  • 設置客戶端最大連接數:

    • –maxclients 10000 2.6開始有有的,之前是寫在代碼中

5、redis-cli啓動

用於和server進行交互

  • 本機連接:redis-cli

  • 遠端連接: redis-cli -h 127.0.0.1 -p 6379

  • 遠端連接(密碼): redis-cli -h 127.0.0.1 -p 6379 -a 123456

  • 測試

    set foo bar
    get foo
    或
    redis-cli set zoo bar
    redis-cli set zoo
    
  • 注意:windows客戶端連接遠端redis不成功原因

    • 不允許公網連接

    • 防火牆禁止了redis端口

    • Redis.conf 下的bind 配置需要改成0.0.0.0

    • Redis.conf 下的requirepass foobared 配置密碼

6、停止/重啓

注意參數只能寫在shutdown之前

  • 默認關閉的是6379:redis-cli shutdown
  • 關閉指定端口redis:redis-cli -p 1123 shutdown
  • 關閉指定端口redis(密碼):redis-cli -p 1123 -a 123456 shutdown

7、Redis 原工具介紹

  • redis-server redis服務器
    redis-cli redis命令行客戶端
    redis-benchmark redis性能測試工具
    redis-check-aof aof文件修復工具
    redis-check-dump rdb文件檢查

8、Redis可視化客戶端

  • Redis Destop Manager

9、配置命令

config

  • 查看所有配置:config get *
  • 查看單個配置:config get requirepass
  • 設置配置:config set requirepass 123456

10、30個配置參數介紹

序號 配置項 說明
1 daemonize no Redis 默認不是以守護進程的方式運行,可以通過該配置項修改,使用 yes 啓用守護進程(Windows 不支持守護線程的配置爲 no )
2 pidfile /var/run/redis.pid 當 Redis 以守護進程方式運行時,Redis 默認會把 pid 寫入 /var/run/redis.pid 文件,可以通過 pidfile 指定
3 port 6379 指定 Redis 監聽端口,默認端口爲 6379,作者在自己的一篇博文中解釋了爲什麼選用 6379 作爲默認端口,因爲 6379 在手機按鍵上 MERZ 對應的號碼,而 MERZ 取自意大利歌女 Alessia Merz 的名字
4 bind 127.0.0.1 綁定的主機地址
5 timeout 300 當客戶端閒置多長秒後關閉連接,如果指定爲 0 ,表示關閉該功能
6 loglevel notice 指定日誌記錄級別,Redis 總共支持四個級別:debug、verbose、notice、warning,默認爲 notice
7 logfile stdout 日誌記錄方式,默認爲標準輸出,如果配置 Redis 爲守護進程方式運行,而這裏又配置爲日誌記錄方式爲標準輸出,則日誌將會發送給 /dev/null
8 databases 16 設置數據庫的數量,默認數據庫爲0,可以使用SELECT 命令在連接上指定數據庫id
9 save ;
Redis 默認配置文件中提供了三個條件:
save 900 1
save 300 10
save 60 10000
分別表示 900 秒(15 分鐘)內有 1 個更改,300 秒(5 分鐘)內有 10 個更改以及 60 秒內有 10000 個更改
save條件:指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合
10 rdbcompression yes 指定存儲至本地數據庫時是否壓縮數據,默認爲 yes,Redis 採用 LZF 壓縮,如果爲了節省 CPU 時間,可以關閉該選項,但會導致數據庫文件變的巨大
11 dbfilename dump.rdb 指定本地數據庫文件名,默認值爲 dump.rdb
12 dir ./ 指定本地數據庫存放目錄
13 slaveof 設置當本機爲 slave 服務時,設置 master 服務的 IP 地址及端口,在 Redis 啓動時,它會自動從 master 進行數據同步
14 masterauth 當 master 服務設置了密碼保護時,slav 服務連接 master 的密碼
15 requirepass #密碼# 設置 Redis 連接密碼,如果配置了連接密碼,客戶端在連接 Redis 時需要通過 AUTH 命令提供密碼,默認關閉
16 maxclients 128 設置同一時間最大客戶端連接數,默認無限制,Redis 可以同時打開的客戶端連接數爲 Redis 進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis 會關閉新的連接並向客戶端返回 max number of clients reached 錯誤信息
17 maxmemory 指定 Redis 最大內存限制,Redis 在啓動時會把數據加載到內存中,達到最大內存後,Redis 會先嚐試清除已到期或即將到期的 Key,當此方法處理 後,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis 新的 vm 機制,會把 Key 存放內存,Value 會存放在 swap 區
18 appendonly no 指定是否在每次更新操作後進行日誌記錄,Redis 在默認情況下是異步的把數據寫入磁盤,如果不開啓,可能會在斷電時導致一段時間內的數據丟失。因爲 redis 本身同步數據文件是按上面 save 條件來同步的,所以有的數據會在一段時間內只存在於內存中。默認爲 no
19 appendfilename appendonly.aof 指定更新日誌文件名,默認爲 appendonly.aof
20 appendfsync everysec 指定更新日誌條件,共有 3 個可選值:
no:表示等操作系統進行數據緩存同步到磁盤(快)
always:表示每次更新操作後手動調用 fsync() 將數據寫到磁盤(慢,安全)
everysec:表示每秒同步一次(折中,默認值)
21 vm-enabled no 指定是否啓用虛擬內存機制,默認值爲 no,簡單的介紹一下,VM 機制將數據分頁存放,由 Redis 將訪問量較少的頁即冷數據 swap 到磁盤上,訪問多的頁面由磁盤自動換出到內存中(在後面的文章我會仔細分析 Redis 的 VM 機制)
22 vm-swap-file /tmp/redis.swap 虛擬內存文件路徑,默認值爲 /tmp/redis.swap,不可多個 Redis 實例共享
23 vm-max-memory 0 將所有大於 vm-max-memory 的數據存入虛擬內存,無論 vm-max-memory 設置多小,所有索引數據都是內存存儲的(Redis 的索引數據 就是 keys),也就是說,當 vm-max-memory 設置爲 0 的時候,其實是所有 value 都存在於磁盤。默認值爲 0
24 vm-page-size 32 Redis swap 文件分成了很多的 page,一個對象可以保存在多個 page 上面,但一個 page 上不能被多個對象共享,vm-page-size 是要根據存儲的 數據大小來設定的,作者建議如果存儲很多小對象,page 大小最好設置爲 32 或者 64bytes;如果存儲很大大對象,則可以使用更大的 page,如果不確定,就使用默認值
25 vm-pages 134217728 設置 swap 文件中的 page 數量,由於頁表(一種表示頁面空閒或使用的 bitmap)是在放在內存中的,,在磁盤上每 8 個 pages 將消耗 1byte 的內存
26 vm-max-threads 4 設置訪問swap文件的線程數,最好不要超過機器的核數,如果設置爲0,那麼所有對swap文件的操作都是串行的,可能會造成比較長時間的延遲。默認值爲4
27 glueoutputbuf yes 設置在向客戶端應答時,是否把較小的包合併爲一個包發送,默認爲開啓
28 hash-max-zipmap-entries 64
hash-max-zipmap-value 512
指定在超過一定的數量或者最大的元素超過某一臨界值時,採用一種特殊的哈希算法
29 activerehashing yes 指定是否激活重置哈希,默認爲開啓(後面在介紹 Redis 的哈希算法時具體介紹)
30 include /path/to/local.conf 指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件

11、基本cli命令

記住redis裏面存儲的都是字符串,所以一些數據加不加引號都一樣,例如 12 存儲後就是“12”

原始編碼:int 整數並且小於 long 2^63-1

升級編碼1:embstr 超過44字節,被修改

升級編碼2:raw

  • 字符串操作

    // 設置字符串鍵值對
    set hello word
    
    // 獲取指定鍵的值
    get hello 
    
  • LIST操作

    還記得嗎?他用的雙向鏈表結構哦。

    quicklist,用的雙向鏈表,可以也可以尾插入,頭取出,所以也

    // 設置列表
    lpush language java
    lpush language python
    lpush language c++
    
    // 獲得指定索引返回的列表(記住插入的元素最新的爲0)
    lrange language 0 0  // 獲得列表歐中最近插入的一個元素
    lrange language 2 8  // 獲得列表中最近索引2 到索引8的元素
    lrange language 0 -1  // 獲取所有
    
  • SET操作

    原始編碼:intset 元素都是整數類型 且 元素個數小於512個

    升級編碼:hashtable

    // 添加set集合元素
    sadd language java
    sadd language python
    sadd language python  // 無效添加
    sadd language c++
        
    // 獲得集合元素列表
    smembers language
    
  • hash操作

    ziplist

    原始編碼:ziplist 鍵和值的長度小於64byte 且 鍵值對個數不超過512個

    升級編碼:hashtable

    底層實現存儲的是2個數組,爲什麼兩個? 其中一個存儲的是 數組+鏈表方式的結構

    // 設置hash
    hmset  user name "zhangsan" age 12
    hset  user name "zhangsan" age 12	//發現這樣也可以
        
    // 獲得指定hash的鍵的值
    hget user name
    
  • ZSET操作

    還記得嗎?字符串成員(member)與浮點數分值(sore)之間的有序映射,元素的排列順序有分值的大小決定

    原始編碼:ziplist 元素數量不超過128個 且 任何一個member 的長度小於64字節

    升級編碼:skiplist

    // 添加zset
    zadd language 0 java
    zadd language 10 python
    zadd language 0 python // 無效添加
    zadd language 2 c
    
    // 查看指定score範圍內集合(根據score升序排列)
    zrangebyscore language 0 10
    
  • 通用操作

    // 刪除鍵(適合任何類型)
    del foo
    
    // 數據庫切換,(默認使用0,最大15,共支持16個數據庫。數據是隔離的)
    // 數據庫概念只有單機纔有,集羣沒有數據庫的概念
    select 1
        
    // 查看服務器信息
    info
    
    // 獲得dump.rdb文件
    config get dir
    
    // 備份當前數據庫的數據
    save
    
    // 客戶端連接列表
    client list
    
    // 客戶端設置名稱
    client setname lilei
    
    // 獲取客戶端名稱
    client getname
    
    // 掛起 和殺死其他客戶端
    client pause 100(毫秒)
    client kill #ip:port#
    
    // 查看服務是否運行
    ping
    
    // 查看當前key的編碼(很有意思,可以去看看所有的存儲結構)
    object encoding #key#
    
  • 菜鳥編程之Redis命令大全

  • 騰訊雲社區之Redis命令大全

  • Redis官方網站命令大全

  • Redisdoc中文網站命令大全

12、其他結構

2.8.9版本添加了HyperLogLog結構

  • HyperLogLog結構

    • 是用來做基數統計的算法,優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的,並且是很小的,在redis裏面每個HyperLogLog鍵只需要花費12kb內存,就可以計算接近2^64個不同元素的基數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比

    • 但是HyperLogLog只會根據輸入元素來計算基數,而不會存儲輸入元素本身,所以HyperLogLog不能像集合那樣,返回輸入的各個元素

    • 什麼是基數?

      • 比如數據集{1,3,5,7,5,7,8},那麼這個元素的基數集爲{1,3,5,7,8},基數(不重複元素)爲5個。基數估計就是在誤差可接受的範圍內,快速計算基數(不重複的元素)
    • 命令介紹

      // 添加指定元素到HyperLogLog中
      pfadd language redis
      pfadd language mongdb
      pfadd language mysql
      
      // 返回給定HyperLogLog的給基數(不重複元素數量)估算值
      pfcount language
      
      // 將多個HyperLogLog合併爲一個HyperLogLog
      pfcount language foor
      
  • 位圖

    bitmaps

  • 地理位置信息

    geospatial indexes with radius queries and streams

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章