坑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
添加密碼
- 修改redis.conf配置:500行左右:requirepass 密碼
- 關閉redis
/usr/bin/redis-cli shutdown
or
kill -9 PID - 啓動redis redis-server /etc/redis.conf
- 驗證:redis-cli -a 密碼
ping 返回pong就是成功了。
遠程連接
- 註釋掉本地IP地址綁定
69行: # bind 127.0.0.1 ::1 - 關閉保護模式(把yes改爲no)
88行:protected-mode no - 重啓redis服務
- 客戶端連接試一下: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很多時,當前命令會阻塞redistype key
返回key的數據類型exists key
當前key是否存在,1在0不在del key
刪除keyrename 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,生產者消費者模型,做中間層,存放生產者的任務