亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis中一些最常見的面試問題總結(jié)

 更新時間:2018年09月06日 09:04:19   作者:回首笑人間  
Redis在互聯(lián)網(wǎng)技術(shù)存儲方面使用如此廣泛,幾乎所有的后端技術(shù)面試官都要在Redis的使用和原理方面對小伙伴們進行各種刁難。下面這篇文章主要給大家總結(jié)介紹了關(guān)于Redis中一些最常見的面試問題,需要的朋友可以參考下

前言

經(jīng)過長達一周的奔波和面試,電話面試,回首今天終于成功的入職了,總共面試了大概10家公司,包括阿里,京東,IBM等等,京東技術(shù)過了,學(xué)歷因為非統(tǒng)招就被pass了,阿里面了2次電話面試就沒下文了,估計是我當(dāng)時最后提問題的時候減分了吧,其他的也有一些offer,不是不想去,就是了無音訊了,眼看年關(guān)將近,也由不得我挑挑揀揀了,就直接進了我現(xiàn)在這家公司,主要是感覺公司人不錯,薪水這方面也就沒有計較太多。好了,書歸正文,今天小編就大家送上我精心準(zhǔn)備的關(guān)于Redis方面的面試題,希望可以幫到還在求職路上的你們。

1.什么是redis?

Redis 是一個基于內(nèi)存的高性能key-value數(shù)據(jù)庫。

2.Reids的特點  

Redis本質(zhì)上是一個Key-Value類型的內(nèi)存數(shù)據(jù)庫,很像memcached,整個數(shù)據(jù)庫統(tǒng)統(tǒng)加載在內(nèi)存當(dāng)中進行操作,定期通過異步操作把數(shù)據(jù)庫數(shù)據(jù)flush到硬盤上進行保存。因為是純內(nèi)存操作,Redis的性能非常出色,每秒可以處理超過 10萬次讀寫操作,是已知性

能最快的Key-Value DB。

Redis的出色之處不僅僅是性能,Redis最大的魅力是支持保存多種數(shù)據(jù)結(jié)構(gòu),此外單個value的最大限制是1GB,不像 memcached只能保存1MB的數(shù)據(jù),因此Redis可以用來實現(xiàn)很多有用的功能,比方說用他的List來做FIFO雙向鏈表,實現(xiàn)一個輕量級的高性 能消

息隊列服務(wù),用他的Set可以做高性能的tag系統(tǒng)等等。另外Redis也可以對存入的Key-Value設(shè)置expire時間,因此也可以被當(dāng)作一 個功能加強版的memcached來用。

Redis的主要缺點是數(shù)據(jù)庫容量受到物理內(nèi)存的限制,不能用作海量數(shù)據(jù)的高性能讀寫,因此Redis適合的場景主要局限在較小數(shù)據(jù)量的高性能操作和運算上。

3.使用redis有哪些好處?   

(1) 速度快,因為數(shù)據(jù)存在內(nèi)存中,類似于HashMap,HashMap的優(yōu)勢就是查找和操作的時間復(fù)雜度都是O(1) 

(2) 支持豐富數(shù)據(jù)類型,支持string,list,set,sorted set,hash 

(3) 支持事務(wù),操作都是原子性,所謂的原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行 

(4) 豐富的特性:可用于緩存,消息,按key設(shè)置過期時間,過期后將會自動刪除

4.使用redis有什么缺點

分析:大家用redis這么久,這個問題是必須要了解的,基本上使用redis都會碰到一些問題,常見的也就幾個。

回答:主要是四個問題

(一)緩存和數(shù)據(jù)庫雙寫一致性問題

(二)緩存雪崩問題

(三)緩存擊穿問題

(四)緩存的并發(fā)競爭問題

這四個問題,我個人是覺得在項目中,比較常遇見的。

5.redis相比memcached有哪些優(yōu)勢?   

(1) memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數(shù)據(jù)類型

(2) redis的速度比memcached快很多 (3) redis可以持久化其數(shù)據(jù)

6.Memcache與Redis的區(qū)別都有哪些?   

