Redis笔记整理
Redis 遵守BSD協議、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫、數據結構服務器。
特點:
? ? 1.Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。
? ? 2.Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
? ? 3.Redis支持數據的備份,即master-slave模式的數據備份。
優勢:
? ? 1.性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
? ? 2.豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
? ? 3.原子 – Redis的所有操作都是原子性的,意思就是要么成功執行要么失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
? ? 4.豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
?? ?
Redis與其他key-value存儲的不同
? ? 1.Redis有著更為復雜的數據結構并且提供對他們的原子性操作,這是一個不同于其他數據庫的進化路徑。Redis的數據類型都是基于基本數據結構的同時對程序員透明,無需進行額外的抽象。
? ? 2.Redis運行在內存中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡內存,因為數據量不能大于硬件內存。在內存數據庫方面的另一個優點是,相比在磁盤上相同的復雜的數據結構,在內存中操作起來非常簡單,這樣Redis可以做很多內部復雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因為他們并不需要進行隨機訪問。
安裝:
? ? Ubuntu 的話直接?
? ? ? ? sudo apt-get update
? ? ? ? sudo apt-get install redis-server
? ? ? ? 啟動: 先啟動 redis-server 服務,然后啟動客戶端redis-cli,接下來就可以在客戶端里操作。[ubuntu我的是安裝后直接服務就已經起來了,直接redis-cli就好]
配置:
? ? 查看配置命令如下(在進入redis-cli之后) ?CONFIG GET CONFIG_SETTING_NAME
? ? 例如我要看下日志輸出等級怎么配置的就直接 config get loglevel
? ? 輸出是這樣的:(第一行是key,第二行是配置的參數)
? ? ? ? 1) "loglevel"
? ? ? ? 2) "notice"
?? ?CONFIG GET * 獲取所有配置
? ? 編輯配置 CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
?? ?例如修改日志等級: CONFIG SET loglevel "notice"
參數說明: https://www.runoob.com/redis/redis-conf.html
Redis 數據類型:
? ? 五種:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
?? ?
? ? 1.String:一個 key 對應一個 value,是二進制安全的。甚至可以存圖片和其他對象。
? ? ? ? 設置set sss "lalalalalala" ?獲取get sss 刪除 del sss
? ? 2.Hash:是一個 string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象。
? ? ? ? 設置hset hhhh k1 v1 k2 v2 意思是存一個hash,名字是hhhh,里面兩對值 k1 v2和k2 v2
? ? ? ? 獲取的話 是 hget hhhh k1 就是名字為hhhh的hash里面,k1的值是多少。
? ? 3.List:列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
? ? ? ? 添加一個字符串到名字為lll的列表里lpush lll 111,再加一個lpush lll 222
? ? ? ? 獲取的話是這樣lrange lll 0 1。就是獲取lll列表里面從下標0到下標1的數據。
? ? 4.Set: Redis 的 Set 是 string 類型的無序集合。集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。
? ? ? ? 向sss集合里面添加s1是 sadd sss s1,再添加一個s2,是sadd sss s2 ,如果再繼續添加s2的話就會添加失敗,返回添加0個,因為是集合嘛。
? ? ? ? 獲取的話是這樣:smembers k2?? ??? ?
?? ??? ?
? ? 5.zset(sorted set:有序集合)
? ? ? ? Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員。
? ? ? ? 不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重復。
?? ??? ?
?? ??? ?添加數據的格式是這樣 zadd key score member
? ? ? ? 連續添加三條?
? ? ? ? ? ? zadd zzz 1 aaa
? ? ? ? ? ? zadd zzz 2 bbb
? ? ? ? ? ? zadd zzz 2 vvv
?? ??? ?然后獲取下試試
? ? ? ? ? ? ZRANGEBYSCORE zzz 0 10000 這個是獲取zzz里面分數(權重,是0-10000)的所有數據。
? ? ??
啟動服務器 redis-server
登陸客戶端 redis-cli
檢驗連接成功 PING ?成功返回 PONG
在遠程服務上執行命令
redis-cli -h host -p port -a password (redis-cli -h 127.0.0.1 -p 6379 -a "mypass")
【如果中文發現亂碼,嘗試 redis-cli 后面加上 --raw】
Redis HyperLogLog (>2.8.9)
Redis HyperLogLog 是用來做基數統計的算法,HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定 的、并且是很小的。
在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基 數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。
但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。
什么是基數?
比如數據集 {1, 3, 5, 7, 5, 7, 8}, 那么這個數據集的基數集為 {1, 3, 5 ,7, 8}, 基數(不重復元素)為5。 基數估計就是在誤差可接受的范圍內,快速計算基數。
實例
PFADD pf 1
PFADD pf 2
PFADD pf 3
PFADD pf 4
PFCOUNT pf 可以獲取得到4
Redis 發布訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。
Redis 客戶端可以訂閱任意數量的頻道。
SUBSCRIBE xxx ? ? 在一個終端里
PUBLISH xxx "mmmmmmmmmmm" ? 打開另一個終端或者多個終端,執行前面命令。第一個終端(訂閱者)可以收到任何一個終端發過來的消息
可以SUBSCRIBE啟動多個終端,然后訂閱xxx,這樣大家都能接受到消息。
Redis 事務
Redis 事務可以一次執行多個命令, 并且帶有以下三個重要的保證:
批量操作在發送 EXEC 命令前被放入隊列緩存。
收到 EXEC 命令后進入事務執行,事務中任意命令執行失敗,其余的命令依然被執行。
在事務執行過程,其他客戶端提交的命令請求不會插入到事務執行命令序列中。
MULTI ? ?先輸入這個
....中間是輸入各種命 令,可以是很多行
EXEC ? ?輸入這個,開始觸發上面的那一些命令
安全登陸
CONFIG get requirepass 看一下當前密碼,默認是沒有就是空
可以設置:CONFIG set requirepass "password"
然后再起一個終端,輸入redis-cli之后隨便執行一個命令會發現權限不足
這個時候 AUTH password ? ?就行了,用設置好的秘密
清楚密碼就直接 CONFIG set requirepass ""
剩下的就是針對每個數據類型+key的命令,非常詳細 重要 靈活
需要的時候去這查 https://www.runoob.com/redis/redis-keys.html
建議先全都看一遍,大體知道都有什么命令
?? ??? ?
?? ?
?? ?
?
總結
- 上一篇: Docker用Dockerfile定制镜
- 下一篇: Dockerfile多阶段构建