一惨恭、redis是什么?
redis是一個高性能的key-value數(shù)據(jù)庫,支持string,list,set,zset,hash五種數(shù)據(jù)結(jié)構(gòu)蜡娶,操作是原子性的欣硼,基于內(nèi)存存儲题翰,同時也支持數(shù)據(jù)持久化,在持久化數(shù)據(jù)文件存儲基礎(chǔ)上實現(xiàn)了master-slave同步诈胜。
二豹障、redis能干什么?
- 減輕關(guān)系型數(shù)據(jù)庫壓力
- 驗證碼
- token
- 分布式鎖
三焦匈、為什么高可用血公?
- 主從復(fù)制(讀寫分離、備份)
- 哨兵機制(監(jiān)聽缓熟,master宕機累魔,在slave中選舉出一臺新master)
- 持久化(避免停機后內(nèi)存數(shù)據(jù)丟失,提供dbf和aof兩種方式備份够滑,可用于停機后再重啟時的數(shù)據(jù)恢復(fù))
四垦写、redis怎么干?
- 安裝
官方最新版下載地址,本次安裝版本為:redis-5.0.7彰触,安裝啟動步驟梯投,打開鏈接,官方有安裝况毅、服務(wù)啟動分蓖、服務(wù)連接命令 - redis.conf配置文件介紹
5.0.7版本的配置文件就在編譯后的根目錄redis-5.0.7下,啟動redis時尔许,必須指定加載的配置文件才會生效么鹤,否則按默認配置啟動。
src/redis-server /usr/local/redis-5.0.7/redis.conf
# 指定redis綁定的主機地址母债,0.0.0.0表示不對客戶端ip做限制午磁,任何客戶端可連接
bind 0.0.0.0
#保護模式,如果未開啟毡们,客戶端無法連接connect refused
protected-mode yes
# 指定訪問redis服務(wù)端的端口
port 6680
tcp-backlog 511
# 指定客戶端連接redis服務(wù)器時迅皇,當(dāng)閑置的時間為多少(如300)時,關(guān)閉連接
timeout 0
tcp-keepalive 300
#修改為yes 后臺啟動:命令啟動redis后衙熔,ctrl + c不會停止服務(wù)
daemonize yes
supervised no
pidfile /home/db/redis/logs/redis_6680.pid
loglevel notice
logfile /home/db/redis/logs/redis6680.log
databases 16
always-show-logo yes
#指定redis數(shù)據(jù)庫多長時間內(nèi)(s)有多少次(c)更新操作時就把緩存中的數(shù)據(jù)同步到本地庫登颓,比如:save 600 2,指的是10分鐘內(nèi)有2次更新操作红氯,就同步到本地庫
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump6696.rdb
# 指定redis本地數(shù)據(jù)文件存放的目錄
dir /home/db/redis/var
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
# 指定redis的訪問密碼
requirepass root123
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
# 指定redis是否開啟日志記錄功能框咙,由于redis是利用什么save命令異步的方式更新數(shù)據(jù)到本地庫咕痛,所以不開啟日志記錄功能,可能會導(dǎo)致在出現(xiàn)生產(chǎn)事故時喇嘱,導(dǎo)致部分數(shù)據(jù)未更新到本地庫
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
# 指定內(nèi)存
maxmemory 4294967296
- 常用命令
TYPE key — 用來獲取某key的類型
KEYS pattern — 匹配所有符合模式的key茉贡,比如KEYS * 就列出所有的key了,當(dāng)然者铜,復(fù)雜度O(n)
RANDOMKEY - 返回隨機的一個key
RENAME oldkey newkey — key也可以改名
列表操作腔丧,精華
RPUSH key string — 將某個值加入到一個key列表末尾
LPUSH key string — 將某個值加入到一個key列表頭部
LLEN key — 列表長度
LRANGE key start end — 返回列表中某個范圍的值,相當(dāng)于mysql里面的 分頁 查詢那樣
LTRIM key start end — 只保留列表中某個范圍的值
LINDEX key index — 獲取列表中特定索引號的值作烟,要注意是O(n)復(fù)雜度
LSET key index value — 設(shè)置列表中某個位置的值
LPOP key
RPOP key — 和上面的LPOP一樣愉粤,就是類似棧或隊列的那種取頭取尾指令拿撩,可以當(dāng)成消息隊列來使用了
集合操作
SADD key member — 增加元素
SREM key member — 刪除元素
SCARD key — 返回集合大小
SISMEMBER key member — 判斷某個值是否在集合中
SINTER key1 key2 ... keyN — 獲取多個集合的交集元素
SMEMBERS key — 列出集合的所有元素
還有Multiple DB的命令衣厘,可以更換db,數(shù)據(jù)可以隔離開压恒,默認是存放在DB 0
hash操作
HDEL key field2 [field2]
刪除一個或多個哈希表字段
HEXISTS key field
查看哈希表 key 中影暴,指定的字段是否存在。
HGET key field
獲取存儲在哈希表中指定字段的值涎显。
HGETALL key
獲取在哈希表中指定 key 的所有字段和值
HINCRBY key field increment
為哈希表 key 中的指定字段的整數(shù)值加上增量 increment 坤检。
HINCRBYFLOAT key field increment
為哈希表 key 中的指定字段的浮點數(shù)值加上增量 increment 。
HKEYS key
獲取所有哈希表中的字段
HLEN key
獲取哈希表中字段的數(shù)量
HMGET key field1 [field2]
獲取所有給定字段的值
HMSET key field1 value1 [field2 value2 ]
同時將多個 field-value (域-值)對設(shè)置到哈希表 key 中期吓。
HSET key field value
將哈希表 key 中的字段 field 的值設(shè)為 value 早歇。
HSETNX key field value
只有在字段 field 不存在時,設(shè)置哈希表字段的值讨勤。
HVALS key
獲取哈希表中所有值
HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的鍵值對箭跳。