1)、存儲方式 Memecache把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會掛掉,數(shù)據(jù)不能超過內(nèi)存大小。 Redis有部份存在硬盤上,這樣能保證數(shù)據(jù)的持久性。

2)、數(shù)據(jù)支持類型 Memcache對數(shù)據(jù)類型支持相對簡單。 Redis有復(fù)雜的數(shù)據(jù)類型。

3)、使用底層模型不同 它們之間底層實現(xiàn)方式 以及與客戶端之間通信的應(yīng)用協(xié)議不一樣。 Redis直接自己構(gòu)建了VM 機制 ,因為一般的系統(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會浪費一定的時間去移動和請求。

7.redis常見性能問題和解決方案:   

1).Master寫內(nèi)存快照,save命令調(diào)度rdbSave函數(shù),會阻塞主線程的工作,當(dāng)快照比較大時對性能影響是非常大的,會間斷性暫停服務(wù),所以Master最好不要寫內(nèi)存快照。

2).Master AOF持久化,如果不重寫AOF文件,這個持久化方式對性能的影響是最小的,但是AOF文件會不斷增大,AOF文件過大會影響Master重啟的恢復(fù)速度。Master最好不要做任何持久化工作,包括內(nèi)存快照和AOF日志文件,特別是不要啟用內(nèi)存快照做持久化,如果數(shù)據(jù)比較關(guān)鍵,某個Slave開啟AOF備份數(shù)據(jù),策略為每秒同步一次。

3).Master調(diào)用BGREWRITEAOF重寫AOF文件,AOF在重寫的時候會占大量的CPU和內(nèi)存資源,導(dǎo)致服務(wù)load過高,出現(xiàn)短暫服務(wù)暫?,F(xiàn)象。

4). Redis主從復(fù)制的性能問題,為了主從復(fù)制的速度和連接的穩(wěn)定性,Slave和Master最好在同一個局域網(wǎng)內(nèi)

8. mySQL里有2000w數(shù)據(jù),redis中只存20w的數(shù)據(jù),如何保證redis中的數(shù)據(jù)都是熱點數(shù)據(jù)

相關(guān)知識:redis 內(nèi)存數(shù)據(jù)集大小上升到一定大小的時候,就會施行數(shù)據(jù)淘汰策略(回收策略)。redis 提供 6種數(shù)據(jù)淘汰策略:

  • volatile-lru:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中挑選最近最少使用的數(shù)據(jù)淘汰
  • volatile-ttl:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中挑選將要過期的數(shù)據(jù)淘汰
  • volatile-random:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中任意選擇數(shù)據(jù)淘汰
  • allkeys-lru:從數(shù)據(jù)集(server.db[i].dict)中挑選最近最少使用的數(shù)據(jù)淘汰
  • allkeys-random:從數(shù)據(jù)集(server.db[i].dict)中任意選擇數(shù)據(jù)淘汰
  • no-enviction(驅(qū)逐):禁止驅(qū)逐數(shù)據(jù)

9.請用Redis和任意語言實現(xiàn)一段惡意登錄保護的代碼,限制1小時內(nèi)每用戶Id最多只能登錄5次。具體登錄函數(shù)或功能用空函數(shù)即可,不用詳細寫出。

用列表實現(xiàn):列表中每個元素代表登陸時間,只要最后的第5次登陸時間和現(xiàn)在時間差不超過1小時就禁止登陸.用Python寫的代碼如下:

#!/usr/bin/env python3
import redis 
import sys 
import time 
 
r = redis.StrictRedis(host='127.0.0.1′, port=6379, db=0) 
try: 
 id = sys.argv[1]
except: 
 print(‘input argument error') 
 sys.exit(0) 
if r.llen(id) >= 5 and time.time() – float(r.lindex(id, 4)) <= 3600: 
 print(“you are forbidden logining”)
else: 
 print(‘you are allowed to login') 
 r.lpush(id, time.time()) 
 # login_func()

10.為什么redis需要把所有數(shù)據(jù)放到內(nèi)存中? 

Redis為了達到最快的讀寫速度將數(shù)據(jù)都讀到內(nèi)存中,并通過異步的方式將數(shù)據(jù)寫入磁盤。所以redis具有快速和數(shù)據(jù)持久化的特征。如果不將數(shù)據(jù)放在內(nèi)存中,磁盤I/O速度為嚴重影響redis的性能。在內(nèi)存越來越便宜的今天,redis將會越來越受歡迎。

如果設(shè)置了最大使用的內(nèi)存,則數(shù)據(jù)已有記錄數(shù)達到內(nèi)存限值后不能繼續(xù)插入新值。

11.Redis是單進程單線程的

redis利用隊列技術(shù)將并發(fā)訪問變?yōu)榇性L問,消除了傳統(tǒng)數(shù)據(jù)庫串行控制的開銷

12.redis的并發(fā)競爭問題如何解決?

Redis為單進程單線程模式,采用隊列模式將并發(fā)訪問變?yōu)榇性L問。Redis本身沒有鎖的概念,Redis對于多個客戶端連接并不存在競爭,但是在Jedis客戶端對Redis進行并發(fā)訪問時會發(fā)生連接超時、數(shù)據(jù)轉(zhuǎn)換錯誤、阻塞、客戶端關(guān)閉連接等問題,這些問題均是

由于客戶端連接混亂造成。對此有2種解決方法:

1.客戶端角度,為保證每個客戶端間正常有序與Redis進行通信,對連接進行池化,同時對客戶端讀寫Redis操作采用內(nèi)部鎖synchronized。

2.服務(wù)器角度,利用setnx實現(xiàn)鎖。

注:對于第一種,需要應(yīng)用程序自己處理資源的同步,可以使用的方法比較通俗,可以使用synchronized也可以使用lock;第二種需要用到Redis的setnx命令,但是需要注意一些問題。

13.redis事物的了解CAS(check-and-set 操作實現(xiàn)樂觀鎖 )?

和眾多其它數(shù)據(jù)庫一樣,Redis作為NoSQL數(shù)據(jù)庫也同樣提供了事務(wù)機制。在Redis中,MULTI/EXEC/DISCARD/WATCH這四個命令是我們實現(xiàn)事務(wù)的基石。相信對有關(guān)系型數(shù)據(jù)庫開發(fā)經(jīng)驗的開發(fā)者而言這一概念并不陌生,即便如此,我們還是會簡要的列出Redis中事務(wù)的實現(xiàn)特征:

     1). 在事務(wù)中的所有命令都將會被串行化的順序執(zhí)行,事務(wù)執(zhí)行期間,Redis不會再為其它客戶端的請求提供任何服務(wù),從而保證了事物中的所有命令被原子的執(zhí)行。

     2). 和關(guān)系型數(shù)據(jù)庫中的事務(wù)相比,在Redis事務(wù)中如果有某一條命令執(zhí)行失敗,其后的命令仍然會被繼續(xù)執(zhí)行。

     3). 我們可以通過MULTI命令開啟一個事務(wù),有關(guān)系型數(shù)據(jù)庫開發(fā)經(jīng)驗的人可以將其理解為"BEGIN TRANSACTION"語句。在該語句之后執(zhí)行的命令都將被視為事務(wù)之內(nèi)的操作,最后我們可以通過執(zhí)行EXEC/DISCARD命令來提交/回滾該事務(wù)內(nèi)的所有操作。這兩個Redis命令可被視為等同于關(guān)系型數(shù)據(jù)庫中的COMMIT/ROLLBACK語句。

     4). 在事務(wù)開啟之前,如果客戶端與服務(wù)器之間出現(xiàn)通訊故障并導(dǎo)致網(wǎng)絡(luò)斷開,其后所有待執(zhí)行的語句都將不會被服務(wù)器執(zhí)行。然而如果網(wǎng)絡(luò)中斷事件是發(fā)生在客戶端執(zhí)行EXEC命令之后,那么該事務(wù)中的所有命令都會被服務(wù)器執(zhí)行。

     5). 當(dāng)使用Append-Only模式時,Redis會通過調(diào)用系統(tǒng)函數(shù)write將該事務(wù)內(nèi)的所有寫操作在本次調(diào)用中全部寫入磁盤。然而如果在寫入的過程中出現(xiàn)系統(tǒng)崩潰,如電源故障導(dǎo)致的宕機,那么此時也許只有部分數(shù)據(jù)被寫入到磁盤,而另外一部分數(shù)據(jù)卻已經(jīng)丟失。

