做門戶網(wǎng)站源碼上海網(wǎng)絡(luò)推廣平臺
1.什么是Redis?
答:Remote Dictionary Server(Redis)是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。
它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因為值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
2.Redis的特點(diǎn)什么是?
支持多種數(shù)據(jù)結(jié)構(gòu),如 string(字符串)、 list(雙向鏈表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基數(shù)估算)
支持持久化操作,可以進(jìn)行aof及rdb數(shù)據(jù)持久化到磁盤,從而進(jìn)行數(shù)據(jù)備份或數(shù)據(jù)恢復(fù)等操作,較好的防止數(shù)據(jù)丟失的手段。
支持通過Replication進(jìn)行數(shù)據(jù)復(fù)制,通過master-slave機(jī)制,可以實(shí)時進(jìn)行數(shù)據(jù)的同步復(fù)制,支持多級復(fù)制和增量復(fù)制,master-slave機(jī)制是Redis進(jìn)行HA的重要手段。
單進(jìn)程請求,所有命令串行執(zhí)行,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問題。
3.Redis數(shù)據(jù)類型有哪些?
答:String(字符串)
Hash(hash表)
List(鏈表)
Set(集合)
SortedSet(有序集合zset)
4.Redis中的常用命令哪些?
incr 讓當(dāng)前鍵值以1的數(shù)量遞增,并返回遞增后的值
incrby 可以指定參數(shù)一次增加的數(shù)值,并返回遞增后的值
incrby 可以指定參數(shù)一次增加的數(shù)值,并返回遞增后的值
decrby 可以指定參數(shù)一次遞減的數(shù)值,并返回遞減后的值
incrbyfloat 可以遞增一個雙精度浮點(diǎn)數(shù)
append 作用是向鍵值的末尾追加value。如果鍵不存在則將該鍵的值設(shè)置為value。返回值是追加后字符串的總長度。
mget/mset 作用與get/set相似,不過mget/mset可以同時獲得/設(shè)置多個鍵的鍵值
del 根據(jù)key來刪除value
flushdb 清除當(dāng)前庫的所有數(shù)據(jù)
hset 存儲一個哈希鍵值對的集合
hget獲取一個哈希鍵的值
hmset 存儲一個或多個哈希是鍵值對的集合
hmget 獲取多個指定的鍵的值
hexists 判斷哈希表中的字段名是否存在 如果存在返回1 否則返回0
hdel 刪除一個或多個字段
hgetall 獲取一個哈希是鍵值對的集合
hvals 只返回字段值
hkeys 只返回字段名
hlen 返回key的hash的元素個數(shù)
lpush key value向鏈表左側(cè)添加
rpush key value向鏈表右側(cè)添加
lpop key 從左邊移出一個元素
rpop key 從右邊移出一個元素
llen key 返回鏈表中元素的個數(shù) 相當(dāng)于關(guān)系型數(shù)據(jù)庫中 select count()
lrange key start end lrange命令將返回索引從start到stop之間的所有元素。Redis的列表起始索引為0。
lrange也支持負(fù)索引 lrange nn -2 -1 如 -1表示最右邊第一個元素 -2表示最右邊第二個元素,依次類推。
lindex key indexnumber 如果要將列表類型當(dāng)做數(shù)組來用,lindex命令是必不可少的。lindex命令用來返回指定索引的元素,索引從0開始
如果是負(fù)數(shù)表示從右邊開始計算的索引,最右邊元素的索引是-1。
Lset key indexnumber value 是另一個通過索引操作列表的命令,它會將索引為index的元素賦值為value。
sadd key value 添加一個string元素到,key對應(yīng)的set集合中,成功返回1,如果元素已經(jīng)在集合中返回0
scard key 返回set的元素個數(shù),如果set是空或者key不存在返回0
smembers key 返回key對應(yīng)set的所有元素,結(jié)果是無序的
sismember key value 判斷value 是否在set中,存在返回1,0表示不存在或者key不存在
srem key value 從key對應(yīng)set中移除給定元素,成功返回1,如果value 在集合中不存在或者key不存在返回0
zadd key score value 將一個或多個value及其socre加入到set中
zrange key start end 0和-1表示從索引為0的元素到最后一個元素(同LRANGE命令相似)
zrange key 0 -1 withscores 也可以連同score一塊輸出,使用WITHSCORES參數(shù)
zremrangebyscore key start end 可用于范圍刪除操作
ping 測試redis是否鏈接 如果已鏈接返回 PONG
echo value測試redis是否鏈接 如果已鏈接返回 echo命令后給定的值
keys * 返回所有的key 可以加通配
exists key判斷string類型一個key是否存在 如果存在返回1 否則返回0
expire key time(s) 設(shè)置一個key的過期時間 單位秒。時間到達(dá)后會刪除key及value
ttl key 查詢已設(shè)置過期時間的key的剩余時間 如果返回-2表示該鍵值對已經(jīng)被刪除
persist 移除給定key的過期時間
select dbindex 選擇數(shù)據(jù)庫(0-15)
move key dbIndex 將當(dāng)前數(shù)據(jù)庫中的key轉(zhuǎn)移到其他數(shù)據(jù)庫中
dbsize 返回當(dāng)前數(shù)據(jù)庫中的key的數(shù)目
info 獲取服務(wù)器的信息和統(tǒng)計
flushdb 刪除當(dāng)前選擇的數(shù)據(jù)庫中的key
flushall 刪除所有數(shù)據(jù)庫中的所有key
quit 退出連接
5.Redis的配置以及持久化方案有幾種?
以下兩種
RDB方式
AOF方式
什么是RDB方式?
是RDB是對內(nèi)存中數(shù)據(jù)庫狀態(tài)進(jìn)行快照
RDB方式:將Redis在內(nèi)存中的數(shù)據(jù)庫狀態(tài)保存到磁盤里面,RDB文件是一個經(jīng)過壓縮的二進(jìn)制文件,通過該文件可以還原生成RDB文件時的數(shù)據(jù)庫狀態(tài)(默認(rèn)下,持久化到dump.rdb文件,并且在redis重啟后,自動讀取其中文件,據(jù)悉,通常情況下一千萬的字符串類型鍵,1GB的快照文件,同步到內(nèi)存中的 時間是20-30秒)
RDB的生成方式:
1、執(zhí)行命令手動生成
有兩個Redis命令可以用于生成RDB文件,一個是SAVE,另一個是BGSAVE SAVE命令會阻塞Redis服務(wù)器進(jìn)程,直到RDB文件創(chuàng)建完畢為止,在服務(wù)器進(jìn)程阻塞期間,服務(wù)器不能處理任何命令請求,BGSAVE命令會派生出一個子進(jìn)程,然后由子進(jìn)程負(fù)責(zé)創(chuàng)建RDB文件,服務(wù)器進(jìn)程(父進(jìn)程)繼續(xù)處理命令請求,創(chuàng)建RDB文件結(jié)束之前,客戶端發(fā)送的BGSAVE和SAVE命令會被服務(wù)器拒絕
2、通過配置自動生成
可以設(shè)置服務(wù)器配置的save選項,讓服務(wù)器每隔一段時間自動執(zhí)行一次BGSAVE命令,可以通過save選項設(shè)置多個保存條件,但只要其中任意一個條件被滿足,服務(wù)器就會執(zhí)行BGSAVE命令
例如:
save 900 1
save 300 10
save 60 10000
那么只要滿足以下三個條件中的任意一個,BGSAVE命令就會被執(zhí)行
服務(wù)器在900秒之內(nèi),對數(shù)據(jù)庫進(jìn)行了至少1次修改
服務(wù)器在300秒之內(nèi),對數(shù)據(jù)庫進(jìn)行了至少10次修改
服務(wù)器在60秒之內(nèi),對數(shù)據(jù)庫進(jìn)行了至少10000次修改
什么是AOF方式?
AOF持久化方式在redis中默認(rèn)是關(guān)閉的,需要修改配置文件開啟該方式。
AOF:把每條命令都寫入文件,類似mysql的binlog日志
AOF方式:是通過保存Redis服務(wù)器所執(zhí)行的寫命令來記錄數(shù)據(jù)庫狀態(tài)的文件。
AOF文件刷新的方式,有三種:
appendfsync always - 每提交一個修改命令都調(diào)用fsync刷新到AOF文件,非常非常慢,但也非常安全
appendfsync everysec - 每秒鐘都調(diào)用fsync刷新到AOF文件,很快,但可能會丟失一秒以內(nèi)的數(shù)據(jù)
appendfsync no - 依靠OS進(jìn)行刷新,redis不主動刷新AOF,這樣最快,但安全性就差
默認(rèn)并推薦每秒刷新,這樣在速度和安全上都做到了兼顧
AOF數(shù)據(jù)恢復(fù)方式
服務(wù)器在啟動時,通過載入和執(zhí)行AOF文件中保存的命令來還原服務(wù)器關(guān)閉之前的數(shù)據(jù)庫狀態(tài),具體過程:
載入AOF文件
創(chuàng)建模擬客戶端
從AOF文件中讀取一條命令
使用模擬客戶端執(zhí)行命令
循環(huán)讀取并執(zhí)行命令,直到全部完成
如果同時啟用了RDB和AOF方式,AOF優(yōu)先,啟動時只加載AOF文件恢復(fù)數(shù)據(jù)