广州做网络服装的网站建设,漳州seo建站,常用设计网站有哪些软件,电商关键词工具文章目录一、Jedis二、Spring Data Redis#xff08;常用#xff09;【1】pom.xml【2】application.yml【3】RedisConfig【4】RuiJiWaiMaiApplicationTests三、Spring Cache【1】常用注解#xff1a;【2】使用案例【3】底层不使用redis#xff0c;重启服务#xff0c;内存…
文章目录一、Jedis二、Spring Data Redis常用【1】pom.xml【2】application.yml【3】RedisConfig【4】RuiJiWaiMaiApplicationTests三、Spring Cache【1】常用注解【2】使用案例【3】底层不使用redis重启服务内存丢失解决pom.xmlapplication.yml启动类Result注解使用一、Jedis dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version
/dependency
dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion2.8.0/version
/dependency二、Spring Data Redis常用
【1】pom.xml
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency【2】application.yml spring:redis: #redis配置host: localhostport: 6379#password:database: 0 #默认提供16个数据库00号数据库jedis:pool: #redis连接池配置max-active: 8 #最大连接数max-idle: 4 #最大空闲连接max-wait: 1ms #最大阻塞等待时间min-idle: 0 #最小空闲连接【3】RedisConfig
package com.example.ruijiwaimai.config;import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;Configuration
public class RedisConfig extends CachingConfigurerSupport {Beanpublic RedisTemplateObject,Object redisTemplate(RedisConnectionFactory connectionFactory){RedisTemplateObject,Object redisTemplatenew RedisTemplate();// 默认的key序列化器为JdkSerializationRedisSerializerredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}
}【4】RuiJiWaiMaiApplicationTests
package com.example.ruijiwaimai;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;SpringBootTest
class RuiJiWaiMaiApplicationTests {Autowiredprivate RedisTemplate redisTemplate;/** 操作String类型数据ValueOperations简单K-V操作* */Testpublic void testString() {redisTemplate.opsForValue().set(city123, shenzhen); // \xac\xed\x00\x05t\x00\x04city做了序列化无法用get city获取》config配置RedisConfigString value (String) redisTemplate.opsForValue().get(city123);System.out.println(value);redisTemplate.opsForValue().set(key1, value1, 10, TimeUnit.SECONDS);Boolean aBoolean redisTemplate.opsForValue().setIfAbsent(city1234, nanjing);System.out.println(aBoolean);}/** 操作Hash类型数据HashOperations针对map类型的数据操作* */Testpublic void testHash() {HashOperations hashOperations redisTemplate.opsForHash();hashOperations.put(002, name, xiaoming);hashOperations.put(002, age, 20);String age (String) hashOperations.get(002, age);System.out.println(age);// 获取所有字段Set keys hashOperations.keys(002);for (Object key : keys) {System.out.println(key);}// 获取所有值List values hashOperations.values(002);for (Object value : values) {System.out.println(value);}}/** 操作List类型数据ListOperations针对list类型的数据操作* */Testpublic void testList() {ListOperations listOperations redisTemplate.opsForList();//存值listOperations.leftPush(mylist, a);listOperations.leftPushAll(mylist, b, c, d);//取值ListString mylist listOperations.range(mylist, 0, -1);for (String value : mylist) {System.out.println(value);}//获得列表长度Long size listOperations.size(mylist);int lSize size.intValue();for (int i 0; i lSize; i) {//出队列Object element listOperations.rightPop(mylist);System.out.println(出队列: element);}}/** 操作Set无序集合类型数据SetOperationsset类型数据操作* */Testpublic void testSet() {SetOperations setOperations redisTemplate.opsForSet();//存值setOperations.add(myset, a, b, c, a);//取值SetString myset setOperations.members(myset);for (String o : myset) {System.out.println(o);}//删除成员setOperations.remove(myset, a, b);myset setOperations.members(myset);for (String o : myset) {System.out.println(删除后的数据 o);}}/** 操作ZSet有序集合类型数据ZSetOperationszset类型数据操作* */Testpublic void testZSet() {ZSetOperations zSetOperations redisTemplate.opsForZSet();//存值zSetOperations.add(myZset, a, 10.0);zSetOperations.add(myZset, b, 11.0);zSetOperations.add(myZset, c, 12.0);zSetOperations.add(myZset, a, 13.0);//取值SetString myZet zSetOperations.range(myZset, 0, -1);for (String s : myZet) {System.out.println(s);}//修改分数zSetOperations.incrementScore(myZset, b, 20.0);myZet zSetOperations.range(myZset, 0, -1);for (String s : myZet) {System.out.println(修改分数: s);}//删除成员zSetOperations.remove(myZset, a, b);myZet zSetOperations.range(myZset, 0, -1);for (String s : myZet) {System.out.println(删除后的成员: s);}}/** 通用操作* */Testpublic void testCommon() {//获取redis中所有的keySet keys redisTemplate.keys(*);for (Object key : keys) {System.out.println(key);}//判断某个key是否存在Boolean itcast redisTemplate.hasKey(itcast);System.out.println(判断某个key是否存在:itcast);//删除指定keyredisTemplate.delete(myZset);//获取指定key对应的value的数据类型DataType dataType redisTemplate.type(001);System.out.println(获取指定key对应的value的数据类型:dataType.name());}
}三、Spring Cache
【1】常用注解
注解说明EnableCaching开启缓存注解功能Cacheable判断是否有缓存数据有》返回缓存数据没有》放到缓存中CachePut将方法的返回值放到缓存中CacheEvict将一条或多条数据从缓存中删除
【2】使用案例
package com.itheima.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.entity.User;
import com.itheima.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;RestController
RequestMapping(/user)
Slf4j
public class UserController {Autowiredprivate CacheManager cacheManager;Autowiredprivate UserService userService;/*** CachePut将方法返回值放入缓存* value缓存的名称每个缓存名称下面可以有多个key* key缓存的key*/CachePut(value userCache,key #user.id)PostMappingpublic User save(User user){userService.save(user);return user;}/*** CacheEvict清理指定缓存* value缓存的名称每个缓存名称下面可以有多个key* key缓存的key*/CacheEvict(value userCache,key #p0)//CacheEvict(value userCache,key #root.args[0])//CacheEvict(value userCache,key #id)DeleteMapping(/{id})public void delete(PathVariable Long id){userService.removeById(id);}//CacheEvict(value userCache,key #p0.id)//CacheEvict(value userCache,key #user.id)//CacheEvict(value userCache,key #root.args[0].id)CacheEvict(value userCache,key #result.id)PutMappingpublic User update(User user){userService.updateById(user);return user;}/*** Cacheable在方法执行前spring先查看缓存中是否有数据如果有数据则直接返回缓存数据若没有数据调用方法并将方法返回值放到缓存中* value缓存的名称每个缓存名称下面可以有多个key* key缓存的key* condition条件满足条件时才缓存数据* unless满足条件则不缓存*/Cacheable(value userCache,key #id,unless #result null)GetMapping(/{id})public User getById(PathVariable Long id){User user userService.getById(id);return user;}Cacheable(value userCache,key #user.id _ #user.name)GetMapping(/list)public ListUser list(User user){LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper();queryWrapper.eq(user.getId() ! null,User::getId,user.getId());queryWrapper.eq(user.getName() ! null,User::getName,user.getName());ListUser list userService.list(queryWrapper);return list;}
}【3】底层不使用redis重启服务内存丢失解决
pom.xml
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId
/dependencyapplication.yml redis: #redis配置host: 192.168.139.128port: 6379#password:database: 0 #默认提供16个数据库00号数据库cache:redis:time-to-live: 1800000 #设置缓存数据的过期时间启动类 Result 注解使用 PostMapping()CacheEvict(value setmealCache,allEntries true)public ResultString save(RequestBody SetmealDto setmealDto) {log.info(套餐信息{}, setmealDto);setmealService.saveWithDish(setmealDto);return null;}//删除套餐DeleteMapping()CacheEvict(value setmealCache,allEntries true)//清除setmealCache下的所有缓存public ResultString delete(RequestParam ListLong ids){setmealService.removeWithDish(ids);return Result.success(套餐数据删除成功);}/*** 根据条件查询套餐数据* param setmeal* return*/GetMapping(/list)Cacheable(value setmealCache,key #setmeal.categoryId _ #setmeal.status)public ResultListSetmeal list(Setmeal setmeal){LambdaQueryWrapperSetmeal queryWrapper new LambdaQueryWrapper();queryWrapper.eq(setmeal.getCategoryId() ! null,Setmeal::getCategoryId,setmeal.getCategoryId());queryWrapper.eq(setmeal.getStatus() ! null,Setmeal::getStatus,setmeal.getStatus());queryWrapper.orderByDesc(Setmeal::getUpdateTime);ListSetmeal list setmealService.list(queryWrapper);return Result.success(list);}