1. 程式人生 > 其它 >Python鞏固基礎03-條件語句

Python鞏固基礎03-條件語句

1、單執行緒

2、Nosql(非關係型)

3、資料記憶體操作

4、常用資料型別:string、hash、list、set、zset,bitmap、hyperloglog

布隆過濾器:可以用很小的空間佔用來記錄海量資料,並查詢某一資料是否存在,但是有一定誤差,可以明確知道一個數據不存在,但不能明確知道一個數據一定存在。

5、Hyperloglog:同樣可以用很小的空間佔用來統計基數(就是隻能統計數量,而沒辦法去知道具體的內容是什麼,比如線上使用者數、註冊 IP 數、每日訪問 IP 數)

6、事務不能回滾,只能提交,普通事務沒有隔離性,如果需要隔離性,可以使用watch(用於監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷)來監聽,或者使用lua指令碼,相當於資料庫儲存過程,整個lua指令碼就是一個事務,高效方便。

7、持久化

1、 快照的方式(RDB),每次抓拍一下全面貌,有save(阻塞)、bgsave(另開執行緒)兩種備份指令,備份慢,啟動快

2、 檔案追加方式(AOF),在之前的基礎追加,備份快,啟動慢

3、 混和模式,開啟aof模式時,會自動開啟混和模式。備份快、啟動快,原理是,當我們進行aof操作的時候,把aof檔案裡的內容轉成rdb格式, 之後的aof操作繼續追加aof格式。

8、 Redis單獨的主從結構只能實現讀寫分離,如果主節點掛了,不能自動切換。必須配套哨兵或者使用叢集才能自動切換

9、 腦裂:主從模式加哨兵模式下,當某個主節點所在機器與其他從節點機器出現網路分割槽(網路不通),整個叢集可能出現兩個主節點。

10、 Redis叢集預設使用雜湊槽,共有16384個,如果某個主節點掛了,此時選舉新的從節點為主節點,並不能保證資料的強一致性;如果某個主節點和所屬從節點都掛了,整個服務不可用;使用{識別符號}+key 操作的話,可以保證同個識別符號的key分配在同一節點上。

11、Stackexchange、csredis.core客戶端支援連線分片叢集、servicestack客戶端不支援分片叢集的連線

12、碎片管理,可以直接重啟redis,或者修改配置檔案,配置項是當記憶體可使用率到達某個值,自動進行碎片整理

13、商品秒殺:Incr\decr:給提前寫進的庫存自增、自減,再配合訊息佇列非同步處理訂單

14、快取雪崩:同一時間大量的key過期,導致大併發查詢關係型資料庫。解決方案是設定相同過期時間時加隨機因子。

15、快取穿透:key不存在redis也不存在關係型資料庫裡。可以使用布隆過濾器,將都不存在的key/id存進布隆過濾器,下次請求,如果該id在布隆過濾器裡,則直接返回,相當於黑名單。

16、快取擊穿:key在關係型資料庫裡,不在redis裡,可能時key過期了。可以給key不設定過期時間。

17、快取預熱:專案還沒啟動時,先把一些資料提前寫進redis中

18、記憶體回收策略:預設不回收,當達到最大記憶體的時候,在增加新資料的時候會返回 error。可以設定根據過期時間、最長使用時間來刪除資料。

19、因為單執行緒在處理客戶端連線、讀、寫時會造成阻塞,所以採用多路複用機制。

1、一個 socket 客戶端與服務端連線時,會生成對應一個套接字描述符(套接字描述符是檔案描述符的一種),每一個 socket 網路連線其實都對應一個檔案描述符。

2、多個客戶端與服務端連線時,Redis 使用 I/O 多路複用程式」(I/O多路複用程式函式有 select、poll、epoll、kqueue) 將客戶端 socket 對應的 FD 註冊到監聽列表(一個佇列)中。當客服端執行 read、write 等操作命令時,I/O 多路複用程式會將命令封裝成一個事件,並繫結到對應的 FD 上。

  例如:以 Redis 的 I/O 多路複用程式 epoll 函式為例
     多個客戶端連線服務端時,Redis 會將客戶端 socket 對應的 fd 註冊進 epoll,然後 epoll 同時監聽多個檔案描述符(FD)是否有資料到來,如果有資料來了就通知事件處理器趕緊處理,這樣就不會存在服務端一直等待某個客戶端給資料的情形。

3、「檔案事件處理器」使用 I/O 多路複用模組同時監控多個檔案描述符(fd)的讀寫情況,當 accept、read、write 和 close 檔案事件產生時,檔案事件處理器就會回撥 FD 繫結的事件處理器進行處理相關命令操作。

  4、整個檔案事件處理器是在單執行緒上執行的,但是通過 I/O 多路複用模組的引入,實現了同時對多個 FD 讀寫的監控,當其中一個 client 端達到寫或讀的狀態,檔案事件處理器就馬上執行,從而就不會出現 I/O 堵塞的問題,提高了網路通訊的效能。