在经常进行读写操作时,可使用redis对数据进行缓存,减少对数据库的读写操作。
链接 提取码:paj3
(1)在安装目录下打开cmd窗口
小技巧:点击文件路径(上图红圈),输入cmd直接在该目录下打开命令窗口.
(2)输入命令:redis-server.exe redis.windows.conf启动服务.
或者通过双击redis-server.exe启动服务
(3)另外打开一个 cmd 窗口,原来的不要关闭,不然就关闭访问服务端了。输入命令:redis-cli.exe 如果redis没有启动就执行该命令会报错"由于目标计算机积极拒绝,无法连接",此时先通过(2)启动服务. 常用命令有
命令作用set (key) (value)设置key-valueget (key)获取某一个key的valuekeys *查询所有keydel (key)删除某个key创建一个spring boot项目
在pom.xml中引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>(1)创建RedisTemplate实例。 (2)通过opsForValue().set设置键 (3)通过opsForValue().get("key")获取值
(1)在类上添加@EnableCaching(测试,无论是controller还是启动类上添加该注解都行,原因待研究。) (2)在方法上添加@Cacheable(“userList”)注解,这里的userList是缓存的名字。
如果不设置key,则默认key为"SimpleKey []"。 如果通过key = “参数值”设置了key,则表明有一个缓存名为“XXX”,里面有很多key-value对,它的key就是设置的“key”。如下面代码,有一个名为“user”的缓存,里面存有<id,user>的键值对。 @RestController @RequestMapping("redis") @EnableCaching public class RedisController { @Autowired private RedisService redisService; /** * 设置了一个名为"userList"的缓存 */ @GetMapping() @Cacheable(cacheNames ="userList") public List<User> getUser(){ System.out.println("通过有没有输出,若没有输出,代表执行了缓存,从redis中获取了数据"); return redisService.getUser(); } /** * 设置了一个名为"user"的缓存,同时传入的"id"设为key */ @GetMapping("/{id}") @Cacheable(cacheNames ="User",key = "#id") public User getUserById(@PathVariable Long id){ System.out.println("通过有没有输出,若没有输出,代表执行了缓存,从redis中获取了数据"); return redisService.getUserById(id); } }经过多次查询后的redis如下:
当web发送请求到有@Cacheable注解的方法时,会先从redis缓存中,查询对应的key存不存在,若存在,则直接从缓存中获取value作为返回值返回;若不存在,则再执行方法。
通过postman模拟请求,第一次会打印上文的输出,且在控制台有sql语句执行。第二次没有输出,也没有sql语句执行,则表明第二次是从redis中获取的数据,而没有再执行getUser()方法。
问题:redis如何知道数据库的数据有没有更新,可以试试当手动修改数据库的值时,在调用刚刚的接口,看看返回的数据有没有改变
源码地址