1. 程式人生 > 其它 >MySQL效能優化-記憶體引數配置

MySQL效能優化-記憶體引數配置

Redis入門

連線

客戶端連線:redis-cli -h host -p port -a password

命令描述
AUTH password 驗證密碼是否正確
ECHO message 列印字串
PING 檢視服務是否執行
QUIT 關閉當前連線
SELECT index 切換到指定的資料庫

Key

用於管理 redis 的鍵

命令描述
DEL key 該命令用於在 key 存在是刪除 key。
DUMP key 序列化給定 key ,並返回被序列化的值。
EXISTS key 檢查給定 key 是否存在。
EXPIRE key seconds
為給定 key 設定過期時間。
EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 類似,都用於為 key 設定過期時間。 不同在於 EXPIREAT 命令接受的時間引數是 UNIX 時間戳(unix timestamp)。
PEXPIRE key milliseconds 設定 key 的過期時間億以毫秒計。
PEXPIREAT key milliseconds-timestamp 設定 key 過期時間的時間戳(unix timestamp) 以毫秒計
KEYS pattern 查詢所有符合給定模式( pattern)的 key 。
MOVE key db 將當前資料庫的 key 移動到給定的資料庫 db 當中。
PERSIST key 移除 key 的過期時間,key 將持久保持。
PTTL key 以毫秒為單位返回 key 的剩餘的過期時間。
TTL key 以秒為單位,返回給定 key 的剩餘生存時間(TTL, time to live)。
RANDOMKEY 從當前資料庫中隨機返回一個 key 。
RENAME key newkey 修改 key 的名稱
RENAMENX key newkey 僅當 newkey 不存在時,將 key 改名為 newkey 。
TYPE key 返回 key 所儲存的值的型別。

六種資料型別

String

用於管理 redis 字串值

命令描述
GET key 獲取指定 key 的值。
GETRANGE key start end 返回 key 中字串值的子串
GETSET key value 將給定 key 的值設為 value ,並返回 key 的舊值(old value)。
GETBIT key offset 對 key 所儲存的字串值,獲取指定偏移量上的位(bit)。
MGET key1 [key2..] 獲取所有(一個或多個)給定 key 的值。
SET key value 設定指定 key 的值
SETBIT key offset value 對 key 所儲存的字串值,設定或清除指定偏移量上的位(bit)。
SETEX key seconds value 將值 value 關聯到 key ,並將 key 的過期時間設為 seconds (以秒為單位)。
SETNX key value 只有在 key 不存在時設定 key 的值。
SETRANGE key offset value 用 value 引數覆寫給定 key 所儲存的字串值,從偏移量 offset 開始。
MSET key value [key value ...] 同時設定一個或多個 key-value 對。
MSETNX key value [key value ...] 同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在。
PSETEX key milliseconds value 這個命令和 SETEX 命令相似,但它以毫秒為單位設定 key 的生存時間,而不是像 SETEX 命令那樣,以秒為單位。
STRLEN key 返回 key 所儲存的字串值的長度。
INCR key 將 key 中儲存的數字值增一。
INCRBY key increment 將 key 所儲存的值加上給定的增量值(increment) 。
INCRBYFLOAT key increment 將 key 所儲存的值加上給定的浮點增量值(increment) 。
DECR key 將 key 中儲存的數字值減一。
DECRBY key decrement key 所儲存的值減去給定的減量值(decrement) 。
APPEND key value 如果 key 已經存在並且是一個字串, APPEND 命令將 value 追加到 key 原來的值的末尾。

Hash

hash特別適合用於儲存物件

命令描述
HDEL key field1 [field2] 刪除一個或多個雜湊表字段
HEXISTS key field 檢視雜湊表 key 中,指定的欄位是否存在。
HGET key field 獲取儲存在雜湊表中指定欄位的值
HGETALL key 獲取在雜湊表中指定 key 的所有欄位和值
HMGET key field1 [field2] 獲取所有給定欄位的值
HINCRBY key field increment 為雜湊表 key 中的指定欄位的整數值加上增量 increment
HINCRBYFLOAT key field increment 為雜湊表 key 中的指定欄位的浮點數值加上增量 increment
HKEYS key 獲取所有雜湊表中的欄位
HLEN key 獲取雜湊表中欄位的數量
HSET key field value 將雜湊表 key 中的欄位 field 的值設為 value
HSETNX key field value 只有在欄位 field 不存在時,設定雜湊表字段的值
HMSET key field1 value1 [field2 value2 ] 同時將多個 field-value (域-值)對設定到雜湊表 key 中
HVALS key 獲取雜湊表中所有值
HSCAN key cursor [MATCH pattern] [COUNT count] 迭代雜湊表中的鍵值對

List

