redis——數據庫

redis服務器將所有數據庫都保存在redis/redisServer中,數組db存放所有數據庫,每一項是一個redisdb結構。dbnum代表數據庫數量。

客戶端有一個指針指向當前數據庫,可以切換,也就是移動指針。

鍵空間

現在稍微介紹一下redisdb結構,它的字典保存了所有鍵值對

鍵空間的鍵也就是數據庫的鍵, 每個鍵都是一個字符串對象。

鍵空間的值也就是數據庫的值, 每個值可以是字符串對象、列表對象、哈希表對象、集合對象、有序集合對象

所有數據庫的操作,添加一個鍵值對, 刪除一個鍵值對, 獲取某個鍵值對, 等等,都是通過對鍵空間字典進行操作來實現的。

維護

讀寫鍵空間的時候,服務器會執行一些額外操作,比如:

  • 讀一個鍵后(讀操作寫操作都要對鍵讀取),?會根據鍵是否存在, 更新鍵空間命中(hit)次數或不命中(miss)次數。
  • 讀取一個鍵后, 服務器會更新鍵的 LRU (最后一次使用)時間, 這個值可以用于計算鍵的閑置時間。
  • 如果服務器在讀一個鍵時, 該鍵已經過期, 服務器會刪除這個鍵, 然后執行其他操作。
  • 如果客戶使用?WATCH?監視某個鍵,在對這個鍵進行修改之后, 會將這個鍵記為臟(dirty),讓事務程序知到這個鍵被修改
  • 服務器每次修改一個鍵之后, 都會對臟(dirty)鍵計數器的值增一, 這個計數器會觸發服務器的持久化以及復制操作執行
  • 如果服務器開啟了數據庫通知功能, 那么在對鍵進行修改之后, 服務器將按配置發送相應的數據庫通知。

時間

用戶可以給某個鍵設置生存時間,過期時間是一個UNIX時間戳,到時間自動刪除這個鍵。

redisdb結構的expires字典保存了所有的鍵的過期時間,我們稱這個字典為過期字典。

三種過期鍵刪除策略

1)定時刪除:創建一個定時器,到時間立即執行刪除操作(對內存友好,因為能保證過期了立馬刪除,但是對cpu不友好)

2)惰性刪除:鍵過期不管,每次獲取鍵時檢查是否過期,過期就刪除(對cpu友好,但是只有在使用的時候才可能刪除,對內存不友好)

3)定期刪除:隔一段時間檢查一次(具體算法決定檢查多少刪多少,需要合理設置)

淘汰策略

當Redis占用內存超出最大限制 (maxmemory) 時,可采用如下策略 (maxmemory-policy) ,讓Redis淘汰一些數據,以騰出空間繼續提供讀寫服務 :

noeviction: 對可能導致增大內存的命令返回錯誤 (大多數寫命令,DEL除外) ;

volatile-ttl: 在設置了過期時間的key中,選擇剩余壽命 (TTL) 最短的key,將其淘汰;

volatile-lru: 在設置了過期時間的key中,選擇最少使用的key (RU) ,將其淘汰;

volatile-random: 在設置了過期時間的key中,隨機選擇一些key,將其淘汰;

allkeys-1Lru: 在所有的key中,選擇最少使用的key (LRU) ,將其淘汰;

allkeys-random: 在所有的key中,隨機選擇一些key,將其淘汰;

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445404.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445404.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445404.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

劍指offer(刷題41-50)--c++,Python版本

文章目錄目錄第41題:解題思路:代碼實現:cpython第42題:解題思路:代碼實現:cpython第43題:解題思路:代碼實現:cpython第44題:解題思路:代碼實現&am…

redis——持久化

因為redis是內存數據庫,他把數據都存在內存里,所以要想辦法實現持久化功能。 RDB RDB持久化可以手動執行,也可以配置定期執行,可以把某個時間的數據狀態保存到RDB文件中,反之,我們可以用RDB文件還原數據庫…

redis原理總結

