**十八、Redis**
**179.?redis?是什么?都有哪些使用場景?**
Redis是一個開源的使用ANSI?C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。
Redis?使用場景:
* 數據高并發的讀寫
* 海量數據的讀寫
* 對擴展性要求高的數據
**180.?redis?有哪些功能?**
* 數據緩存功能
* 分布式鎖的功能
* 支持數據持久化
* 支持事務
* 支持消息隊列
**181.?redis?和?memecache?有什么區別?**
* memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數據類型
* redis的速度比memcached快很多
* redis可以持久化其數據
**182.?redis?為什么是單線程的?**
因為?cpu?不是?Redis?的瓶頸,Redis?的瓶頸最有可能是機器內存或者網絡帶寬。既然單線程容易實現,而且?cpu?又不會成為瓶頸,那就順理成章地采用單線程的方案了。
關于?Redis?的性能,官方網站也有,普通筆記本輕松處理每秒幾十萬的請求。
而且單線程并不代表就慢?nginx?和?nodejs?也都是高性能單線程的代表。
**183.?什么是緩存穿透?怎么解決?**
緩存穿透:指查詢一個一定不存在的數據,由于緩存是不命中時需要從數據庫查詢,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,造成緩存穿透。
解決方案:最簡單粗暴的方法如果一個查詢返回的數據為空(不管是數據不存在,還是系統故障),我們就把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。
**184.?redis?支持的數據類型有哪些?**
string、list、hash、set、zset。
**185.?redis?支持的?java?客戶端都有哪些?**
Redisson、Jedis、lettuce等等,官方推薦使用Redisson。
**186.?jedis?和?redisson?有哪些區別?**
Jedis是Redis的Java實現的客戶端,其API提供了比較全面的Redis命令的支持。
Redisson實現了分布式和可擴展的Java數據結構,和Jedis相比,功能較為簡單,不支持字符串操作,不支持排序、事務、管道、分區等Redis特性。Redisson的宗旨是促進使用者對Redis的關注分離,從而讓使用者能夠將精力更集中地放在處理業務邏輯上。
**187.?怎么保證緩存和數據庫數據的一致性?**
* 合理設置緩存的過期時間。
* 新增、更改、刪除數據庫操作時同步更新?Redis,可以使用事物機制來保證數據的一致性。
**188.?redis?持久化有幾種方式?**
Redis?的持久化有兩種方式,或者說有兩種策略:
* RDB(Redis?Database):指定的時間間隔能對你的數據進行快照存儲。
* AOF(Append?Only?File):每一個收到的寫命令都通過write函數追加到文件中。
**189.?redis?怎么實現分布式鎖?**
Redis?分布式鎖其實就是在系統里面占一個“坑”,其他程序也要占“坑”的時候,占用成功了就可以繼續執行,失敗了就只能放棄或稍后重試。
占坑一般使用?setnx(set?if?not?exists)指令,只允許被一個程序占有,使用完調用?del?釋放鎖。
**190.?redis?分布式鎖有什么缺陷?**
Redis?分布式鎖不能解決超時的問題,分布式鎖有一個超時時間,程序的執行如果超出了鎖的超時時間就會出現問題。
**191.?redis?如何做內存優化?**
盡可能使用散列表(hashes),散列表(是說散列表里面存儲的數少)使用的內存非常小,所以你應該盡可能的將你的數據模型抽象到一個散列表里面。
比如你的web系統中有一個用戶對象,不要為這個用戶的名稱,姓氏,郵箱,密碼設置單獨的key,而是應該把這個用戶的所有信息存儲到一張散列表里面。
**192.?redis?淘汰策略有哪些?**
* volatile-lru:從已設置過期時間的數據集(server.?db\[i\].?expires)中挑選最近最少使用的數據淘汰。
* volatile-ttl:從已設置過期時間的數據集(server.?db\[i\].?expires)中挑選將要過期的數據淘汰。
* volatile-random:從已設置過期時間的數據集(server.?db\[i\].?expires)中任意選擇數據淘汰。
* allkeys-lru:從數據集(server.?db\[i\].?dict)中挑選最近最少使用的數據淘汰。
* allkeys-random:從數據集(server.?db\[i\].?dict)中任意選擇數據淘汰。
* no-enviction(驅逐):禁止驅逐數據。
**193.?redis?常見的性能問題有哪些?該如何解決?**
* 主服務器寫內存快照,會阻塞主線程的工作,當快照比較大時對性能影響是非常大的,會間斷性暫停服務,所以主服務器最好不要寫內存快照。
* Redis?主從復制的性能問題,為了主從復制的速度和連接的穩定性,主從庫最好在同一個局域網內。
- 空白目錄
- Java 最常見的 208 道面試題:第一模塊答案
- Java 最常見的 208 道面試題:第二模塊答案
- Java 最常見的 208 道面試題:第三模塊答案
- Java 最常見的 208 道面試題:第四模塊和第五模塊答案
- Java 最常見的 208 道面試題:第六模塊答案
- Java 最常見的 208 道面試題:第七模塊答案
- Java 最常見的 208 道面試題:第八模塊答案
- Java 最常見的 208 道面試題:第九模塊和第十模塊答案
- Java 最常見的 208 道面試題:第十一模塊答案
- Java 最常見的 208 道面試題:第十二模塊答案
- Java 最常見的 208 道面試題:第十三模塊答案
- Java 最常見的 208 道面試題:第十四模塊答案
- Java 最常見的 208 道面試題:第十五模塊答案
- Java 最常見的 208 道面試題:第十六模塊答案
- ava 最常見的 208 道面試題:第十七模塊答案
- Java 最常見的 208 道面試題:第十八模塊答案
- Java 最常見的 208 道面試題:第十九模塊答案
- 關于暑假自學內容