91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis的數據結構及應用場景

發布時間:2020-08-09 22:28:31 來源:ITPUB博客 閱讀:222 作者:Java大蝸牛 欄目:編程語言

一. 談談對redis的理解,它的應用場景。

Redis是一個key-value存儲系統,它支持存儲的value類型包括string字符串、list鏈表、set集合、sorted Set有序集合和hash哈希等數據類型。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的,支持各種不同方式的排序。為了保證效率,Redis將數據都緩存在內存中,并周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,在此基礎上實現master-slave(主從)同步。

Redis的應用場景 數據類型應用場景StringString是最常用的一種數據類型,普通的key/value存儲都可以歸為此類。List關注列表、粉絲列表、消息隊列等。SetSet提供一個與 List類似的列表功能,特殊之處在于Set會自動排序、去重,當需要存儲一個列表數據,又不希望有重復數據時,Set是一個很好的選擇,并且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。

1.使用Set存儲一些集合性的數據,比如在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合;

2.可以對集合取交集、并集、差集,應用到好友推薦、共同關注等。

3.還可以利用唯一性,統計訪問網站的所有獨立IP。

SortedSetSortedSet與Set的使用場景類似,是不允許重復項的String集合。

1.SortedSet可以通過提供一個優先級(score)的參數為成員排序,并且是插入有序的,即自動排序,可以應用于積分排行榜等。

2.如果需要一個有序且不重復的集合列表,可以選擇sorted set數據結構,比如twitter 的public timeline可以以發表時間作為score來存儲,這樣獲取時就是自動按時間排好序的。

3.用SortedSet做帶權重的隊列,比如普通消息的score為1,重要消息的score為2,然后工作線程可以選擇按score的倒序來獲取工作任務,讓重要的任務優先執行。

Hash 存儲一個學生信息對象數據,字段包括:id、姓名、班級、年齡等,通過id可以獲取/修改任意的字段。

二. 既然一般的語言也能支持string、list、hash等數據結構,為什么還要用redis呢?

這里要先提一下 內存和緩存的區別

內存是物理上的,是一種物理存儲介質。

緩存是邏輯上的概念,是一種數據結構,可以是PHP語言里面的一種數據結構,也可以是Redis里面的一種數據結構。比如:用PHP數組存一些數據,每次有需求就直接從數組中讀取;用PHP語言設計了一個緩存,用一個數組做隊列,設計了一個基于先進先出策略的緩存;調用Redis的一些數據結構來存儲數據。

內存叫做RAM,隨機可讀存儲器,硬盤一般叫做ROM,隨機只讀存儲器。

緩存包括cpu的一二級緩存、純內存結構的緩存、半內存緩存、磁盤緩存,它們的速度是一層比一層慢。當CPU要讀取一個數據時,首先從一級緩存中查找,如果沒有找到再從二級緩存中查找,如果還是沒有就從三級緩存或內存中查找,程序里面的各種數據結構、變量等等,都是運行在內存里面,而不是在硬盤上。

假設有一個場景,比如歷史用戶日志訪問數據,就是access_log,讓你去統計都有哪些用戶登錄了這個網站,當然現在還有用戶在持續登錄著。這個時候你是不是要先去從access_log里面讀取日志,然后提取出日志里面的userId,存到數組里面再去重。當新用戶來的時候,你只需要和你數組里面的用戶進行比較即可,就不需要再讀取access_log文件了。這樣就不用每次讀取文件,只需要讀取數組即可,速度回更快。 同理用Redis,也是因為當我們需要讀取數據時,先從Redis查找,如果有就直接返回,不用再從mysql查找,速度會很快。

從原理上講,PHP里面的數據結構用的是純內存,而Redis是需要走網絡的;

從速度上講,純內存的速度肯定是比先走網絡、再從內存中讀取的速度快。

雖然Redis作為半內存緩存,沒有直接內存結構的數據結構速度快,但Redis除了數據結構豐富外,還適合高并發場景,對高并發處理效率極高,此外可以做到集群式、可持久化。

三. 具體講一下Redis的數據結構,盡可能的舉出他們的應用場景。

Redis支持String、List、Set、Sorted Set、Hash等。

  • String類型是二進制安全的,可以用來緩存一些靜態文件,如圖片、視頻、css文件等。支持incr操作,可以用作計數器,比如統計網站訪問次數等。
  • 微博中“關注、粉絲”、論壇中所有回帖的ID用的就是list列表,還有消息隊列,也是列表。
  • Set可以快速查找元素是否存在,用于記錄一些不能重復的數據。例如: 在網站注冊賬號時,用戶名不能重復,使用Set記錄注冊用戶,如果注冊的用戶名已經存在于Set中,就拒絕該用戶注冊。或者用于記錄做過某些事情。例如: 在某些投票系統中,每個用戶一天只能投票一次,就可以用Set來記錄某個用戶的投票情況。
  • 順便給大家推薦一個Java架構群:834962734  里面會分享一些資深架構師錄制的視頻 資料 :有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化、分布式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多!
  • Set能做的事Sorted Set也能做,Sorted Set還能完成一些Set不能做的事情。例如:使用Sorted Set構建一個具有優先級的隊列。
  • Hash適用于存儲對象,比如把用戶的信息存到hash里,以用戶id為key,用戶的詳細信息為value。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

稷山县| 曲水县| 突泉县| 开江县| 黄骅市| 中西区| 乳源| 九龙坡区| 龙川县| 晋江市| 镇坪县| 徐闻县| 华安县| 延长县| 商城县| 阿拉善左旗| 天水市| 广元市| 准格尔旗| 湖州市| 丹凤县| 通辽市| 眉山市| 阳高县| 繁昌县| 江油市| 横山县| 迁西县| 呼伦贝尔市| 绥芬河市| 湘阴县| 临湘市| 济阳县| 济源市| 莱芜市| 新余市| 怀远县| 台北县| 元谋县| 永定县| 太谷县|