redis简介

redis作为一种非关系型数据库,读写十分快,利用非常宽泛,它采纳key-value的模式存储数据,value罕用的五大数据类型有string(字符串),list(链表),set(汇合),zset(有序汇合)和hash(哈希表)。

redis的个性决定了它的性能,它能够用来做以下这些事件!

  1. 排行榜,利用zset能够不便的实现排序功能
  2. 计数器,利用redis中原子性的自增操作,能够统计到浏览量,点赞量等性能
  3. 简略音讯队列,list存储构造,满足先进先出的准则,能够应用lpush/rpop或rpush/lpop实现简略音讯队列
  4. session共享,分布式系统中,能够利用redis实现session共享。spring官网提供的分布式解决方案Spring Session就是利用redis 实现的。

Spring Boot对redis也实现自动化拆卸,应用十分不便。

Spring Boot整合redis

1. 引入redis依赖

<dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-data-redis</artifactId>    </dependency>    <dependency>           <groupId>org.apache.commons</groupId>        <artifactId>commons-pool2</artifactId>    </dependency></dependencies>

2. 配置redis相干信息

spring:  redis:    # redis库    database: 0    # redis 服务器地址    host: localhost    # redis 端口号    port: 6379    # redis 明码    password:    # 连贯超时工夫(毫秒)    timeout: 1000    lettuce:      pool:        # 连接池最大链接数(正数示意没有限度)        max-active: 8        # 连接池最大阻塞等待时间(正数示意没有限度)        max-wait: -1        # 连接池最大闲暇连接数        max-idle: 8        # 连接池最小闲暇连接数        min-idle: 0

3. 操作redis

SpringBoot提供了两个bean来操作redis,别离是RedisTemplateStringRedisTemplate,这两者的次要区别如下。

RedisTemplate应用的是JdkSerializationRedisSerializer 存入数据会将数据先序列化成字节数组而后在存入Redis数据库。

StringRedisTemplate应用的是StringRedisSerializer。

上面一起来看看成果:

@RestControllerpublic class RedisDemo {    @Autowired    private RedisTemplate redisTemplate;    @Autowired    private StringRedisTemplate stringRedisTemplate;    @GetMapping("redisTmeplateData")    public void redisTemplateData(){        redisTemplate.opsForValue().set("name","Java旅途");    }    @GetMapping("stringRedisTemplateData")    public void stringRedisTemplateData(){        stringRedisTemplate.opsForValue().set("desc","保持分享java技术栈");    }}

第一个办法存入的数据如下图

第二个办法存入的数据如下图

因为RedisTemplate是序列化成字节数组存储的,因而在redis客户端的可读性并不好。

主动缓存

@Cacheable能够标记在一个办法上,也能够标记在一个类上。当标记在一个办法上时示意该办法是反对缓存的,当标记在一个类上时则示意该类所有的办法都是反对缓存的。

如果增加了@Cacheable注解,那么办法被调用后,值会被存入redis,下次再调用的时候会间接从redis中取值返回。

@GetMapping("getStudent")@Cacheable(value = "student:key")public Student getStudent(){    log.info("我不是缓存,我是new的对象!");    Student student = new Student("Java旅途",26);    return student;}

记得要开启缓存,在启动类加上@EnableCaching注解

拜访下面的办法,如果不打印日志,则是从缓存中获取的值。

封装redisUtils

RedisTemplate提供了很多办法来操作redis,然而找起来比拟麻烦,为了更好的操作redis,个别会封装redisUtils来满足业务开发。这里简略封装几个做个示例,如果开发中有需要能够本人封装。

public class RedisUtils {    @Autowired    private RedisTemplate redisTemplate;    /**     * 一般存入     * @param key     * @param value     * @return     */    public boolean set(String key,Object value){        try {            redisTemplate.opsForValue().set(key,value);            return true;        }catch (Exception e){            e.printStackTrace();            return false;        }    }    /**     * 一般获取key     * @param key     * @return     */    public Object get(String key){        return key == null ? null : redisTemplate.opsForValue().get(key);    }    /**     * 存入key,设置过期时长     * @param key     * @param value     * @param time     * @return     */    public boolean set(String key,Object value,long time){        try {            if(time > 0){                redisTemplate.opsForValue().set(key,value,time, TimeUnit.SECONDS);            }else{                redisTemplate.opsForValue().set(key,value);            }            return true;        }catch (Exception e){            e.printStackTrace();            return false;        }    }    /**     * 判断key是否存在     * @param key     * @return     */    public boolean exists(String key){        try {            return redisTemplate.hasKey(key);        }catch (Exception e){            e.printStackTrace();            return false;        }    }    /**     * 删除key     * @param key     */    public void del(String key){        try {            if(key != null && key.length() > 0){                redisTemplate.delete(key);            }        }catch (Exception e){            e.printStackTrace();        }    }}

此是spring-boot-route系列的第十二篇文章,这个系列的文章都比较简单,次要目标就是为了帮忙首次接触Spring Boot 的同学有一个零碎的意识。本文已收录至我的github,欢送各位小伙伴star

github:https://github.com/binzh303/s...

点关注、不迷路

如果感觉文章不错,欢送关注点赞珍藏,你们的反对是我创作的能源,感激大家。

如果文章写的有问题,请不要悭吝,欢送留言指出,我会及时核查批改。

如果你还想更加深刻的理解我,能够微信搜寻「Java旅途」进行关注。回复「1024」即可取得学习视频及精美电子书。每天7:30准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!