Django-32 Redis1 命令介紹 基礎概念 常用命令 數值操作 應用場景 過期時間 數據類型-列表

坑1:redis執行redis-service /etc/redis.conf卡死

解決:要把redis.conf配置裏面的daemonize的no改成yes

配置文件路徑:/etc/redis.conf
mysql配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf

備份:cp redis.conf redis_bak.conf
修改備份文件的用戶組爲redis:chown redis:root redis_bak.conf

添加密碼

  1. 修改redis.conf配置:500行左右:requirepass 密碼
  2. 關閉redis
    /usr/bin/redis-cli shutdown
    or
    kill -9 PID
  3. 啓動redis redis-server /etc/redis.conf
  4. 驗證:redis-cli -a 密碼
    ping 返回pong就是成功了。

遠程連接

  1. 註釋掉本地IP地址綁定
    69行: # bind 127.0.0.1 ::1
  2. 關閉保護模式(把yes改爲no)
    88行:protected-mode no
  3. 重啓redis服務
  4. 客戶端連接試一下:redis-cli -h 10.0.8.10 -a 密碼

命令介紹

  • select number
    切換數據庫(redis默認有16個庫,0-15位具體庫的編號,默認進入的庫的編號爲0)

  • info
    查看信息

  • keys表達式
    查找所有符合給定模式的key
    KEYS * 匹配數據庫中所有key
    KEYS h?llo 匹配hello,hallo等
    KEYS h*llo 匹配hllo和heeeeello等
    注:正式環境中,請勿使用此命令,由於redis單進程單線程當key很多時,當前命令會阻塞redis

  • type key
    返回key的數據類型

  • exists key
    當前key是否存在,1在0不在

  • del key
    刪除key

  • rename key newkey
    改變key名字

  • flushdb
    清除所在庫的所有數據庫

  • flushall
    清除所有數據庫數據

基礎概念

1、字符串、數字,都會轉爲字符串來存儲
2、以二進制的方式存儲在內存中
注意:

  • key命名規範
    可採用 -wang:email
  • key命名規範
    1,key值不宜過長,消耗內存,且在數據中查找這類鍵值的計算成本高
    2,不宜過短,可讀性差

  • 1,一個字符串類型的值最多能存512M內容

常用命令

  • set key value nx ex
    設置一個字符串的key
    nx:not exist 表示key不存在時,才存儲這個key
    ex:expire 過期時間,單位s
  • strlen key
    獲取key存儲值的長度
  • getrange key start stop
    獲取指定返回切片內容【包含start stop】
  • setrange key index value
    從索引值開始,用value替換原內容,返回最新長度
  • mset key1 value1 key2 value key3 value3
    批量添加key和value
  • mget key1 key2 key3
    批量獲取key的值

數值操作

  • incrby key 步長
    將key增加指定步長
  • decrby key 步長
    將key減少指定步長
    incr key
    +1操作
    decr key
    -1 操作
  • incrbyfloat key step
    float類型

應用場景

緩存

mysql數據存儲到redis字符串類型中

併發計數-點贊/秒殺

利用redis單進程單線程特點,併發問題轉爲串行問題

帶有效期的驗證碼

藉助過期時間,存放驗證碼;到期後自動消亡

過期時間

默認情況下,key沒有過期時間,需要手動指定
方案1:直接用set的ex參數
set key value ex 3
方案2:使用expire通用命令
1,set key value
2,expire key 5 # 5秒
3,pexpire key 5 # 5毫秒

檢查過期時間

  • ttl key - 通用命令
    返回值:
    -1:代表當前key,沒有過期時間
    >0:代表當前key的剩餘存活時間
    -2:代表當前key不存在
    刪除過期時間 persist key(把帶有過期時間的key變爲永久不過期)
    返回值:
    1:刪除成功
    0:沒有過期時間或者key不存在

redis刪除過期key機制

每個redis數據庫中,都會有一個特殊容器負責存儲帶有過期時間的key以及它對應的過期時間,這個容器稱爲“過期字典”。
針對過期字典中的key,redis結合,惰性刪除和定期刪除兩大機制,有效刪除過期數據。

最大內存檢查

最後一道保險 - maxmemory 配置選項
一旦內存量超過最大限制,redis會在執行命令時觸發內存淘汰(需手動在redis.conf中激活maxmemory配置項)
主流淘汰機制如下:
默認(no-enviction):禁入大多數寫命令
volatile-lru:從已設置過期時間的內存數據集中挑選最近最少使用的數據淘汰
volatile-ttl:從已設置過期時間的內存數據集中挑選即將過期的數據淘汰
volatile-random:從已設置過期時間的內存數據集中任意挑選數據淘汰
allkeys-lru:從內存數據集中挑選最近最少使用的數據 淘汰
allkeys-random:從數據集中任意挑選數據淘汰

數據類型-列表

1、 元素是字符串類型
2、列表頭尾增值快,中間增刪慢,增刪元素是常態
3、元素可重複
4、最多可包含2^32-1個元素
5、索引同python列表

增加

  • lpush key value1 value2
    從列表頭部壓入元素
    返回list新的長度
  • rpush key value1 value2
    從列表尾部壓入元素
    返回list新的長度
  • rpoplpush key1 key2
    從列表key1尾部彈出一個元素壓入key2的頭部
    返回被彈出的元素
  • linsert key after|before value newvalue
    在列表指定元素後/前插入元素
    返回:
    1,如果命令執行成功,返回列表長度
    2,如果沒有找到pivot,返回-1
    3,如果key不存在或空列表,返回0

查看

  • lrange key start stop
    查看列表的元素
  • llen key
    獲取列表長度

刪除

  • lpop key
    從列表左邊彈出一個元素

  • rpop key
    從列表右邊彈出一個元素

  • blpop key timeout
    列表左邊,阻塞彈出,列表爲空時阻塞
    -brpop key timeout
    列表右邊,阻塞彈出,列表爲空時阻塞
    1, 如果彈出的列表不存在或爲空,就會阻塞
    2,超過時間設置爲0,就是永久阻塞,直到有數據可以彈出
    3,如果多個客戶端阻塞再同一個列表上,使用first in first service原則,先到先服務

  • lrem key count value
    刪除指定元素
    count>0:表示從頭開始向尾搜索,移除與value相等的元素,數量爲count
    count<0:表示從尾開始向頭搜索,移除與value相等的元素,數量爲count
    count=0:移除表中所有與value相等的值

  • ltrim key start stop
    保留指定範圍內的元素
    場景:保存微博評論最後500條
    ltrim weibo:comments 0 499

更新

  • lset key index newvalue
    設置list指定索引的值

list應用場景

1,存儲微博評論,做切割,只保留最新的xx個
2,生產者消費者模型,做中間層,存放生產者的任務

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