日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java redis自增操作_【转载】关于spring boot使用redis的increment()方法自增问题

發布時間:2025/4/16 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java redis自增操作_【转载】关于spring boot使用redis的increment()方法自增问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求是限制IP頻繁訪問某接口,用的方案是使用redis記錄訪問IP的值,先設定好初始值,每次訪問自增,達到某限定值后,進行阻止。

用的是自定義工具類,使用spring封裝的spring-data-redis進行操作,在對某key進行increment()方法時,報錯:

redis ERR value is not an integer or out of range

代碼邏輯如下:

Integer count = (Integer) redisUtil.get(ipAddress);//取得key的value

if (count == null){

redisUtil.set(ipAddress,1,10);

return false;

}else if(count == 3){

return false;

}else {

redisUtil.incr(ipAddress,1);

return false;

}

第一次進來,如果沒有redis中沒有數據,則設置key,value和time,key是ip, value初始值為1,有效時長為10秒。

如果沒達到限制次數,則對key自增1。

redisUtil.incr()方法實現如下:

@Resource

private RedisTemplate redisTemplate; //這里使用的是redisTemplate

public void setRedisTemplate(RedisTemplate redisTemplate) {

this.redisTemplate = redisTemplate;

}

/**

* 遞增

* @param key 鍵

// * @param by 要增加幾(大于0)

* @return

*/

public long incr(String key, long delta){

if(delta<0){

throw new RuntimeException("遞增因子必須大于0");

}

return redisTemplate.opsForValue().increment(key, delta);

}

開始以為是incr方法接受的參數是long型,但我傳入的是INTEGER類型,但轉換后還是沒有解決問題,問題不是出在這,后來通過查找資料發現,Spring對Redis序列化的策略有兩種,分別是StringRedisTemplate和RedisTemplate,其中StringRedisTemplate用于操作字符串,RedisTemplate使用的是JDK默認的二進制序列化。

大家都知道redis序列化是將key,value值先轉換為流的形式,再存儲到redis中。

RedisTemplate是使用的JdkSerializationRedisSerializer序列化,序列化后的值包含了對象信息,版本號,類信息等,是一串字符串,所以無法進行數值自增操作。

而StringRedisTemplate序列化策略是字符串的值直接轉為字節數組,所以存儲到redis中是數值,所以可以進行自增操作。

StringRedisSerializer源碼:

public class StringRedisSerializer implements RedisSerializer {

private final Charset charset;

public StringRedisSerializer() {

this(StandardCharsets.UTF_8);

}

public StringRedisSerializer(Charset charset) {

Assert.notNull(charset, "Charset must not be null!");

this.charset = charset;

}

public String deserialize(@Nullable byte[] bytes) {

return bytes == null ? null : new String(bytes, this.charset);

}

public byte[] serialize(@Nullable String string) {

return string == null ? null : string.getBytes(this.charset); //注意這里是字節數組

}

}

所以問題出在這里,我們需要自定義序列化策略,在application啟動類中添加如下:

@Bean

public RedisTemplate redisTemplate(RedisConnectionFactory factory) {

StringRedisTemplate template = new StringRedisTemplate(factory);

//定義key序列化方式

//RedisSerializer redisSerializer = new StringRedisSerializer();//Long類型會出現異常信息;需要我們上面的自定義key生成策略,一般沒必要

//定義value的序列化方式

Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

ObjectMapper om = new ObjectMapper();

om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

jackson2JsonRedisSerializer.setObjectMapper(om);

// template.setKeySerializer(redisSerializer);

template.setValueSerializer(jackson2JsonRedisSerializer);

template.setHashValueSerializer(jackson2JsonRedisSerializer);

template.afterPropertiesSet();

return template;

費了2多小時才成功解決問題,RedisUtil.incr()能夠成功對key進行自增了,如有錯誤之處請歡迎指出。

總結

以上是生活随笔為你收集整理的java redis自增操作_【转载】关于spring boot使用redis的increment()方法自增问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美综合激情网 | 男ji大巴进入女人视频 | 欧美日韩在线观看一区二区三区 | 天堂福利在线 | 国产成人毛片 | 欧美精品日韩精品 | 苏晴忘穿内裤坐公交车被揉到视频 | 日本中文在线观看 | 乱中年女人伦 | 人人妻人人爽欧美成人一区 | 男女一起插插插 | 怡红院亚洲 | 黑料视频在线观看 | 老外一级黄色片 | 草草在线影院 | 亚欧在线 | 看黄色大片 | 精品人体无码一区二区三区 | 天天做天天爱天天爽 | 天堂一区在线观看 | 日本美女黄色大片 | 一卡二卡在线观看 | 老头糟蹋新婚少妇系列小说 | 国产一级生活片 | 中文字幕一区二区三区四区五区 | 91成人网页 | 色哟哟网站在线观看 | 男人的天堂一级片 | av国产一区二区 | 亚洲综合91 | 美女吞精视频 | 岛国av大片 | 不卡视频一区 | 最新av导航 | 99热这里有精品 | 欧美系列在线观看 | 中日韩免费视频 | 新超碰在线 | av大全在线播放 | 香蕉人妻av久久久久天天 | 亚洲天天视频 | 福利在线影院 | 国产极品美女高潮无套嗷嗷叫酒店 | www狠狠干 | 国产视频日本 | 成人性生交大全免 | xxx日本黄色| av站| 久久尹人 | 欧美日韩亚洲成人 | 无码粉嫩虎白一线天在线观看 | 精品一区二区视频 | 亚洲人成色777777老人头 | 亚洲大胆 | 中文字幕一区二区三区门四区五区 | 九九综合九九综合 | 久久久亚洲av波多野结衣 | 免费日韩欧美 | 性――交――性――乱a | 日日干狠狠干 | 一本色道久久hezyo无码 | 三级色网 | 91tv国产成人福利 | 脱美女衣服亲摸揉视频 | 国产一级二级三级精品 | 成人免费黄色 | 黑人玩弄人妻一区二区绿帽子 | 亚洲欧美日韩国产一区 | 激情六月天婷婷 | 国产亚洲色婷婷久久 | 国产精品一区二区人人爽 | 那个网站可以看毛片 | 香蕉视频在线看 | 国产欧美日韩中文字幕 | av尤物| 黑人多p混交群体交乱 | 中文国语毛片高清视频 | 另类视频在线观看+1080p | 五月婷婷在线观看 | 在线观看a视频 | 亚洲最大视频网站 | 在线免费观看视频黄 | 日本熟妇浓毛 | 欧美自拍偷拍一区二区 | 亚洲图片一区二区 | 99在线免费视频 | 无码国产精品一区二区免费式直播 | 99久久综合 | 成人午夜免费福利视频 | 韩国主播青草200vip视频 | 少妇又紧又色又爽又刺激 | 精品一区二区久久久久久按摩 | 夜夜精品一区二区无码 | 第一章激情艳妇 | 欧美特黄| 久久无码国产视频 | 亚洲国产成人综合 | 在线观看免费人成视频 | 亚洲精品大全 |