Redis面試題大全含答案


Redis面試題大全含答案

Redis面試題大全含答案

1.什么是Redis?
答:Remote Dictionary Server(Redis)是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日志型、Key-Value數據庫,並提供多種語言的API。
它通常被稱為數據結構服務器,因為值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。

2.Redis的特點什么是?
1. 支持多種數據結構,如 string(字符串)、 list(雙向鏈表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基數估算)
2. 支持持久化操作,可以進行aof及rdb數據持久化到磁盤,從而進行數據備份或數據恢復等操作,較好的防止數據丟失的手段。
3. 支持通過Replication進行數據復制,通過master-slave機制,可以實時進行數據的同步復制,支持多級復制和增量復制,master-slave機制是Redis進行HA的重要手段。
單進程請求,所有命令串行執行,並發情況下不需要考慮數據一致性問題。

3.Redis數據類型有哪些?
答:String(字符串)
Hash(hash表)
List(鏈表)
Set(集合)
SortedSet(有序集合zset)

4.Redis中的常用命令哪些?
incr 讓當前鍵值以1的數量遞增,並返回遞增后的值
incrby 可以指定參數一次增加的數值,並返回遞增后的值
incrby 可以指定參數一次增加的數值,並返回遞增后的值
decrby 可以指定參數一次遞減的數值,並返回遞減后的值
incrbyfloat 可以遞增一個雙精度浮點數
append 作用是向鍵值的末尾追加value。如果鍵不存在則將該鍵的值設置為value。返回值是追加后字符串的總長度。
mget/mset 作用與get/set相似,不過mget/mset可以同時獲得/設置多個鍵的鍵值
del 根據key來刪除value
flushdb 清除當前庫的所有數據
hset 存儲一個哈希鍵值對的集合
hget獲取一個哈希鍵的值
hmset 存儲一個或多個哈希是鍵值對的集合
hmget 獲取多個指定的鍵的值
hexists 判斷哈希表中的字段名是否存在 如果存在返回1 否則返回0
hdel 刪除一個或多個字段
hgetall 獲取一個哈希是鍵值對的集合
hvals 只返回字段值
hkeys 只返回字段名
hlen 返回key的hash的元素個數
lpush key value向鏈表左側添加
rpush key value向鏈表右側添加
lpop key 從左邊移出一個元素
rpop key 從右邊移出一個元素
llen key 返回鏈表中元素的個數 相當於關系型數據庫中 select count(*)
lrange key start end lrange命令將返回索引從start到stop之間的所有元素。Redis的列表起始索引為0。
lrange也支持負索引 lrange nn -2 -1 如 -1表示最右邊第一個元素 -2表示最右邊第二個元素,依次類推。
lindex key indexnumber 如果要將列表類型當做數組來用,lindex命令是必不可少的。lindex命令用來返回指定索引的元素,索引從0開始
如果是負數表示從右邊開始計算的索引,最右邊元素的索引是-1。
Lset key indexnumber value 是另一個通過索引操作列表的命令,它會將索引為index的元素賦值為value。
sadd key value 添加一個string元素到,key對應的set集合中,成功返回1,如果元素已經在集合中返回0
scard key 返回set的元素個數,如果set是空或者key不存在返回0
smembers key 返回key對應set的所有元素,結果是無序的
sismember key value 判斷value 是否在set中,存在返回1,0表示不存在或者key不存在
srem key value 從key對應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參數
zremrangebyscore key start end 可用於范圍刪除操作
ping 測試redis是否鏈接 如果已鏈接返回 PONG
echo value測試redis是否鏈接 如果已鏈接返回 echo命令后給定的值
keys * 返回所有的key 可以加*通配
exists key判斷string類型一個key是否存在 如果存在返回1 否則返回0
expire key time(s) 設置一個key的過期時間 單位秒。時間到達后會刪除key及value
ttl key 查詢已設置過期時間的key的剩余時間 如果返回-2表示該鍵值對已經被刪除
persist 移除給定key的過期時間
select dbindex 選擇數據庫(0-15)
move key dbIndex 將當前數據庫中的key轉移到其他數據庫中
dbsize 返回當前數據庫中的key的數目
info 獲取服務器的信息和統計
flushdb 刪除當前選擇的數據庫中的key
flushall 刪除所有數據庫中的所有key
quit 退出連接

5.Redis的配置以及持久化方案有幾種?
以下兩種
RDB方式
AOF方式

什么是RDB方式?
是RDB是對內存中數據庫狀態進行快照
RDB方式:將Redis在內存中的數據庫狀態保存到磁盤里面,RDB文件是一個經過壓縮的二進制文件,通過該文件可以還原生成RDB文件時的數據庫狀態(默認下,持久化到dump.rdb文件,並且在redis重啟后,自動讀取其中文件,據悉,通常情況下一千萬的字符串類型鍵,1GB的快照文件,同步到內存中的 時間是20-30秒)
RDB的生成方式:
1、執行命令手動生成
有兩個Redis命令可以用於生成RDB文件,一個是SAVE,另一個是BGSAVE SAVE命令會阻塞Redis服務器進程,直到RDB文件創建完畢為止,在服務器進程阻塞期間,服務器不能處理任何命令請求,BGSAVE命令會派生出一個子進程,然后由子進程負責創建RDB文件,服務器進程(父進程)繼續處理命令請求,創建RDB文件結束之前,客戶端發送的BGSAVE和SAVE命令會被服務器拒絕

2、通過配置自動生成
可以設置服務器配置的save選項,讓服務器每隔一段時間自動執行一次BGSAVE命令,可以通過save選項設置多個保存條件,但只要其中任意一個條件被滿足,服務器就會執行BGSAVE命令
例如:
save 900 1
save 300 10
save 60 10000
那么只要滿足以下三個條件中的任意一個,BGSAVE命令就會被執行
服務器在900秒之內,對數據庫進行了至少1次修改
服務器在300秒之內,對數據庫進行了至少10次修改
服務器在60秒之內,對數據庫進行了至少10000次修改

什么是AOF方式?
AOF持久化方式在redis中默認是關閉的,需要修改配置文件開啟該方式。
AOF:把每條命令都寫入文件,類似mysql的binlog日志
AOF方式:是通過保存Redis服務器所執行的寫命令來記錄數據庫狀態的文件。
AOF文件刷新的方式,有三種:
appendfsync always - 每提交一個修改命令都調用fsync刷新到AOF文件,非常非常慢,但也非常安全
appendfsync everysec - 每秒鍾都調用fsync刷新到AOF文件,很快,但可能會丟失一秒以內的數據
appendfsync no - 依靠OS進行刷新,redis不主動刷新AOF,這樣最快,但安全性就差
默認並推薦每秒刷新,這樣在速度和安全上都做到了兼顧
AOF數據恢復方式
服務器在啟動時,通過載入和執行AOF文件中保存的命令來還原服務器關閉之前的數據庫狀態,具體過程:
載入AOF文件
創建模擬客戶端
從AOF文件中讀取一條命令
使用模擬客戶端執行命令
循環讀取並執行命令,直到全部完成
如果同時啟用了RDB和AOF方式,AOF優先,啟動時只加載AOF文件恢復數據


文章來自www.wityx.com,轉載請注明出處!原文地址http://www.wityx.com/post/712_1_1.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM