SSM整合redis,並且解決Could not get a resource from the pool
阿新 • • 發佈:2018-12-17
第一步:匯入redis依賴
<!-- jedis (一個redis client端的jar)-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
第二步:注入進spring-xml中
<!--redis配置--> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="host" value="你的虛擬機器IP地址"></constructor-arg> <constructor-arg name="port" value="6379"></constructor-arg> </bean>
第三步:建立一個redis包,並建立RedisCache類
@Service("redisCache") public class RedisCache { @Resource private JedisPool jedisPool; /** * 設定資料到redis * @param key * @param value */ public void setDataToRedis(String key,String value){ //先獲得池中jedis物件 Jedis jedis = jedisPool.getResource(); //在進行jedis操作 jedis.set(key,value); } /** * 獲得redis中的資料 * @param key * @return */ public String getDataFromRedis(String key){ Jedis jedis = jedisPool.getResource(); return jedis.get(key); } }
第四步:.在controller類中
@RequestMapping("/redis") public String redisCaches(Map map){ List<User> li = null; //1.先從redis快取中獲取資料 //1.1 先配置redis中的key String key="com.heyang.ssm.dao.UserDao.getAllUser"; //key => 所呼叫dao方法所在介面的包名+類名+方法名。 //key是唯一的 //1.2 去redis快取中按key獲值 String data=redisCache.getDataFromRedis(key); //1.3 判斷從redis取出的值是否為null //為null表示redis中沒有快取該資料 if(data==null){ //2.無:查詢資料庫 //呼叫dao方法,得到資料 li = userService.getAllUser(); //注意:redis中不能存放物件集合,必須要轉換json //先把物件集合轉成json(注意引入fastjson) String jsonString = JSON.toJSONString(li); //把查詢到結果放入到redis中 redisCache.setDataToRedis(key,jsonString); }else{ li = JSON.parseArray(data,User.class); } map.put("user",li); return "index.jsp"; }
如果報Could not get a resource from the pool的錯
注1:請去伺服器中把redis的保護模式關掉:config set protected-mode "no"(在Redis中關掉)
注2:請把redis的6379埠放出來
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload