SpringBoot集成Redis

Redis是一个开源的利用ANSI C说话编写、遵守BSD和谈、撑持收集、可基于内存亦可持久化的日记型、Key-Value数据库,并供给多种说话的API

35建立一个入门springboot项目(controller层)

工具/原料

  • IDEA 全称IntelliJ IDEA
  • Maven
  • Redis

方式/步骤

  1. 1

    Maven依靠引入:

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-data-redis</artifactId>

    </dependency>

  2. 2

    首先在你的SpringBoot工程中找到你的 application.properties 文件。

    标的目的里面添加如下设置装备摆设:

    #-------------------------------------Redis设置装备摆设信息start----------------------#指定几号数据库spring.redis.database = 0#Redis办事器地址spring.redis.host = localhost#Redis办事器毗连端口spring.redis.port = 6379# Redis办事器毗连密码(默认为空)spring.redis.password = # 毗连超不时间(毫秒)spring.redis.timeout = 5000# 毗连池最年夜毗连数(利用负值暗示没有限制)spring.redis.jedis.pool.max-active=600# 毗连池最年夜梗阻期待时候(利用负值暗示没有限制)spring.redis.jedis.pool.max-wait=1000# 毗连池中的最年夜余暇毗连spring.redis.jedis.pool.max-idle=8# 毗连池中的最小余暇毗连spring.redis.jedis.pool.min-idle=0#-------------------------------------Redis设置装备摆设信息end----------------------

  3. 3

    然后写一个RedisUtils的东西类,网上良多粘一个就行,这里我只是简单的放了几个方式。

    @Componentpublic class RedisUtils {    @Resource    private RedisTemplate<String, String> redisTemplate;    /**     * 指定缓存掉效时候     *     * @param key  键     * @param time 时候(秒)     * @return     */    public boolean expire(String key, long time) {        try {            if (time > 0) {                redisTemplate.expire(key, time, TimeUnit.SECONDS);            }            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }    /**     * 按照key 获取过时时候     *     * @param key 键 不克不及为null     * @return 时候(秒) 返回0代表为永远有用     */    public long getExpire(String key) {        return redisTemplate.getExpire(key, TimeUnit.SECONDS);    }    /**     * 判定key是否存在     *     * @param key 键     * @return true 存在 false不存在     */    public boolean hasKey(String key) {        try {            return redisTemplate.hasKey(key);        } catch (Exception e) {            e.printStackTrace();            return false;        }    }    /**     * 删除缓存     *     * @param key 可以传一个值 或多个     */    @SuppressWarnings("unchecked")    public void del(String... key) {        if (key != null && key.length > 0) {            if (key.length == 1) {                redisTemplate.delete(key[0]);            } else {                redisTemplate.delete(CollectionUtils.arrayToList(key));            }        }    }    //============================String=============================    /**     * 通俗缓存获取     *     * @param key 键     * @return 值     */    public Object get(String key) {        return key == null ? null : redisTemplate.opsForValue().get(key);    }    /**     * 通俗缓存放入     *     * @param key   键     * @param value 值     * @return true当作功 false掉败     */    public boolean set(String key, String value) {        try {            redisTemplate.opsForValue().set(key, value);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }    /**     * 通俗缓存放入并设置时候     *     * @param key   键     * @param value 值     * @param time  时候(秒) time要年夜于0 若是time小于等于0 将设置无期限     * @return true当作功 false 掉败     */    public boolean set(String key, String value, long time) {        try {            if (time > 0) {                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);            } else {                set(key, value);            }            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }    /**     * 递增     *     * @param key   键     * @param delta 要增添几(年夜于0)     * @return     */    public long incr(String key, long delta) {        if (delta < 0) {            throw new RuntimeException("递增因子必需年夜于0");        }        return redisTemplate.opsForValue().increment(key, delta);    }    /**     * 递减     *     * @param key   键     * @param delta 要削减几(小于0)     * @return     */    public long decr(String key, long delta) {        if (delta < 0) {            throw new RuntimeException("递减因子必需年夜于0");        }        return redisTemplate.opsForValue().increment(key, -delta);    }}

  4. 4

    然后。。。。然后就可以了啊简单吧。可是没有那么简单

    上面我们写的是0号的数据库,此刻我们测试利用的是3号数据库(大师在用的时辰按照营业需求就好)

  5. 5

    我们写一个测试类用来添加:存入一个

    key=ceshi001

    value=123456

    的值

  6. 6

    然后我们去看Redis数据库中是什么,看图为什么酿成如许了呢。

    可是到此我们发现,Redis已经集当作当作功可以进行存储了。

  7. 7

    我们来解决key值的问题:其实就是序列化的问题

    我们来成立一个RedisConfiguration的类,下面显示格局可能不合错误,直接粘贴利用就好。可是序列化的体例也有良多,可以自行百度。

    @Configurationpublic class RedisConfiguration {    @Bean    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisFactory){        StringRedisTemplate template = new StringRedisTemplate(redisFactory);        JdkSerializationRedisSerializer jdkSerializationRedisSerializer=new JdkSerializationRedisSerializer();        template.setValueSerializer(jdkSerializationRedisSerializer);        template.afterPropertiesSet();        return template;    }

    }

  8. 8

    好我们再去运行一次:

    发现此次对了。

    其实就是序列化的问题,若是不写会有默认的序列化体例

    所以开辟中若是碰到有两个工程中,去取统一个key值取到简直实null

    不消质疑你的Redis有问题,也不消质疑为什么别人能拿到。

    那就是key的序列化问题,你们的序列化体例要同一。

    (再说一下,一般公司开辟会同一的不会碰到如许的问题,若是碰到了申明你们的开辟不同一)

注重事项

  • 明明存进去了,却取不到值--序列化问题
  • 数据库的利用,默认是0号
  • 发表于 2018-06-05 00:00
  • 阅读 ( 328 )
  • 分类:其他类型

相关问题

0 条评论

请先 登录 后评论