1. 程式人生 > >SSM整合redis,並且解決Could not get a resource from the pool

SSM整合redis,並且解決Could not get a resource from the pool

第一步:匯入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