Redis服務(wù)器會在重新啟動時執(zhí)行一系列必要的一致性檢測,一旦發(fā)現(xiàn)類似問題,就會立即退出并給出相應(yīng)的錯誤提示。此時,我們就要充分利用Redis工具包中提供的redis-check-aof工具,該工具可以幫助我們定位到數(shù)據(jù)不一致的錯誤,并將已經(jīng)寫入的部分數(shù)據(jù)進行回滾。修復(fù)之后我們就可以再次重新啟動Redis服務(wù)器了。

14.WATCH命令和基于CAS的樂觀鎖: 

在Redis的事務(wù)中,WATCH命令可用于提供CAS(check-and-set)功能。假設(shè)我們通過WATCH命令在事務(wù)執(zhí)行之前監(jiān)控了多個Keys,倘若在WATCH之后有任何Key的值發(fā)生了變化,EXEC命令執(zhí)行的事務(wù)都將被放棄,同時返回Null multi-bulk應(yīng)答以通知調(diào)用者事務(wù)執(zhí)行失敗。例如,我們再次假設(shè)Redis中并未提供incr命令來完成鍵值的原子性遞增,如果要實現(xiàn)該功能,我們只能自行編寫相應(yīng)的代碼。其偽碼如下:

  val = GET mykey
  val = val + 1
  SET mykey $val

以上代碼只有在單連接的情況下才可以保證執(zhí)行結(jié)果是正確的,因為如果在同一時刻有多個客戶端在同時執(zhí)行該段代碼,那么就會出現(xiàn)多線程程序中經(jīng)常出現(xiàn)的一種錯誤場景--競態(tài)爭用(race condition)。比如,客戶端A和B都在同一時刻讀取了mykey的原有值,假設(shè)該值為10,此后兩個客戶端又均將該值加一后set回Redis服務(wù)器,這樣就會導(dǎo)致mykey的結(jié)果為11,而不是我們認為的12。為了解決類似的問題,我們需要借助WATCH命令的幫助,見如下代碼:

  WATCH mykey
  val = GET mykey
  val = val + 1
  MULTI
  SET mykey $val
  EXEC

和此前代碼不同的是,新代碼在獲取mykey的值之前先通過WATCH命令監(jiān)控了該鍵,此后又將set命令包圍在事務(wù)中,這樣就可以有效的保證每個連接在執(zhí)行EXEC之前,如果當(dāng)前連接獲取的mykey的值被其它連接的客戶端修改,那么當(dāng)前連接的EXEC命令將執(zhí)行失敗。這樣調(diào)用者在判斷返回值后就可以獲悉val是否被重新設(shè)置成功。

15.redis持久化的幾種方式

1、快照(snapshots)

缺省情況情況下,Redis把數(shù)據(jù)快照存放在磁盤上的二進制文件中,文件名為dump.rdb。你可以配置Redis的持久化策略,例如數(shù)據(jù)集中每N秒鐘有超過M次更新,就將數(shù)據(jù)寫入磁盤;或者你可以手工調(diào)用命令SAVE或BGSAVE。

工作原理

 ?。?Redis forks.

  . 子進程開始將數(shù)據(jù)寫到臨時RDB文件中。

 ?。?當(dāng)子進程完成寫RDB文件,用新文件替換老文件。

  . 這種方式可以使Redis使用copy-on-write技術(shù)。

2、AOF

快照模式并不十分健壯,當(dāng)系統(tǒng)停止,或者無意中Redis被kill掉,最后寫入Redis的數(shù)據(jù)就會丟失。這對某些應(yīng)用也許不是大問題,但對于要求高可靠性的應(yīng)用來說,Redis就不是一個合適的選擇。

Append-only文件模式是另一種選擇。

