記錄自己的redis之路-05-redis熱搜排序例項
建立MySort例項
package com.qrcode.redisdemo.redis02; import com.qrcode.redisdemo.redis.RedisService; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Set; @Component public class MySort { private static final String ZSET = "zset"; @Resource private RedisService redisService; /** * 根據key 進行快取操作 * @param key */ public void sort(String key){ Long rank2 = redisService.rank(ZSET, key); // 如果rank2為null,則快取裡面不存在該值 if(null == rank2){ // 不存在,則新增,預設排序為1 redisService.zAdd(ZSET,key,1.0); System.out.println("當前:"+key +":的搜尋次數為"+1); }else { // 如果存在,則獲取排序值 並且+1 int score = (int)redisService.score(ZSET, key); System.out.println("當前:"+key +":的搜尋次數為"+(score+1)); redisService.zAdd(ZSET,key,score+1); } } /** * 從高到低的排序集中獲取從頭(start)到尾(end)內的元素。 * @param start 0 表示第一個 * @param end -1 表示最後 * @return */ public Set<Object> findZset(long start, long end){ return redisService.reverseRange(ZSET, start, end); } }
redisService中的方法:
/** * 獲得key數組裡面key2元素的索引 * @param key * @param key2 * @return */ public Long rank(String key, Object key2) { ZSetOperations<String, Object> zset = redisTemplate.opsForZSet(); return zset.rank(key, key2); } /** * 有序集合新增 * * @param key * @param value * @param scoure */ public void zAdd(String key, Object value, double scoure) { ZSetOperations<String, Object> zset = redisTemplate.opsForZSet(); zset.add(key, value, scoure); } /** * 獲得key數組裡面key2元素的排序值 * @param key * @param key2 * @return */ public double score(String key, Object key2) { ZSetOperations<String, Object> zset = redisTemplate.opsForZSet(); return zset.score(key, key2); } /** * 從高到低的排序集中獲取從頭(start)到尾(end)內的元素。 * @param key * @param start * @param end * @return */ public Set<Object> reverseRange(String key, long start, long end) { ZSetOperations<String, Object> zset = redisTemplate.opsForZSet(); return zset.reverseRange(key, start, end); }
結果:
第一次
mySort.sort("上海");
Set<Object> zset = mySort.findZset(0, -1);
for (Object o : zset){
System.out.println(o);
}
此時再加入一個
mySort.sort("上海");
mySort.sort("北京");
Set<Object> zset = mySort.findZset(0, -1);
for (Object o : zset){
System.out.println(o);
}
此時的資料都在set集合中, 可以考慮定時任務
相關推薦
記錄自己的redis之路-05-redis熱搜排序例項
建立MySort例項 package com.qrcode.redisdemo.redis02; import com.qrcode.redisdemo.redis.RedisService; im
記錄自己的redis之路-03-redis主從配置
應用場景 一般來說,要將Redis運用於工程專案中,只使用一臺Redis是萬萬不能的,原因如下: a) 從結構上,單個Redis伺服器會發生單點故障,並且一臺伺服器需要處理所有的請求負載,壓力較大; b) 從容量上,單個Redis伺服器記憶體容量有限,就算一臺Redis
菜雞的redis之路(三)-redis啟動3個警告資訊解決
Redis伺服器啟動3個警告資訊的解決方案 ################################################################################## 第一個警告資訊:The TCP backlog settin
Redis 學習之路 (010) - redis命令手冊
哈希 sts 集中 cluster htm second 不同 index scribe Redis 鍵(key) 命令 命令描述 Redis DEL 命令 該命令用於在 key 存在是刪除 key。 Redis Dump 命令 序列化給定 key ,並返回被
大資料學習之路103-redis的分片代理
哨兵的出現是為了實現主節點的HA,那麼從節點會不會出現問題呢? 假如所有的讀取操作都在從節點6380上,那麼6380節點就會很累,而6381節點就會很清閒。 這個時候就需要負載均衡,我們這裡的負載均衡需要通過代理伺服器來實現。我們可以將需要訪問的從節點的位置配置在代理伺服器上。
大資料學習之路102-redis的哨兵機制
哨兵的HA會通過修改配置檔案來實現主節點的切換。 只有主節點有寫許可權,從節點只能讀。 我們接下來實驗一下: 首先我們將redis的三個埠的服務啟動起來: 然後我們啟動哨兵: 接下來我們強制將主節點關掉,看哨兵會做什麼事? 我們可以看到此時的
大資料學習之路101-redis的持久化詳解及主從複製
接下來我們配置一下主從結構的星型模型: 首先將配置檔案複製3份, 然後修改主節點的配置檔案: 首先關閉RDB: 然後關閉AOF: 修改第二個配置檔案: 先修改埠,他不能和主節點的埠衝突: 為了區分是哪個節點打的日誌,我們還需要
Redis之路
前言:資料庫是一切資料的源頭,因此我們沒有逃避的理由 (一) 什麼是redis? redis是nosql(not noly sql)產品中最為出色的一種非關係型的資料庫,主要包括以下幾種儲存結構:String,list,set,hash,sorted set,為高併發而生,其中讀的速度為11
菜雞的redis之路(四)-常見快取問題之快取穿透
常見的redis快取問題 1.快取穿透 -->頻繁查詢一個不存在的資料,由於快取不命中,每次都要查詢持久層,從而失去快取的意義 2.快取雪崩 -->快取大量失效的時候,引發大量查詢資料庫 3.熱點Key -->某個key訪問非常頻繁,當key失效的時候,有大
java架構之路-(Redis專題)Redis的高效能和持久化
上次我們簡單的說了一下我們的redis的安裝和使用,這次我們來說說redis為什麼那麼快和持久化資料 在我們現有的redis中(5.0.*之前的版本),Redis都是單執行緒的,那麼單執行緒的Redis為什麼還會有那麼高的效率呢?因為它所有的資料都在記憶體中,所有的運算都是記憶體級別的運算,而且單執行
java架構之路-(Redis專題)Redis的主從、哨兵和叢集
我們使用的redis,單機的絕對做不到高可用的,萬一單機的redis宕機了,就沒有備用的了,我們可以採用叢集的方式來保證我們的高可用操作。 主從架構 大致就是這樣的,一個主節點,兩個從節點(一般兩個就可以了) 主從工作原理 如果你為master配置了一個slave,不管這個sla
java架構之路-(Redis專題)SpringBoot連線Redis超簡單
上次我們搭建了Redis的主從架構,哨兵架構以及我們的叢集架構,但是我們一直還未投入到實戰中去,這次我們用jedis和springboot兩種方式來操作一下我們的redis 主從架構 如何配置我上次已經講過了,https://www.cnblogs.com/cxiaocai/p/11711377.ht
java架構之路-(Redis專題)簡單聊聊redis分散式鎖
這次我們來簡單說說分散式鎖,我記得過去我也過一篇JMM的記憶體一致性演算法,就是說拿到鎖的可以繼續操作,沒拿到的自旋等待。 思路與場景 我們在Zookeeper中提到過分散式鎖,這裡我們先用redis實現一個簡單的分散式鎖,這裡是我們一個簡單的售賣減庫存的小例項,剩餘庫存假設存在資料庫內。 @Get
java架構之路-(Redis專題)聊聊大廠那些redis
上幾次說了redis的主從,哨兵,叢集配置,但是內部的選舉一直沒說,先來簡單說一下選舉吧。 叢集選舉 redis cluster節點間採取gossip協議進行通訊,也就是說,在每一個節點間,無論主節點還是從節點,他們之間都是存在相互通訊的。例如你的redis埠號是6379,那麼你的gossip協議埠號
java架構之路-(Redis專題)redis面試助力滿分+
1.Redis支援的資料型別? 答:五種,在第一節redis相關的部落格我就說過,String,Hash,List,Set,zSet,也就是我們的字串,雜湊,列表,集合,有序集合五種。結構圖如下。 2.什麼是Redis持久化?Redis有哪幾種持久化方式?優缺點是什麼? 答:Redis持久化主
[ASP.NET MVC 小牛之路]05 - 使用 Ninject實現依賴註入
構造註入 ted ets pathinfo ref 最重要的 map ice prot 在[ASP.NET MVC 小牛之路]系列上一篇文章(依賴註入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的兩件事情,續這篇文章之後,本文將用一
記錄Python學習之路----------------應用工具
完全小白最近想要自學Python,也想要好好經營自己的部落格,於是開啟我的第一個部落格,希望自己能堅持下去寫下去。好了不多說,開始吧。 1.安裝python3 Windows系統下,首先檢查電腦是否安裝過Python,按下“windoes+R”進入命令視窗,輸入‘’Python‘’,回車。如
記錄python學習之路----------------------------------------函式
函式的基本結構: def 函式名(): 操作程式碼 def是函式定義,告訴python函式名,冒號後面的語句都要縮排,縮排的語句是函式體。注意,千萬要注意縮排。 最重要的是一般情況下,函式會有實參和形參,形參是函式完成其工作所需的一
記錄python學習之路----------------------------------------------使用者輸入和while迴圈
乘著週末休息,跟新之前學習的知識,也算是複習了。 一、使用者輸入 使用者輸入:input函式,python主要解讀為字串,對於數值輸入該如何呢,採用int(),將數字的字串轉換為數值。 在處理數值關係時,除了等於不等於大於小於等,還有求模運算子%,兩個數相除,返回餘數。這就可以用作偶
記錄Python學習之路-----------------------------《Python程式設計入門到實踐》作業習題合集 ====接上一章
接上一章連結如下: https://blog.csdn.net/shinhwa96/article/details/83373902 #-*-coding:GBK-*- #-*-coding:utf-8-*- #7-4 pizza_peiliao="請您輸入pizza配料:" messa