新增一個元素導列表的頭部(左邊)或者尾部(右邊)

命令描述
LPOP key 移出並獲取列表的第一個元素
RPOP key 移除並獲取列表最後一個元素
LPUSH key value1 [value2] 將一個或多個值插入到列表頭部
RPUSH key value1 [value2] 在列表中新增一個或多個值
BLPOP key1 [key2 ] timeout 移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
BRPOP key1 [key2 ] timeout 移出並獲取列表的最後一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
LPUSHX key value 將一個或多個值插入到已存在的列表頭部
RPUSHX key value 為已存在的列表新增值
RPOPLPUSH source destination 移除列表的最後一個元素,並將該元素新增到另一個列表並返回
BRPOPLPUSH source destination timeout 從列表中彈出一個值,將彈出的元素插入到另外一個列表中並返回它; 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
LINDEX key index 通過索引獲取列表中的元素
LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者後插入元素
LLEN key 獲取列表長度
LRANGE key start stop 獲取列表指定範圍內的元素
LREM key count value 移除列表元素
LSET key index value 通過索引設定列表元素的值
LTRIM key start stop 對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。

Set

Set是string型別的無序集合。集合成員是唯一的,這就意味著集合中不能出現重複的資料。

命令描述
SADD key member1 [member2] 向集合新增一個或多個成員
SCARD key 獲取集合的成員數
SDIFF key1 [key2] 返回給定所有集合
SDIFFSTORE destination key1 [key2] 返回給定所有集合的差集並存儲在 destination 中
SINTER key1 [key2] 返回給定所有集合的交集
SINTERSTORE destination key1 [key2] 返回給定所有集合的交集並存儲在 destination 中
SISMEMBER key member 判斷 member 元素是否是集合 key 的成員
SMEMBERS key 返回集合中的所有成員
SMOVE source destination member 將 member 元素從 source 集合移動到 destination 集合
SPOP key 移除並返回集合中的一個隨機元素
SRANDMEMBER key [count] 返回集合中一個或多個隨機數
SREM key member1 [member2] 移除集合中一個或多個成員
SUNION key1 [key2] 返回所有給定集合的並集
SUNIONSTORE destination key1 [key2] 所有給定集合的並集儲存在 destination 集合中
SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素

Sorted Set

有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。

命令描述
ZADD key score1 member1 [score2 member2] 向有序集合新增一個或多個成員,或者更新已存在成員的分數
ZCARD key 獲取有序集合的成員數
ZCOUNT key min max 計算在有序集合中指定區間分數的成員數
ZINCRBY key increment member 有序集合中對指定成員的分數加上增量 increment
ZINTERSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的交集並將結果集儲存在新的有序集合 key 中
ZLEXCOUNT key min max 在有序集合中計算指定字典區間內成員數量
ZRANGE key start stop [WITHSCORES] 通過索引區間返回有序集合成指定區間內的成員
ZRANGEBYLEX key min max [LIMIT offset count] 通過字典區間返回有序集合的成員
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通過分數返回有序集合指定區間內的成員
ZRANK key member 返回有序集合中指定成員的索引
ZREM key member [member ...] 移除有序集合中的一個或多個成員
ZREMRANGEBYLEX key min max 移除有序集合中給定的字典區間的所有成員
ZREMRANGEBYRANK key start stop 移除有序集合中給定的排名區間的所有成員
ZREMRANGEBYSCORE key min max 移除有序集合中給定的分數區間的所有成員
ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定區間內的成員,通過索引,分數從高到底
ZREVRANGEBYSCORE key max min [WITH SCORES] 返回有序集中指定分數區間內的成員,分數從高到低排序
ZREVRANK key member 返回有序集合中指定成員的排名,有序整合員按分數值遞減(從大到小)排序
ZSCORE key member 返回有序集中,成員的分數值
ZUNIONSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的並集,並存儲在新的 key 中
ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成員和元素分值)

Stream

主要用於訊息佇列(MQ,Message Queue),Redis 本身是有一個 Redis 釋出訂閱 (pub/sub) 來實現訊息佇列的功能,但它有個缺點就是訊息無法持久化。而 Redis Stream 提供了訊息的持久化和主備複製功能,可以讓任何客戶端訪問任何時刻的資料,並且能記住每一個客戶端的訪問位置,還能保證訊息不丟失。