你可以在配置文件中打開AOF模式

3、虛擬內(nèi)存方式

當(dāng)你的key很小而value很大時,使用VM的效果會比較好.因為這樣節(jié)約的內(nèi)存比較大.

當(dāng)你的key不小時,可以考慮使用一些非常方法將很大的key變成很大的value,比如你可以考慮將key,value組合成一個新的value.

vm-max-threads這個參數(shù),可以設(shè)置訪問swap文件的線程數(shù),設(shè)置最好不要超過機器的核數(shù),如果設(shè)置為0,那么所有對swap文件的操作都是串行的.可能會造成比較長時間的延遲,但是對數(shù)據(jù)完整性有很好的保證.

自己測試的時候發(fā)現(xiàn)用虛擬內(nèi)存性能也不錯。如果數(shù)據(jù)量很大,可以考慮分布式或者其他數(shù)據(jù)庫

16.redis的緩存失效策略和主鍵失效機制

作為緩存系統(tǒng)都要定期清理無效數(shù)據(jù),就需要一個主鍵失效和淘汰策略.

在Redis當(dāng)中,有生存期的key被稱為volatile。在創(chuàng)建緩存時,要為給定的key設(shè)置生存期,當(dāng)key過期的時候(生存期為0),它可能會被刪除。

1、影響生存時間的一些操作

生存時間可以通過使用 DEL 命令來刪除整個 key 來移除,或者被 SET 和 GETSET 命令覆蓋原來的數(shù)據(jù),也就是說,修改key對應(yīng)的value和使用另外相同的key和value來覆蓋以后,當(dāng)前數(shù)據(jù)的生存時間不同。

比如說,對一個 key 執(zhí)行INCR命令,對一個列表進行LPUSH命令,或者對一個哈希表執(zhí)行HSET命令,這類操作都不會修改 key 本身的生存時間。另一方面,如果使用RENAME對一個 key 進行改名,那么改名后的 key的生存時間和改名前一樣。

RENAME命令的另一種可能是,嘗試將一個帶生存時間的 key 改名成另一個帶生存時間的 another_key ,這時舊的 another_key (以及它的生存時間)會被刪除,然后舊的 key 會改名為 another_key ,因此,新的 another_key 的生存時間也和原本的 key 一樣。使用PERSIST命令可以在不刪除 key 的情況下,移除 key 的生存時間,讓 key 重新成為一個persistent key 。

2、如何更新生存時間

可以對一個已經(jīng)帶有生存時間的 key 執(zhí)行EXPIRE命令,新指定的生存時間會取代舊的生存時間。過期時間的精度已經(jīng)被控制在1ms之內(nèi),主鍵失效的時間復(fù)雜度是O(1),EXPIRE和TTL命令搭配使用,TTL可以查看key的當(dāng)前生存時間。設(shè)置成功返回 1;當(dāng) key 不存在或者不能為 key 設(shè)置生存時間時,返回 0 。

最大緩存配置

在 redis 中,允許用戶設(shè)置最大使用內(nèi)存大小

  server.maxmemory

默認為0,沒有指定最大緩存,如果有新的數(shù)據(jù)添加,超過最大內(nèi)存,則會使redis崩潰,所以一定要設(shè)置。redis 內(nèi)存數(shù)據(jù)集大小上升到一定大小的時候,就會實行數(shù)據(jù)淘汰策略。

redis 提供 6種數(shù)據(jù)淘汰策略:

 ?。?volatile-lru:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中挑選最近最少使用的數(shù)據(jù)淘汰

 ?。?volatile-ttl:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中挑選將要過期的數(shù)據(jù)淘汰

  . volatile-random:從已設(shè)置過期時間的數(shù)據(jù)集(server.db[i].expires)中任意選擇數(shù)據(jù)淘汰

 ?。?allkeys-lru:從數(shù)據(jù)集(server.db[i].dict)中挑選最近最少使用的數(shù)據(jù)淘汰

  . allkeys-random:從數(shù)據(jù)集(server.db[i].dict)中任意選擇數(shù)據(jù)淘汰

 ?。?no-enviction(驅(qū)逐):禁止驅(qū)逐數(shù)據(jù)

