Redis1 晨考題
1.Redis 是什么 ?
redis 是一個開源的使用 ANSI C 語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value 的內存數據庫,并提供多種語言的 API。
2.NOSQL 是什么 ?出現的目的和意義是什么 ?
NoSQL 泛指非關系型的數據庫,NoSQL 即 Not-Only SQL,它可以作為關系型數據庫的良好補充。
NoSQL 數據庫的產生就是為了解決大規模的數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。
3.Redis 的優點和缺點 ?
優點:(1)性能極高速度快,因為數據存在內存中,Redis 能讀的速度是110000次/s,寫的速度是81000次/s 。
? (2)豐富的數據類型:Redis 支持 String,Hash,List,Set 以及 Ordered Set 數據類型的操作。
? (3)原子性:Redis 的所有操作都是原子性的,意思就是要么成功執行,要么失敗完全不執行。
? (4)豐富的特性:可用于緩存,通知,按 key 設置過期時間,過期后將會自動刪除。
? (5)高速讀寫:Redis 使用自己實現的分離器,代碼量很短,沒有使用 lock,因此效率非常高。
? (6)Redis 的命令是以單線程執行的。
缺點:
? (1)持久化:Redis直接將數據存儲到內存中,如果要將數據保存到磁盤上,Redis 可以使用兩種方式實現
持久化過程:快照(RDF):能夠在指定的時間間隔內對數據進行快照存儲;追加式文件(AOF):記錄每次對服
務器寫的操作, 當服務器重啟的時候會重新執行這些命令來恢復原來的數據,AOF 命令以 Redis 協議追加保存每
次寫的操作到文件末尾。
? (2)代價較高。
? (3)回復速度慢。
? (4)占用內存過高。
4.Redis 有哪些應用場景 ?(舉例即可)
(1)會話緩存。
(2)排行榜和計數器。
(3)分布式會話和分布式鎖。
(4)社交網絡和最新列表。
5.Redis 在什么情況下會進行持久化操作 ?
比如:當系統重啟或系統關閉,服務器斷電或宕機時,這時如果只是將數據放在內存中,那么就會造成數據的丟
失,所以應對這種異常的情況,就要對數據進行持久化操作。
6.Redis 中為什么需要持久化機制 ?
因為 Redis 是一個內存數據庫,數據都是緩存在內存中的,當系統重啟或系統關閉,服務器斷電或宕機時,緩存
在內存中的數據都會消失殆盡,再也找不回來了,所以為了讓數據能夠長期保存,就要將 Redis 放在緩存中的數
據做持久化存儲。
7.Redis 持久化觸發條件有哪些 ?
(1)RDB 定時快照方式:包括手動觸發和自動觸發。
RDB 的手動觸發:通過 redis 的 save 命令和 bgsave 命令,均可以生成 RDB 文件。
RDB 的自動觸發:在配置文件中通過 save m n,指定當 m 秒內發生 n 次變化時,會觸發 bgsave 命令。
(2)AOF 基于語句追加方式:也包括手動觸發和自動觸發。
AOF 的手動觸發:使用 bgrewriteaof 命令。
AOF 的自動觸發:與 RDB 的自動觸發相同,配置在 redis.conf 里面。
8.Redis 內存維護策略 ?
(1)為數據設置超時時間。
即:設置過期時間
expire key time(以秒為單位)--這是最常用的方式
setex(String key, int seconds, String value)--字符串獨有的方式
(2)采用 LRU 算法動態將不用的數據刪除。
對于在內存中但又不用的數據塊(內存塊)叫做 LRU,操作系統會根據哪些數據屬于 LRU 而將其移出內存,從而
騰出空間來加載另外的數據。