命令描述
XADD 新增訊息到末尾
XTRIM 對流進行修剪,限制長度
XDEL 刪除訊息
XLEN 獲取流包含的元素數量,即訊息長度
XRANGE 獲取訊息列表,會自動過濾已經刪除的訊息
XREVRANGE 反向獲取訊息列表,ID 從大到小
XREAD 以阻塞或非阻塞方式獲取訊息列表
XGROUP CREATE 建立消費者組
XREADGROUP GROUP 讀取消費者組中的訊息
XACK 將訊息標記為"已處理"
XGROUP SETID 為消費者組設定新的最後遞送訊息ID
XGROUP DELCONSUMER 刪除消費者
XGROUP DESTROY 刪除消費者組
XPENDING 顯示待處理訊息的相關資訊
XCLAIM 轉移訊息的歸屬權
XINFO 檢視流和消費者組的相關資訊;
XINFO GROUPS 列印消費者組的資訊;
XINFO STREAM 列印流資訊

HyperLogLog

用來做基數統計的演算法

優點:在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的,並且是很小的。

一般使用:

  • 統計註冊 IP 數

  • 統計每日訪問 IP 數

  • 統計頁面實時 UV 數

  • 統計線上使用者數

  • 統計使用者每天搜尋不同詞條的個數

什麼是基數?

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

命令描述
PFADD key element [element ...] 新增指定元素到 HyperLogLog 中。
PFCOUNT key [key ...] 返回給定 HyperLogLog 的基數估算值。
PFMERGE destkey sourcekey [sourcekey ...] 將多個 HyperLogLog 合併為一個 HyperLogLog

釋出訂閱

一種訊息通訊模式:傳送者(pub)傳送訊息,訂閱者(sub)接收訊息。

命令描述
PSUBSCRIBE pattern [pattern ...] 訂閱一個或多個符合給定模式的頻道。
PUBSUB subcommand [argument [argument ...]] 檢視訂閱與釋出系統狀態。
PUBLISH channel message 將資訊傳送到指定的頻道。
PUNSUBSCRIBE [pattern [pattern ...]] 退訂所有給定模式的頻道。
SUBSCRIBE channel [channel ...] 訂閱給定的一個或多個頻道的資訊。(建立頻道)
UNSUBSCRIBE [channel [channel ...]] 指退訂給定的頻道。

事務

隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。

原子操作:事務中的命令要麼全部被執行,要麼全部都不執行。

三個階段:

  • 開始事務。MULTI

  • 命令入隊。

  • 執行事務。EXEC

命令描述
DISCARD 取消事務,放棄執行事務塊內的所有命令。
EXEC 執行所有事務塊內的命令。
MULTI 標記一個事務塊的開始。
UNWATCH 取消 WATCH 命令對所有 key 的監視。
WATCH key [key ...] 監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷。


其他命令

命令描述
BGREWRITEAOF 非同步執行一個 AOF(AppendOnly File) 檔案重寫操作
SAVE 非同步儲存資料到硬碟(備份,將rdb檔案移動到安裝目錄並重啟服務集合恢復)
BGSAVE 在後臺非同步儲存當前資料庫的資料到磁碟
CLIENT KILL [ip:port] [ID client-id] 關閉客戶端連線
CLIENT LIST 獲取連線到伺服器的客戶端連線列表
CLIENT GETNAME 獲取連線的名稱
CLIENT PAUSE timeout 在指定時間內終止執行來自客戶端的命令
CLIENT SETNAME connection-name 設定當前連線的名稱
CLUSTER SLOTS 獲取叢集節點的對映陣列
COMMAND 獲取 Redis 命令詳情陣列
COMMAND COUNT 獲取 Redis 命令總數
COMMAND GETKEYS 獲取給定命令的所有鍵
TIME 返回當前伺服器時間
COMMAND INFO command-name [command-name ...] 獲取指定 Redis 命令描述的陣列
CONFIG GET parameter 獲取指定配置引數的值
CONFIG REWRITE 對啟動 Redis 伺服器時所指定的 redis.conf 配置檔案進行改寫
CONFIG SET parameter value 修改 redis 配置引數,無需重啟
CONFIG RESETSTAT 重置 INFO 命令中的某些統計資料
DBSIZE 返回當前資料庫的 key 的數量
DEBUG OBJECT key 獲取 key 的除錯資訊
DEBUG SEGFAULT 讓 Redis 服務崩潰
FLUSHALL 刪除所有資料庫的所有key
FLUSHDB 刪除當前資料庫的所有key
INFO [section] 獲取 Redis 伺服器的各種資訊和統計數值
LASTSAVE 返回最近一次 Redis 成功將資料儲存到磁碟上的時間,以 UNIX 時間戳格式表示
MONITOR 實時打印出 Redis 伺服器接收到的命令,除錯用
ROLE 返回主從例項所屬的角色
SHUTDOWN [NOSAVE] [SAVE] 非同步儲存資料到硬碟,並關閉伺服器
SLAVEOF host port 將當前伺服器轉變為指定伺服器的從屬伺服器(slave server)
SLOWLOG subcommand [argument] 管理 redis 的慢日誌
SYNC 用於複製功能(replication)的內部命令