偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

面試官:簡述 Redis 鏈表實現(xiàn)

存儲 Redis
Redis也提供了相關(guān)函數(shù),給大家使用,比如鏈表的增加節(jié)點,刪除節(jié)點,等等就不用咱寫了,不然有小伙伴自己手寫寫錯了還可能搞個循環(huán)鏈表出來。

[[432725]]

寫在前面

小牛之前出了八股文背誦版系列,不少朋友問我,能不能搞個八股文精講,把面試問題講講透,于是系列就這樣誕生了。咱們第一期先聊聊Redis。

阿里面試:簡述Redis鏈表實現(xiàn)

鏈表,我感覺學(xué)過編程的小伙伴都知道。

但遺憾的是,我前兩天逛牛客網(wǎng),有個阿里面試官問:來,講講Redis的鏈表。

額,不好意思我沒看過。。。。

為了避免這種尷尬的情形發(fā)生,我寫了這篇博文,爭取讓大家20秒能掌握和面試官談笑風(fēng)生redis鏈表的能力。

首先明確一點,redis的鏈表是雙向鏈表,所以鏈表結(jié)構(gòu)的節(jié)點定義極其清晰

  1. typedef struct listNode { 
  2.      
  3.     struct listNode * prev;//前置節(jié)點 
  4.      
  5.     struct listNode * next;//后置節(jié)點 
  6.      
  7.     void * value;//節(jié)點數(shù)值 
  8. } listNode; 

說實話,有這么一個結(jié)構(gòu),已經(jīng)夠大家寫雙向鏈表的所有操作了。

但Redis還是比較貼心的,它在listNode這一數(shù)據(jù)結(jié)構(gòu)上,又封裝了一個數(shù)據(jù)結(jié)構(gòu)list,方便程序員開發(fā)調(diào)用。

  1. typedef struct list { 
  2.  
  3.     listNode * head;//鏈表頭 
  4.  
  5.     listNode * tail;//鏈表尾 
  6.  
  7.     unsigned long len;//鏈表長度 
  8.  
  9.     void *(*dup) (void *ptr); //節(jié)點值復(fù)制函數(shù) 
  10.  
  11.     void (*free) (void *ptr); //節(jié)點值釋放函數(shù) 
  12.  
  13.     void (*match)(void *ptr,void *key); //節(jié)點值對比函數(shù) 

注意,其封裝的dup,free 和match均是針對節(jié)點的函數(shù),而不是針對整個鏈表而言的。

Redis也提供了相關(guān)函數(shù),給大家使用,比如鏈表的增加節(jié)點,刪除節(jié)點,等等就不用咱寫了,不然有小伙伴自己手寫寫錯了還可能搞個循環(huán)鏈表出來。列幾個用的多的函數(shù)給大家參考吧。

  • lpush:向鏈表左邊增加元素
  • rpush:向鏈表右邊增加元素
  • lpop: 彈出左側(cè)第一個元素
  • rpop:彈出右側(cè)第一個元素
  • llen: 獲得鏈表長度
  • lrange:按索引范圍獲得值

參考

 

  • 《Redis源碼剖析與實戰(zhàn)》
  • 《Redis的設(shè)計與實現(xiàn)》
  • https://www.jianshu.com/p/624ed78852f7

 

責(zé)任編輯:武曉燕 來源: 后端技術(shù)小牛說
相關(guān)推薦

2024-04-09 10:40:04

2024-10-22 16:39:07

2021-01-06 05:36:25

拉鏈表數(shù)倉數(shù)據(jù)

2024-04-03 00:00:00

Redis集群代碼

2025-03-07 00:00:10

2024-02-20 14:10:55

系統(tǒng)緩存冗余

2024-03-05 10:33:39

AOPSpring編程

2024-08-22 10:39:50

@Async注解代理

2024-09-11 22:51:19

線程通訊Object

2023-11-20 10:09:59

2020-12-09 10:29:53

SSH加密數(shù)據(jù)安全

2022-08-11 18:27:50

面試Redis分布式鎖

2022-07-06 13:48:24

RedisSentinel機制

2024-02-28 10:14:47

Redis數(shù)據(jù)硬盤

2024-01-19 14:03:59

Redis緩存系統(tǒng)Spring

2024-01-26 13:16:00

RabbitMQ延遲隊列docker

2024-02-29 16:49:20

volatileJava并發(fā)編程

2025-04-08 00:00:00

@AsyncSpring異步

2024-08-12 17:36:54

2024-08-29 16:30:27

點贊
收藏

51CTO技術(shù)棧公眾號