注意這里的6種機制,volatile和allkeys規(guī)定了是對已設(shè)置過期時間的數(shù)據(jù)集淘汰數(shù)據(jù)還是從全部數(shù)據(jù)集淘汰數(shù)據(jù),后面的lru、ttl以及random是三種不同的淘汰策略,再加上一種no-enviction永不回收的策略。

使用策略規(guī)則:

  1、如果數(shù)據(jù)呈現(xiàn)冪律分布,也就是一部分數(shù)據(jù)訪問頻率高,一部分數(shù)據(jù)訪問頻率低,則使用allkeys-lru

  2、如果數(shù)據(jù)呈現(xiàn)平等分布,也就是所有的數(shù)據(jù)訪問頻率都相同,則使用allkeys-random

三種數(shù)據(jù)淘汰策略:

ttl和random比較容易理解,實現(xiàn)也會比較簡單。主要是Lru最近最少使用淘汰策略,設(shè)計上會對key 按失效時間排序,然后取最先失效的key進行淘汰

17.redis 最適合的場景  

Redis最適合所有數(shù)據(jù)in-momory的場景,雖然Redis也提供持久化功能,但實際更多的是一個disk-backed的功能,跟傳統(tǒng)意義上的持久化有比較大的差別,那么可能大家就會有疑問,似乎Redis更像一個加強版的Memcached,那么何時使用Memcached,何時使用Redis呢?

如果簡單地比較Redis與Memcached的區(qū)別,大多數(shù)都會得到以下觀點:

  1 、Redis不僅僅支持簡單的k/v類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。

  2 、Redis支持數(shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。

  3 、Redis支持數(shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時候可以再次加載進行使用。

(1)、會話緩存(Session Cache)

最常用的一種使用Redis的情景是會話緩存(session cache)。用Redis緩存會話比其他存儲(如Memcached)的優(yōu)勢在于:Redis提供持久化。當(dāng)維護一個不是嚴格要求一致性的緩存時,如果用戶的購物車信息全部丟失,大部分人都會不高興的,現(xiàn)在,

他們還會這樣嗎?

幸運的是,隨著 Redis 這些年的改進,很容易找到怎么恰當(dāng)?shù)氖褂肦edis來緩存會話的文檔。甚至廣為人知的商業(yè)平臺Magento也提供Redis的插件。

(2)、全頁緩存(FPC)

除基本的會話token之外,Redis還提供很簡便的FPC平臺?;氐揭恢滦詥栴},即使重啟了Redis實例,因為有磁盤的持久化,用戶也不會看到頁面加載速度的下降,這是一個極大改進,類似PHP本地FPC。

再次以Magento為例,Magento提供一個插件來使用Redis作為全頁緩存后端。

此外,對WordPress的用戶來說,Pantheon有一個非常好的插件 wp-redis,這個插件能幫助你以最快速度加載你曾瀏覽過的頁面。

(3)、隊列

Reids在內(nèi)存存儲引擎領(lǐng)域的一大優(yōu)點是提供 list 和 set 操作,這使得Redis能作為一個很好的消息隊列平臺來使用。Redis作為隊列使用的操作,就類似于本地程序語言(如Python)對 list 的 push/pop 操作。

如果你快速的在Google中搜索“Redis queues”,你馬上就能找到大量的開源項目,這些項目的目的就是利用Redis創(chuàng)建非常好的后端工具,以滿足各種隊列需求。例如,Celery有一個后臺就是使用Redis作為broker,你可以從這里去查看。

(4),排行榜/計數(shù)器

Redis在內(nèi)存中對數(shù)字進行遞增或遞減的操作實現(xiàn)的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執(zhí)行這些操作的時候變的非常簡單,Redis只是正好提供了這兩種數(shù)據(jù)結(jié)構(gòu)。所以,我們要從排序集合中獲取到排名最靠前的10個用戶–我們

稱之為“user_scores”,我們只需要像下面一樣執(zhí)行即可:

