springboot(七).springboot整合jedis實現redis緩存

                                                                                   

       咱們在使用springboot搭建微服務的時候,在不少時候仍是須要redis的高速緩存來緩存一些數據,存儲一些高頻率訪問的數據,若是直接使用redis的話又比較麻煩,在這裏,咱們使用jedis來實現redis緩存來達到高效緩存的目的,接下來,讓咱們一塊兒來使用jedis來實現redis緩存java

  1.在pom.xml文件中添加依賴redis

<!-- jedis -->
    <dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.8.2</version>
    </dependency>

 

  2. 在springboot的配置文件中加入redis的配置信息spring

#redis jedis配置
# Redis數據庫索引(默認爲0)
spring.redis.database=0
# Redis服務器地址
spring.redis.host=10.100.140.84
# Redis服務器鏈接端口
spring.redis.port=6379
# Redis服務器鏈接密碼(默認爲空)
#spring.redis.password=
# 鏈接池最大鏈接數(使用負值表示沒有限制)
spring.redis.pool.max-active=200
# 鏈接池最大阻塞等待時間(使用負值表示沒有限制)
spring.redis.pool.max-wait=-1
# 鏈接池中的最大空閒鏈接
spring.redis.pool.max-idle=8
# 鏈接池中的最小空閒鏈接
spring.redis.pool.min-idle=0
# 鏈接超時時間(毫秒)
spring.redis.timeout=0
#spring-session 使用
spring.session.store-type=none

  3.建立jedis配置文件,配置文件的做用是在項目啓動的時候將jedis注入,接着咱們就能夠在其餘類中獲取到JedisPool類的信息數據庫

  

@Configuration
public class JedisConfig extends CachingConfigurerSupport{
    private Logger logger = LoggerFactory.getLogger(JedisConfig.class);

    /**
     * SpringSession  須要注意的就是redis須要2.8以上版本,而後開啓事件通知,在redis配置文件裏面加上
     * notify-keyspace-events Ex
     * Keyspace notifications功能默認是關閉的(默認地,Keyspace 時間通知功能是禁用的,由於它或多或少會使用一些CPU的資源)。
     * 或是使用以下命令:
     * redis-cli config set notify-keyspace-events Egx
     * 若是你的Redis不是你本身維護的,好比你是使用阿里雲的Redis數據庫,你不可以更改它的配置,那麼可使用以下方法:在applicationContext.xml中配置
     * <util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>
     * @return
     */

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private int port;

    @Value("${spring.redis.timeout}")
    private int timeout;

    @Value("${spring.redis.pool.max-active}")
    private int maxActive;

    @Value("${spring.redis.pool.max-idle}")
    private int maxIdle;

    @Value("${spring.redis.pool.min-idle}")
    private int minIdle;

    @Value("${spring.redis.pool.max-wait}")
    private long maxWaitMillis;



    @Bean
    public JedisPool redisPoolFactory(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
        jedisPoolConfig.setMaxTotal(maxActive);
        jedisPoolConfig.setMinIdle(minIdle);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig,host,port,timeout,null);

        logger.info("JedisPool注入成功!");
        logger.info("redis地址:" + host + ":" + port);
        return  jedisPool;
    }

}

接下來,咱們啓動項目,gogogo緩存

Jedis注入成功了!!!springboot

 而後咱們能夠定義一個工具類,用於對redis進行各類操做服務器

這裏咱們經過@Autowired將JedisPool注入到工具類中,其餘兩個是命名、序列化的類session

這裏,咱們列舉一下日常最經常使用的幾個方法app

//給某個key設值
public void set(String key, Object value) {
        Jedis client = getJedis();
        try {
            byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
            byte[] valueBytes = serializer.serializeValue(value);
            client.set(keyBytes, valueBytes);
        } finally {
            returnJedis(client);
        }

    }

//根據key獲取value
 public Object get(String key) {
        Jedis client = getJedis();
        try {
            byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
            byte[] valueBytes = client.get(keyBytes);
            return serializer.deserializeValue(valueBytes);
        } finally {
            returnJedis(client);
        }
    }

//根據鍵值獲取value
    public Object hashGet(String key, String field) {
        Jedis client = getJedis();
        try {
            byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
            byte[] fieldBytes = serializer.serializeKey(field);
            byte[] valueBytes = client.hget(keyBytes, fieldBytes);
            return serializer.deserializeValue(valueBytes);
        } finally {
            returnJedis(client);
        }

    }

    public void hashSet(String key, String field, Object value) {
        Jedis client = getJedis();
        try {
            byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
            byte[] fieldBytes = serializer.serializeKey(field);
            byte[] valueBytes = serializer.serializeValue(value);
            client.hset(keyBytes, fieldBytes, valueBytes);
        } finally {
            returnJedis(client);
        }

    }


public Map<String, Object> hashAllGet(String key) {
        Jedis client = getJedis();
        try {
            byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
            Map<byte[], byte[]> map = client.hgetAll(keyBytes);
            Map<String, Object> valueMap = Maps.newHashMap();
            Set<Map.Entry<byte[], byte[]>> valueSet = map.entrySet();
            for (Map.Entry<byte[], byte[]> entry : valueSet) {
                valueMap.put(serializer.deserializeKey(entry.getKey()), serializer.deserializeValue(entry.getValue()));
            }
            return valueMap;
        } finally {
            returnJedis(client);
        }

    }

//判斷key是否存在
    public boolean existKey(String key) {
        Jedis client = getJedis();
        try {
            byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
            return client.exists(keyBytes);
        } finally {
            returnJedis(client);
        }
    }

  在該項目中,咱們發送短信驗證碼後會將驗證碼存在redis中去,而後校驗的時候會判斷用戶輸入的驗證碼和緩存中的驗證碼是否一致,達到目的。微服務

 

 

 

相關文章
相關標籤/搜索