Spring之借助Redis設計乙個簡單訪問計數器

2021-09-11 12:46:51 字數 3582 閱讀 6648

為什麼要做乙個訪問計數?之前的個人部落格用得是卜運算元做站點訪問計數,用起來挺好,但出現較多次的響應很慢,再其次就是個人部落格實在是訪問太少,資料不好看?...

前面一篇博文簡單介紹了spring中的redistemplate的配置與使用,那麼這篇算是乙個簡單的應用case了,主要基於redis的計數器來實現統計

乙個簡單的訪問計數器,主要利用redis的hash結構,對應的儲存結構如下:

主要就是利用redis的hash結構,然後實現資料統計,並沒有太多的難度,spring環境下搭建redis環境可以參考:

針對幾個常用的做了簡單的封裝,直接使用redistemplate的excute方法進行的操作,當然也是可以使用template.opsforvalue()等便捷方式,這裡採用json方式進行物件的序列化和反序列化

public

class

quickredisclient

public

static

void

nullcheck

(object... args)}}

public

static

byte tobytes(string key)

public

static

byte tobytes(listkeys)

return bytes;

}public

static string getstr

(string key)

); }

public

static

void

putstr

(string key, string value)

); }

public

static long incr

(string key, long add)

); }

public

static long hincr

(string key, string field, long add)

); }

public

static

t hget

(string key, string field, classclz)

return json.parseobject(records, clz);

});}

public

static

maphmget

(string key, listfields, classclz)

mapresult = new hashmap<>();

for (int i = 0; i < fields.size(); i++)

result.put(fields.get(i), json.parseobject(list.get(i), clz));

}return result;

}}複製**

對應的配置類

package com.git.hui.story.cache.redis;

import com.git.hui.story.cache.redis.serializer.defaultstrserializer;

import org.springframework.cache.cachemanager;

import org.springframework.context.annotation.bean;

import org.springframework.context.annotation.configuration;

import org.springframework.context.annotation.propertysource;

import org.springframework.core.env.environment;

import org.springframework.data.redis.cache.rediscachemanager;

import org.springframework.data.redis.connection.redisconnectionfactory;

import org.springframework.data.redis.connection.redispassword;

import org.springframework.data.redis.connection.lettuce.lettuceconnectionfactory;

import org.springframework.data.redis.core.redistemplate;

/** * created by yihui in 18:45 18/6/11.

*/@configuration

public

class

redisconf

@bean

public cachemanager cachemanager

() @bean

public redistemplateredistemplate

(redisconnectionfactory redisconnectionfactory)

@bean

public redisconnectionfactory redisconnectionfactory()}

複製**

首先是定義請求引數:

@data

public

class

webcountreqdo

implements

serializable

複製**

其次是實現controller介面,稍稍注意下,根據path進行計數的邏輯:

@slf4j

@restcontroller

public

class

webcountcontroller

string referer = reqinfocontext.getreqinfo().getreferer();

if (stringutils.isblank(referer))

if (stringutils.isblank(referer))

}private countdto doupdatecnt

uri uri = new uri(referer);

string host = uri.gethost();

string path = uri.getpath();

return

new countdto(count, total);

} catch (exception e) , e: {}", referer, e);

return

new countdto(1l, 1l);}}

}複製**

針對這個簡單的redis計數,目前在個人的mweb和zweb兩個頁面已經接入,在頁尾處可以看到對應的計數,每次重新整理計數會+1

盡信書則不如,已上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

Spring 借助Thymeleaf實現表單繫結

只要目標專一而不三心二意,持之以恆而不半途而廢,就一定能夠實現我們美好的理想。使用thymeleaf將乙個表單繫結到th object指定的物件上。html xmlns xmlns th head title register title head body form method post th ...

Redis之Spring常用註解整理

redis 是乙個key value 的儲存系統,value可以儲存string,list,map等各種型別的資料。多用於快取每次都要查詢的固定資料,降低對資料庫的訪問量,調高 效能。下面主要介紹spring的三個關於redis的註解,cacheable,cacheevict,cacheput。ca...

Apache mina 與Spring整合設計

其實很簡單,看了網上很多例子,但是發現還是apache自己寫的比較好,於是就抄下來了。先說配置檔案,color red 注意這裡不能使用延遲載入和 byname 的方式找bean color 再然後我們只需要實現myprotocolhandler就可以了,只在接收資料加了處理,資料傳輸用的是byte...