Spring Boot教程七:整合redis

來源:互聯網
上載者:User

redis在開發中常用於緩衝,使用者權限管理,訊息佇列等功能,今天學習一下springboot整合redis的方式,redis的安裝啟動可以百度到,這裡只講代碼的實現方式。
首先,引入相關依賴:

 <!-- 添加redis支援 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-redis</artifactId>            <version>1.2.8.RELEASE</version>        </dependency>

將我們之前在讀取設定檔中建立的ReadProperties更名為RedisUtil,代碼更改如下:

/** * @Package:com.springboot.utils * @ClassName:RedisUtil * @Description:redis工具類 * @Author Shuyu.Wang * @Date 2017-12-07 12:18 **/@EnableConfigurationProperties({Redis.class})@Componentpublic class RedisUtil {    @Autowired    private Redis redis;    public void read(){        System.out.println(redis.getIp());    }    /**     * 非切片連結池     */    private JedisPool jedisPool;    /**     * 非切片串連池初始化     */    private JedisPool initialPool() {        // 池基本配置        JedisPoolConfig config = new JedisPoolConfig();        config.setMaxTotal(redis.getMaxTotal());        config.setMaxIdle(redis.getMaxIdle());        config.setMaxWaitMillis(redis.getMaxActive());        config.setTestOnBorrow(redis.getTestOnBorrow());        config.setTestOnReturn(redis.getTestOnReturn());        jedisPool = new JedisPool(config, redis.getIp(), redis.getPort());        return jedisPool;    }    /**     * 在多線程環境同步初始化     *     */    private synchronized void poolInit() {        if (jedisPool == null) {            initialPool();        }    }    /**     * 非切片用戶端連結 同步擷取非切片Jedis執行個體     *     * @return Jedis     *     */    @SuppressWarnings("deprecation")    public synchronized Jedis getJedis() {        if (jedisPool == null) {            poolInit();        }        Jedis jedis = null;        try {            if (jedisPool != null) {                jedis = jedisPool.getResource();                // jedis.auth(password);            }        } catch (Exception e) {            System.out.println("拋錯");            e.printStackTrace();            // 釋放jedis對象            jedisPool.returnBrokenResource(jedis);        } finally {            // 返還串連池            if (jedis != null && jedisPool != null) {                jedisPool.returnResource(jedis);            }        }        return jedis;    }}

另外新進一個工具類,實現序列化和還原序列化:

/** * 序列化工具類 * @author Shuyu.Wang * */public class SerializeUtil {    /**     * 序列化     * @param value     * @return     */    public static byte[] serialize(Object value) {        if (value == null) {            throw new NullPointerException("Can't serialize null");        }        byte[] rv = null;        ByteArrayOutputStream bos = null;        ObjectOutputStream os = null;        try {            bos = new ByteArrayOutputStream();            os = new ObjectOutputStream(bos);            os.writeObject(value);            os.close();            bos.close();            rv = bos.toByteArray();        } catch (IOException e) {            throw new IllegalArgumentException("Non-serializable object", e);        } finally {            try {                if (os != null)                    os.close();                if (bos != null)                    bos.close();            } catch (Exception e2) {                e2.printStackTrace();            }        }        return rv;    }    /**還原序列化     * @param bytes     * @return     */    public static Object unserialize(byte[] bytes) {        Object rv = null;        ByteArrayInputStream bis = null;        ObjectInputStream is = null;        try {            if (bytes != null) {                bis = new ByteArrayInputStream(bytes);                is = new ObjectInputStream(bis);                rv = is.readObject();                is.close();                bis.close();            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (is != null)                    is.close();                if (bis != null)                    bis.close();            } catch (Exception e2) {                e2.printStackTrace();            }        }        return rv;    }}

另外建立一個redis的包,建立RedisService介面類,和對應的實作類別RedisServiceImpl;
代碼分別如下;

/** * @ClassName: RedisDao  * @Description: redis介面 * @author shuyu.wang * @date 2017年11月23日 下午3:55:53  * @version V1.0 */public interface RedisService {    public void setString(String key, int seconds, String value);    public boolean exist(String key);    /**     * 儲存String     * @param key     * @param param     */    public <T> boolean setString(String key, String param);    /**     * 擷取Stringֵ     * @param key     * @return String     */    public String getString(String key);    /**     * 儲存實體類     * @param key     * @param bean     */    public <T> boolean setBean(String key, Object bean);    /**     * 擷取實體類     * @param key     * @return T     */    public <T> T getBean(String key);    /**     * 儲存 list     * @param key     * @param list     */    public <T> boolean setList(String key, List<T> list);    /**     * 擷取list     * @param key     * @return list     */    public <T> List<T> getList(String key);    /**     * 儲存 map     * @param key     * @param map     */    public <T> boolean setMap(String key, Map<String, T> map);    /**     * 擷取map     * @param key     * @return Map     */    public <T> Map<String, T> getMap(String key);    /**     * @param key     * @return     */    public boolean del(String key);    /**     * @param key     * @param num     * @return     */    public <T> boolean setInteger(String key, Integer num);    /**     * @param key     * @return     */    public Integer getSetInteger(String key, Integer num);    /**     * @param key     * @return     */    public Integer getInteger(String key);    /**     * 非序列化儲存     * @param key     * @param map     * @return     */    public <T> boolean setHash(String key, Map<String, String> map);    /**擷取key中所有的map的key值     * @param key     * @return     */    public  Map<String, String> getAllHash(String key);    /**擷取key中的Map中的key=fields 的value集合     * @param key     * @param fields     * @return     */    public List<String> getHashm(String key, String... fields);    /**     * @Title: login     * @Description: TODO     * @param  userId    * @param  second    * @return String 返回token    * @throws     */    public String login(String userId, int second);    public Boolean validate(String token);    public void logout(String token);    public String getUserId(String token);}
/** * @ClassName: RedisDaoImpl  * @Description: TODO * @author shuyu.wang * @date 2017年10月19日 下午2:54:39  * @version V1.0 */@Servicepublic class RedisServiceImpl implements RedisService {    private static final String VIRTUAL_COURSE_PREX = "lc_vc_";    @Autowired    private RedisUtil redisUtil;    private static final String RETURN_OK="OK";    /**     *      * @param key     * @return     */    public String buildKey(String key) {        return VIRTUAL_COURSE_PREX + key;    }    /*     * (non-Javadoc)     *      * @see com.shuyu.cache.RedisDao#setString(java.lang.String, int,     * java.lang.String)     */    @Override    public void setString(String key, int seconds, String value) {        Jedis jedis = redisUtil.getJedis();        jedis.setex(buildKey(key), seconds, value);    }    /*     * (non-Javadoc)     *      * @see com.shuyu.cache.RedisDao#exist(java.lang.String)     */    @Override    public boolean exist(String key) {        Jedis jedis = redisUtil.getJedis();        String bKey = buildKey(key);        if (jedis == null || !jedis.exists(bKey)) {            return false;        }        return true;    }    /**     *      * @param key     * @param param     */    @Override    public <T> boolean setString(String key, String param) {        Jedis jedis = redisUtil.getJedis();        String bKey = buildKey(key);        String set = null;        System.out.println("jedis=============="+jedis);        set = jedis.set(bKey.getBytes(), SerializeUtil.serialize(param));        if (!set.isEmpty() && (RETURN_OK).equals(set)) {            return true;        } else {            return false;        }    }    /**     * ��ȡStringֵ     *      * @param key     * @return String     */    @Override    public String getString(String key) {        Jedis jedis = redisUtil.getJedis();        String bKey = buildKey(key);        String retru = null;        if (jedis == null || !jedis.exists(bKey)) {            return null;        }        byte[] in = jedis.get(bKey.getBytes());        retru = SerializeUtil.unserialize(in).toString();        return retru;    }    /**     *      * @param key     * @param bean     */    @Override    public <T> boolean setBean(String key, Object bean) {        String bKey = buildKey(key);        Jedis jedis = redisUtil.getJedis();        String set = null;        set = jedis.set(bKey.getBytes(), SerializeUtil.serialize(bean));        if (!set.isEmpty() && (RETURN_OK).equals(set)) {            return true;        } else {            return false;        }    }    /**     *      * @param key     * @return T     */    @SuppressWarnings("unchecked")    @Override    public <T> T getBean(String key) {        Jedis jedis = redisUtil.getJedis();        String bKey = buildKey(key);        T bean = null;        if (jedis == null || !jedis.exists(bKey.getBytes())) {            return null;        }        byte[] in = jedis.get(bKey.getBytes());        bean = (T) SerializeUtil.unserialize(in);        return bean;    }    /**     * @param key     * @param list     */    @Override    public <T> boolean setList(String key, List<T> list) {        Jedis jedis = redisUtil.getJedis();        String bKey = buildKey(key);        String set = null;        set = jedis.set(bKey.getBytes(), SerializeUtil.serialize(list));        if (!set.isEmpty() && (RETURN_OK).equals(set)) {            return true;        } else {            return false;        }    }    /**     *      * @param key     * @return list     */    @SuppressWarnings("unchecked")    @Override    public <T> List<T> getList(String key) {        Jedis jedis = redisUtil.getJedis();        String bKey = buildKey(key);        List<T> list = null;        if (jedis == null || !jedis.exists(bKey.getBytes())) {            return null;        }        byte[] in = jedis.get(bKey.getBytes());        list = (List<T>) SerializeUtil.unserialize(in);        return list;    }    /**     *      * @param <T>     * @param key     */    @Override    public <T> boolean setMap(String key, Map<String, T> map) {        String bKey = buildKey(key);        Jedis jedis = redisUtil.getJedis();        String set = null;        set = jedis.set(bKey.getBytes(), SerializeUtil.serialize(map));        if (!set.isEmpty() && (RETURN_OK).equals(set)) {            return true;        } else {            return false;        }    }    /**     *      * @param key     * @return Map     */    @Override    @SuppressWarnings("unchecked")    public <T> Map<String, T> getMap(String key) {        String bKey = buildKey(key);        Jedis jedis = redisUtil.getJedis();        Map<String, T> map = null;        if (jedis == null || !jedis.exists(bKey.getBytes())) {            return null;        }        byte[] in = jedis.get(bKey.getBytes());        map = (Map<String, T>) SerializeUtil.unserialize(in);        return map;    }    @Override    public boolean del(String key) {        String bKey = buildKey(key);        Jedis jedis = redisUtil.getJedis();        Long del = (long) 0;        if (jedis == null || !jedis.exists(bKey.getBytes())) {            return false;        }        del = jedis.del(bKey.getBytes());        if (del > 0) {            return true;        }        return false;    }    @Override    public <T> boolean setInteger(String key, Integer num) {        Jedis jedis = redisUtil.getJedis();        String bKey = buildKey(key);        String set = null;        set = jedis.set(bKey, String.valueOf(num));        if (!set.isEmpty() && (RETURN_OK).equals(set)) {            return true;        } else {            return false;        }    }    @Override    public Integer getSetInteger(String key, Integer num) {        String bKey = buildKey(key);        Jedis jedis = redisUtil.getJedis();        String set = null;        set = jedis.getSet(bKey, String.valueOf(num));        return Integer.valueOf(set);    }    @Override    public Integer getInteger(String key) {        String bKey = buildKey(key);        Jedis jedis = redisUtil.getJedis();        String set = null;        if (jedis == null || !jedis.exists(bKey)) {            return null;        }        set = jedis.get(bKey);        return Integer.valueOf(set);    }    @Override    public <T> boolean setHash(String key, Map<String, String> map) {        String bKey = buildKey(key);        Jedis jedis = redisUtil.getJedis();        String hmset = null;        hmset = jedis.hmset(bKey, map);        if (!hmset.isEmpty() && (RETURN_OK).equals(hmset)) {            return true;        } else {            return false;        }    }    @Override    public Map<String, String> getAllHash(String key) {        String bKey = buildKey(key);        Jedis jedis = redisUtil.getJedis();        Map<String, String> map = null;        if (jedis == null || !jedis.exists(bKey)) {            return null;        }        map = jedis.hgetAll(bKey);        return map;    }    @Override    public List<String> getHashm(String key, String... fields) {        String bKey = buildKey(key);        Jedis jedis = redisUtil.getJedis();        List<String> list = null;        if (jedis == null || !jedis.exists(bKey)) {            return null;        }        list = jedis.hmget(bKey, fields);        return list;    }    /*     * (non-Javadoc)     *      * @see com.hc.redis.dao.RedisDao#login(java.lang.String, int)     */    @Override    public String login(String userId, int second) {        Jedis jedis = redisUtil.getJedis();        String token = buildKey(userId);        if (jedis == null || !jedis.exists(token)) {            // token生產規則自訂ֵ            jedis.setex(token, second, userId);        } else {            jedis.expire(token, second);        }        return token;    }    @Override    public Boolean validate(String token) {        Jedis jedis = redisUtil.getJedis();        

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.