Redis是一個開源的使用ANSI C語言編寫、基於內存的Key-Value數據庫。mysql
它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。redis
Redis支持主從同步,數據能夠從主服務器向任意數量的從服務器上同步,因爲徹底實現了發佈/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈記錄。算法
1. redis原生支持的數據類型更多。
2. redis具備持久化機制,能夠按期將內存中的數據持久化到硬盤上。
3. redis支持master-slave模式的數據備份。sql
4. 性能。Redis做者的說法是平均到單個核上的性能,在單條數據不大的狀況下Redis更好。數據庫
爲何這麼說呢,理由就是Redis是單線程運行的。由於是單線程運行,因此和Memcached的多線程相比,總體性能確定會偏低。由於是單線程運行,因此IO是串行化的,網絡IO和內存IO,所以當單條數據太大時,因爲須要等待一個命令的全部IO完成才能進行後續的命令,因此性能會受影響。centos
1
2
|
# yum install epel-release (centos 7能夠直接安裝epel源)
# yum install redis
|
1
2
3
4
|
# redis-server /etc/redis.conf
# systemctl start redis
# systemctl stop redis
|
鏈接到Redisbash
1
2
|
# redis-cli -p port
# redis-cli
|
ping服務器
1
|
127.0.0.1:6379>
ping
<br>PONG
|
設置鍵值網絡
1
2
|
127.0.0.1:6379>
set
testkey "hello"
OK
|
查詢鍵多線程
1
2
|
127.0.0.1:6379> get testkey
"hello"
|
刪除鍵
1
2
|
127.0.0.1:6379> del testkey
(integer) 1
|
設定有效期限
1
2
|
127.0.0.1:6379> setex
test
10 111
OK
|
用EXPIRE key s 設定過時時間 毫秒用PEXPIRE
1
2
|
127.0.0.1:6379> EXPIRE test11 300
(integer) 1
|
用TTL key 查看過時時間 毫秒用PTTL
1
2
|
127.0.0.1:6379> TTL test11
(integer) 288
|
用PERSIST key 取消過時時間
1
2
|
127.0.0.1:6379> PERSIST test11
(integer) 1
|
1
2
3
4
5
6
7
8
|
127.0.0.1:6379>
set
counter 100
OK
127.0.0.1:6379> incr counter
(integer) 101
127.0.0.1:6379> incr counter
(integer) 102
127.0.0.1:6379> decr counter
(integer) 101
|
1
2
3
4
5
6
7
8
9
10
11
12
|
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379>
set
test11 111111
QUEUED
127.0.0.1:6379>
set
test12 121212
QUEUED
127.0.0.1:6379> incr counter
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
3) (integer) 102
|
Redis 在 2.8.9 版本添加了 HyperLogLog 算法。
Redis 發佈訂閱(pub/sub)是一種消息通訊模式:發送者(pub)發送消息,訂閱者(sub)接收消息。Redis 客戶端能夠訂閱任意數量的頻道。
在一個客戶端訂閱頻道 redisChat
1
2
3
4
5
|
127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1)
"subscribe"
2)
"redisChat"
3) (integer) 1
|
在另外一個客戶端,發送消息到頻道 redisChat,訂閱者就能接收到消息
發佈端:
1
2
|
127.0.0.1:6379> PUBLISH redisChat
"redis haha"
(integer) 1
|
訂閱端:
1
2
3
4
5
6
7
8
|
127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1)
"subscribe"
2)
"redisChat"
3) (integer) 1
1)
"message"
2)
"redisChat"
3)
"redis haha"
|
1
|
127.0.0.1:6379> info
|
info輸出的信息不少,能夠指定輸出的部分
1
|
127.0.0.1:6379> info stats
|
1
|
127.0.0.1:6379> info memory
|
used_memory : 由 Redis 分配器分配的內存總量,以字節(byte)爲單位。
used_memory_rss : 從操做系統的角度,返回 Redis 已分配的內存總量(俗稱常駐集大小)。這個值和 top 、 ps等命令的輸出一致。
rss > used ,且二者的值相差較大時,表示存在(內部或外部的)內存碎片。
內存碎片的比率能夠經過 mem_fragmentation_ratio 的值看出。
used > rss 時,表示 Redis 的部份內存被操做系統換出到交換空間了,在這種狀況下,操做可能會產生明顯的延遲。
used_memory_peak : 峯值,設定的最大內存要大於峯值
查看記錄數
1
|
127.0.0.1:6379> dbsize
|
查看全部KEY
1
|
127.0.0.1:6379> KEYS *
|
列出全部客戶端鏈接
1
|
127.0.0.1:6379> CLIENT LIST
|
關閉ip:port的客戶端
1
|
127.0.0.1:6379> CLIENT KILL 127.0.0.1:11902
|
清空全部數據庫的全部key
1
|
127.0.0.1:6379> FLUSHALL
|
清空當前數據庫中全部key
1
|
127.0.0.1:6379> FLUSHDB
|
返回最後一次成功保存數據到磁盤的時間,以UNIX時間戳格式表示
1
|
127.0.0.1:6379> LASTSAVE
|
返回當前服務器時間,以UNIX時間戳格式表示
1
|
127.0.0.1:6379> TIME
|
鏈接到其餘數據庫(默認數據庫是0)
1
2
|
127.0.0.1:6379> SELECT 1
OK
|
將當前數據庫的 key 移動到指定的數據庫
1
2
|
127.0.0.1:6379> MOVE test2 1
(integer) 1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
daemonize no 是否之後臺daemon方式運行
timeout 0 請求超時時間
maxclients 10000 最大鏈接數
maxmemory <bytes> 最大內存
maxmemory-policy volatile-lru 達到最大內存時的LRU驅逐策略
maxmemory-samples 3 隨機抽取n個key執行LRU
hash
-max-ziplist-entries 512 Map內部不超過多少個成員時會採用線性緊湊格式存儲
hash
-max-ziplist-value 64 Map內成員值長度不超過多少字節會採用線性緊湊格式存儲
相似的還有,list-max-ziplist-entries 512,list-max-ziplist-value 64等等
slowlog-log-slower-than 10000 slow log計入時間,microseconds(1000000)
slowlog-max-len 128 slow log計入條數
|
1
2
3
|
127.0.0.1:6379> config get maxclients
1)
"maxclients"
2)
"10000"
|
運行過程當中調整參數
1
|
127.0.0.1:6379> config
set
maxclients 10001
|
1
2
3
4
5
6
|
127.0.0.1:6379> SLOWLOG get
127.0.0.1:6379> SLOWLOG get 10
1) 1) (integer) 0
2) (integer) 1448413479
3) (integer) 124211
4) 1)
"FLUSHALL"
|
確認slow log條數設定
1
|
127.0.0.1:6379> SLOWLOG len
|
清空slow log
1
|
127.0.0.1:6379> SLOWLOG reset
|
1
2
3
4
|
save <seconds> <changes> 開啓快照,並設定保存快照到硬盤的頻率
rdbcompression
yes
/no
保存快照的時候,是否壓縮
dbfilename dump.rdb 指定快照的文件名(Append Only File也保存在此)
dir
/var/lib/redis/ 指定快照存放的場所
|
在命令行執行save或bgsave命令
1
2
|
127.0.0.1:6379> SAVE
OK
|
相似於mysql的binlog,將操做都記錄在log裏。快照達不到要求保存的精度時,和快照結合使用,不建議單獨使用。默認間隔是1秒,能夠修改。
1
2
3
4
|
appendonly
yes
開啓Append Only File
appendfilename
"appendonly.aof"
指定日誌文件名
appendfsync always
/everysec/no
指定寫日誌的頻率
no-appendfsync-on-rewrite no 當有bgsave等其餘進程執行fsync()時,AOF和appendfsync none動做同樣
|
要恢復Redis的數據只需移動 Redis 的備份文件(dump.rdb,appendonly.aof)到 Redis 目錄,而後啓動服務器。
爲了獲得你的 Redis 目錄,使用命令以下所示:
1
2
3
|
127.0.0.1:6379> config get
dir
1)
"dir"
2)
"/var/lib/redis"
|
本文簡單介紹了Redis的安裝及使用,接下來介紹主從同步,負荷分散。