數據結構(字典、鏈表、字符串) 數據結構(整數集合,壓縮列表) 數據結構(跳表介紹和手撕) LRU介紹和實現 對象(字符串對象、列表對象、哈希對象、集合對象、有序集合總結&#xff…

劍指offer(刷題51-60)--c++,Python版本

文章目錄目錄第51題:解題思路:代碼實現:cpython第52題:解題思路:代碼實現:cpython第53題:解題思路:代碼實現:cpython第54題:解題思路:代碼實現&am…

2017第一屆河北省大學生程序設計競賽題解

超級密碼 小明今年9歲了,最近迷上了設計密碼!今天,他又設計了一套他認為很復雜的密碼,并且稱之為“超級密碼”. 說實話,這套所謂的“超級密碼”其實并不難:對于一個給定的字符串,你只要提取其中…

劍指offer(刷題61-65)--c++,Python版本

文章目錄目錄第61題:解題思路:代碼實現:cpython第62題:解題思路:代碼實現:cpython第63題:解題思路:代碼實現:cpython第64題:解題思路:代碼實現&am…

2018第二屆河北省大學生程序設計競賽題解

icebound的賬單 題目描述 icebound從小就有記賬的習慣。又到了月末icebound統計資金狀況的時候。icebound每個月除了不停的揮霍以外,有時他會良心發現,勤工儉學,因此會有一些微薄的收入。然而icebound數學不好,需要你來幫助他統計…

大數的四則運算(加法、減法、乘法、除法)

大數的四則運算(加法、減法、乘法、除法) 前言: 在計算機中數字表示的范圍是有限制的,比如我們熟知的 int、float、double 等數據類型所能表示的范圍都是有限的,如果我們要對位數達到幾十位、幾百位、上千位的大整數進…

數組基操三連(1)

題目: 給定一個數組arr,求出需要排序的最短子數組長度 要求: 時間o(n),空間o(1) 思路: 有序的數組中,任意一個數字,一定小于左邊的數大于右邊的數。 我們找到的需要排序的子數組,顯然是比右邊…

IT互聯網公司的筆試的輸入輸出- c++ python

文章目錄目錄c方式1&#xff1a;方式2&#xff1a;Python方式1&#xff1a;方式2&#xff1a;方式3&#xff1a;目錄 c 方式1&#xff1a; 第一種情況&#xff1a;輸入n個數&#xff0c;存放在數組中 #include <iostream> #include <vector> using namespace st…

隨機過程1

隨機過程1概述1.參考書目2.主要內容3.概率論--基本概念回顧3.1對“不確定性”的認識3.2 應對“不確定性”應該怎么做3.3隨機變量&#xff08;Random Variable&#xff09;3.4分布函數&#xff08;Distribution Function&#xff09;3.5概率密度&#xff08;Density&#xff09;…

數組基操三連(4)

題目一 給定一個長度為N的整型數組arr&#xff0c;其中有N個互不相等的自然數1~N 請實現arr的排序 但是不要把下標0~N-1位置上的數值通過直接賦值的方式替換成1~N。 要求&#xff1a;時間復雜度為O(N)&#xff0c;額外空間復雜度為O(1)。 思路&#xff1a;從左向右檢查&…

Linux(1)-touch,mkdir,rm,mv,cp,ls,cd,cat

Linux1-實用終端命令1. touch, mkdir2. rm, mv, cp3. ls(通配符),cd(絕對/相對路徑)4. cat, more/less文件內容瀏覽文件/目錄-增刪查改, 文件內容查看.1. touch, mkdir touch新文件 &#xff1a;在當前文件夾下&#xff0c;創建文件。文件不存在則創建新文件&#xff1b;文件存…

java常用類介紹及源碼閱讀(ArrayList)

java.util 類 ArrayList<E> 繼承關系&#xff1a; java.lang.Objectjava.util.AbstractCollection<E>java.util.AbstractList<E>java.util.ArrayList<E>List 接口的動態數組的實現。 實現了所有可選列表操作&#xff0c;并允許包括 null 在內的所有…

tests1

ls,cd,tardone

數組精選題目三連(5)

子數組的最大累加和問題 輸入一個整形數組&#xff0c;求數組中連續的子數組使其和最大。比如&#xff0c;數組x 應該返回 x[2..6]的和187. 這四個代碼完成的功能都是求最大子數組&#xff08;注意用詞準確&#xff0c;子數組連續&#xff0c;子序列可以不連續&#xff09;。…