當(dāng)然,這是假定你是根據(jù)你用戶的分數(shù)做遞增的排序。如果你想返回用戶及用戶的分數(shù),你需要這樣執(zhí)行:

  ZRANGE user_scores 0 10 WITHSCORES

Agora Games就是一個很好的例子,用Ruby實現(xiàn)的,它的排行榜就是使用Redis來存儲數(shù)據(jù)的,你可以在這里看到。

(5)、發(fā)布/訂閱

最后(但肯定不是最不重要的)是Redis的發(fā)布/訂閱功能。發(fā)布/訂閱的使用場景確實非常多。我已看見人們在社交網(wǎng)絡(luò)連接中使用,還可作為基于發(fā)布/訂閱的腳本觸發(fā)器,甚至用Redis的發(fā)布/訂閱功能來建立聊天系統(tǒng)?。ú唬@是真的,你可以去核實)。

Redis提供的所有特性中,我感覺這個是喜歡的人最少的一個,雖然它為用戶提供如果此多功能。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Redis實現(xiàn)單設(shè)備登錄的場景分析

    Redis實現(xiàn)單設(shè)備登錄的場景分析

    這篇文章主要介紹了Redis實現(xiàn)單設(shè)備登錄,用戶首次登錄時,將用戶信息存入Redis,key是用戶id,value是token,當(dāng)用戶在其他設(shè)備登錄時,會重新生成token,這個時候原先的token已經(jīng)被覆蓋了,本文給大家提供樣例及核心代碼,感興趣的朋友參考下吧
    2022-04-04
  • Redis數(shù)據(jù)結(jié)構(gòu)原理淺析

    Redis數(shù)據(jù)結(jié)構(gòu)原理淺析

    這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)原理淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Linux下Redis集群搭建全過程(主從+哨兵)

    Linux下Redis集群搭建全過程(主從+哨兵)

    這篇文章主要介紹了Linux下Redis集群搭建全過程(主從+哨兵),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 如何高效地向Redis插入大量的數(shù)據(jù)(推薦)

    如何高效地向Redis插入大量的數(shù)據(jù)(推薦)

    本篇文章主要介紹了如何高效地向Redis插入大量的數(shù)據(jù),現(xiàn)在分享給大家,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • 詳解centos7 yum安裝redis及常用命令

    詳解centos7 yum安裝redis及常用命令

    這篇文章主要介紹了centos7 yum安裝redis及常用命令,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Redis?布隆過濾器命令的使用詳解

    Redis?布隆過濾器命令的使用詳解

    這篇文章主要介紹了Redis?布隆過濾器的相關(guān)命令的使用,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Redis基本數(shù)據(jù)類型哈希Hash常用操作命令

    Redis基本數(shù)據(jù)類型哈希Hash常用操作命令

    這篇文章主要為大家介紹了Redis基本數(shù)據(jù)類型哈希Hash常用操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Redis的LRU機制介紹

    Redis的LRU機制介紹

    這篇文章主要介紹了Redis的LRU機制介紹,Redis會按LRU算法刪除設(shè)置了過期時間但還沒有過期的key,而對于沒有設(shè)置過期時間的key,Redis是永遠保留的,需要的朋友可以參考下
    2015-06-06
  • Redis?搭建主從集群的操作指南

    Redis?搭建主從集群的操作指南

    單節(jié)點的?Redis?并發(fā)能力有限,要進一步提高?Redis?的并發(fā)能力,就需要搭建主從集群,實現(xiàn)讀寫分離,這篇文章主要給大家介紹了Redis搭建主從集群的操作指南,需要的朋友可以參考下
    2023-08-08
  • 詳解如何使用Redis實現(xiàn)分布式鎖

    詳解如何使用Redis實現(xiàn)分布式鎖

    Redis 作為一個獨立的三方系統(tǒng),其天生的優(yōu)勢就是可以作為一個分布式系統(tǒng)來使用,因此使用 Redis 實現(xiàn)的鎖都是分布式鎖,所以本文就給大家講講如何使用Redis實現(xiàn)分布式鎖,感興趣的小伙伴跟著小編來看看吧
    2023-08-08

最新評論