SpringBoot集成Redis

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

35建立一个入门项目层

东西/原料

  • 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
  • 阅读 ( 1677 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

联系我们:uytrv@hotmail.com 问答工具