电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Spring使用redis遇到的問題及解決方案

瀏覽:108日期:2023-09-12 11:10:41

本人在spring中使用redis作為緩存時(shí),遇到兩個(gè)坑,現(xiàn)在記錄如下,算是作為自己的備忘吧,文筆不好,望大家見諒;

一、配置文件

<!-- 加載Properties文件 --> <bean class='org.springframework.beans.factory.config.PropertyPlaceholderConfigurer'> <property name='locations'> <list><value>classpath*:config.properties</value> </list> </property> <property name='ignoreUnresolvablePlaceholders' value='true'/> </bean> <!-- 配置JedisPoolConfig實(shí)例 --> <bean class='redis.clients.jedis.JedisPoolConfig'> <!--最大空閑數(shù),數(shù)據(jù)庫(kù)連接的最大空閑時(shí)間。超過空閑時(shí)間,數(shù)據(jù)庫(kù)連接將被標(biāo)記為不可用,然后被釋放。設(shè)為0表示無限制--> <property name='maxIdle' value='300' /> <!--連接池的最大數(shù)據(jù)庫(kù)連接數(shù)。設(shè)為0表示無限制--> <property name='maxTotal' value='600' /> <!--最大建立連接等待時(shí)間。如果超過此時(shí)間將接到異常。設(shè)為-1表示無限制--> <property name='maxWaitMillis' value='1000' /> <!--在borrow一個(gè)jedis實(shí)例時(shí),是否提前進(jìn)行alidate操作;如果為true,則得到的jedis實(shí)例均是可用的--> <property name='testOnBorrow' value='true' /> <!--每次逐出檢查時(shí) 逐出的最大數(shù)目 如果為負(fù)數(shù)就是 : 1/abs(n), 默認(rèn)3--> <property name='numTestsPerEvictionRun' value='3'/> <!--逐出連接的最小空閑時(shí)間 默認(rèn)1800000毫秒(30分鐘)--> <property name='minEvictableIdleTimeMillis' value='300000'/> <!--逐出掃描的時(shí)間間隔(毫秒) 如果為負(fù)數(shù),則不運(yùn)行逐出線程, 默認(rèn)-1--> <property name='timeBetweenEvictionRunsMillis' value='60000'/> <!--在空閑時(shí)檢查有效性, 默認(rèn)false --> <property name='testWhileIdle' value='true' /> </bean> <!-- 配置JedisConnectionFactory,類似于數(shù)據(jù)庫(kù)的連接池 --> <bean class='org.springframework.data.redis.connection.jedis.JedisConnectionFactory'> <property name='hostName' value='${redis.host}'></property> <property name='port' value='${redis.port}'></property> <property name='password' value='${redis.password}'></property> <property name='database' value='${redis.dbIndex}'></property> <property name='poolConfig' ref='jedisPoolConfig'></property> <property name='timeout' value='100000'></property> </bean> <!-- 配置RedisTemplate --> <bean class='org.springframework.data.redis.core.RedisTemplate'> <property name='connectionFactory' ref='jedisConnectionFactory'></property> <!--如果不配置Serializer,那么存儲(chǔ)的時(shí)候缺省使用String,如果用User類型存儲(chǔ),那么會(huì)提示錯(cuò)誤User can’t cast to String!! --> <property name='keySerializer' > <bean /> </property> <property name='valueSerializer' > <bean /> </property> <property name='hashKeySerializer'> <bean /> </property> <property name='hashValueSerializer'> <bean /> </property> <!--開啟事務(wù) --> <property name='enableTransactionSupport' value='true'></property> </bean>

注:可以看到我redis的配置中,對(duì)于hash的key使用的是StringRedisSerializer序列化,而對(duì)于value使用的是GenericJackson2JsonRedisSerializer序列化。

二、坑一

// 源代碼HashOperations ho = redisTemplate.opsForHash();Boolean flag = ho.hasKey(“key”, 'key1');if (flag) { // 處理邏輯}

上面這段代碼,當(dāng)redis中值不存在時(shí),按照官方的說明文檔,應(yīng)該返回false。但是我使用的時(shí)候,hasKey方法時(shí)而返回的是null,時(shí)而返回的false,導(dǎo)致空指針異常。搞了半天我也沒搞明白為啥返回false,最后沒辦法我妥協(xié)了(大神如果知道可以回復(fù)我)。

// 妥協(xié)后代碼HashOperations ho = redisTemplate.opsForHash();Boolean flag = ho.hasKey(“key”, 'key1');if (flag != null && flag) { // 處理邏輯}

三、坑二

// 將Map放到redis的hash中 public void putRedisHash1(){ HashOperations ho = redisTemplate.opsForHash(); Map<String, Boolean> tempMap = new HashMap<String, Boolean>(3){{ put('isRegistered',false); put('isWeChat',false); put('isAliPay',false); }}; ho.put('key', 'key1', tempMap); } // 將Map放到redis的hash中 public void putRedisHash2(){ HashOperations ho = redisTemplate.opsForHash(); Map<String, Boolean> tempMap = new HashMap<String, Boolean>(3); tempMap.put('isRegistered',false); tempMap.put('isWeChat',false); tempMap.put('isAliPay',false); ho.put('key', 'key1', tempMap); }

這兩個(gè)方法的功能是一樣的,但是第一個(gè)方法是在Map初始化同時(shí)將值放入其中,第二個(gè)方法是Map初始化以后將值放入其中,執(zhí)行結(jié)果是一樣,但是在redis中的存儲(chǔ)形式完全不同。由于Hash的value使用的是GenericJackson2JsonRedisSerializer序列化,所以為了反序列化方便,它會(huì)存儲(chǔ)

@class“”這個(gè)字段,由于Map初始化時(shí)機(jī)不同,導(dǎo)致相同內(nèi)容在redis中@class內(nèi)容不一致,為了使用方便,推薦第二種,即在Map初始化以后將值放入其中。

Spring使用redis遇到的問題及解決方案

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 滑石粉,滑石粉厂家,超细滑石粉-莱州圣凯滑石有限公司 | 欧景装饰设计工程有限公司-无锡欧景装饰官网 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 | 外贸资讯网 - 洞悉全球贸易,把握市场先机 | 学生作文网_中小学生作文大全与写作指导| 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 盐城网络公司_盐城网站优化_盐城网站建设_盐城市启晨网络科技有限公司 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 热处理炉-退火炉-回火炉设备厂家-丹阳市电炉厂有限公司 | 北京公寓出租网-北京酒店式公寓出租平台| 换链神器官网-友情链接交换、购买交易于一体的站长平台 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 事迹材料_个人事迹名人励志故事| 电缆接头-防爆电缆接头-格兰头-金属电缆接头-防爆填料函 | 有声小说,听书,听小说资源库-听世界网 | 彩信群发_群发彩信软件_视频短信营销平台-达信通 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 | 山东彩钢板房,山东彩钢活动房,临沂彩钢房-临沂市贵通钢结构工程有限公司 | 路面机械厂家| RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 安徽合肥项目申报咨询公司_安徽合肥高新企业项目申报_安徽省科技项目申报代理 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 周口风机|周风风机|河南省周口通用风机厂 | 一级建造师培训_一建培训机构_中建云筑建造师培训网校 | 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 |