首頁 > 資料庫 > Redis > Spring-data-redis整合redis的方法

Spring-data-redis整合redis的方法

發布: 2020-04-17 09:06:26
轉載
2433 人瀏覽過

Spring-data-redis整合redis的方法

Spring-data-redis是spring大家族的一部分,提供了在srping應用程式中透過簡單的配置存取redis服務,對reids底層開發套件(Jedis, JRedis, and RJC )進行了高度封裝。

一、安裝redis服務 

1、下載安裝redis服務,安裝完成後會自動啟動redis服務

sudo apt-get install redis-server
登入後複製

2、下載完成後,我們可以透過指令檢查redis服務程序

ps -aux|grep redis
登入後複製

結果如下圖所示:

Spring-data-redis整合redis的方法

#3、也可以檢查Redis服務的狀態

netstat -nlt|grep 6379

#结果如下:
# tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
登入後複製

4、通過指令檢查redis服務狀態

sudo /etc/init.d/redis-server status
# 结果如下:redis-server is running
登入後複製

二、設定redis

# 编辑redis配置文件
sudo vim /etc/redis/redis.conf

# 在vim中设置redis访问密码
requirepass 123456

# 在vim中注释bind,设置允许远程访问,redis默认只允许本机访问
#bind 127.0.0.1

# 重启redis服务
sudo /etc/init.d/redis-server restart

# 客户端访问redis服务
sudo redis-cli

# 客户端登录并访问redis服务
sudo redis-cli -a youpassword

# 远程客户端登录并访问redis服务
sudo redis-cli -a youpassword -h 192.168.1.22
登入後複製

三、寫java程式碼

1、cache介面定義

public interface Cache {

    /**
     * 添加
     * @param key
     * @param value
     */
    void put(Object key, Object value);
    
    /**
     * 得到key的值
     * @param key
     * @return
     */
    Object get(Object key);

    /**
     * 移除key
     * @param key
     * @return
     */
    Object remove(Object key);

}
登入後複製

2、cache接口實作

import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisListCommands;
import org.springframework.data.redis.connection.RedisStringCommands;
import org.springframework.data.redis.connection.RedisZSetCommands;
import org.springframework.data.redis.connection.jedis.JedisConverters;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.data.redis.core.types.Expiration;
import org.springframework.data.redis.serializer.RedisSerializer;
import redis.clients.jedis.Jedis;

public class DefaultRedisCache implements Cache {

    private final static Logger logger = LoggerFactory.getLogger(DefaultRedisCache.class);

    private RedisTemplate redisTemplate;

    //秒
    private final static Long DEFAULT_EXPIRE = 12 * 60 * 60L;

    public DefaultRedisCache(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    @Override
    public void put(final Object key, final Object value) {
        put(key, value, DEFAULT_EXPIRE);
    }

    @Override
    public Object get(final Object key) {
        return redisTemplate.execute(new RedisCallback() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {

                RedisSerializer<Object> serializer = getRedisSerializer();

                byte[] keyByte = serializer.serialize(key);
                if(keyByte == null){
                    return null;
                }
                byte[] bytes = connection.get(keyByte);

                if (bytes == null) {
                    return null;
                }

                return serializer.deserialize(bytes);
            }
        });
    }

    @Override
    public Object remove(final Object key) {
        return redisTemplate.execute(new RedisCallback() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {

                RedisSerializer<Object> serializer = getRedisSerializer();

                if (key == null) {
                    return null;
                }

                byte[] bytes = serializer.serialize(key);

                return connection.del(bytes);
            }
        });
    }
登入後複製

3、設定applicationContext-cache-test.xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:property-placeholder location="classpath:redis-config.properties" ignore-unresolvable="true"/>

    <!-- jedis pool配置 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${commons.cache.redis.maxTotal}" />
        <property name="maxIdle" value="${commons.cache.redis.maxIdle}" />
        <property name="maxWaitMillis" value="${commons.cache.redis.maxWait}" />
        <property name="testOnBorrow" value="${commons.cache.redis.testOnBorrow}" />
        <property name="testOnReturn" value="${commons.cache.redis.testOnReturn}" />
    </bean>

    <!-- spring data redis -->
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="usePool" value="true"></property>
        <property name="hostName" value="${commons.cache.redis.host}" />
        <property name="port" value="${commons.cache.redis.port}" />
        <property name="password" value="${commons.cache.redis.password}" />
        <property name="timeout" value="${commons.cache.redis.timeout}" />
        <!--<property name="database" value="${commons.cache.redis.default.db}"></property>-->
        <property name="poolConfig" ref="jedisPoolConfig" />
    </bean>

    <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory" />
    </bean>
    
    <!-- 自定义缓存工厂接口 -->
    <bean id="cacheFactory" class="com.xxx.cache.factory.CacheFactory"  p:redisTemplate-ref="redisTemplate"/>
</beans>
登入後複製

4、設定redis-config.properties檔案

# jedis pool配置
commons.cache.redis.maxTotal=1000
commons.cache.redis.maxIdle=600
commons.cache.redis.maxWait=1000
commons.cache.redis.testOnBorrow=true
commons.cache.redis.testOnReturn=true

# spring data redis 配置
commons.cache.redis.host=192.168.1.230
commons.cache.redis.port=6379
commons.cache.redis.password=123456
commons.cache.redis.timeout=1000
登入後複製

#5、測試

@ContextConfiguration(locations = {
        "classpath:applicationContext-cache-test.xml"
})
@RunWith(SpringJUnit4ClassRunner.class)
public class CacheTest extends BaseTest{

    @Autowired
    private Cache cache;

    @Test
    public void redisTest() {

        // 添加key为username的值到redis缓存里
        cache.put("username","nathan");

        // 获取值
        Object username = cache.get("username");
        System.out.println("cache.get = " + username);

        // 删除值
//        cache.remove("username");
//        Object delResult = cache.get("username");
//        System.out.println("cache.remove = " + delResult);
    }

}
登入後複製

更多redis知識請關注redis入門教學欄位。

以上是Spring-data-redis整合redis的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:oschina.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板