redis在Java中的应用
目录一redis基础知识补充二在Java中操作redis的步骤1.导入Spring Date Redis坐标2.配置Redis数据源3.编写配置类 RedisConfig创建RedisTemplate对象4.编写测试类以苍穹外卖为列子一redis基础知识补充基本数据类型字符串String哈希hash列表List集合set有序集合Redis 数据类型Spring Data Redis 操作方法常用命令示例String(字符串)opsForValue()set,get,increment,setIfAbsent(分布式锁)Hash(哈希)opsForHash()put,entries,get,delete(适合存对象字段)List(列表)opsForList()leftPush,rightPop,range(适合做消息队列、栈)Set(集合)opsForSet()add,members,intersect(适合做共同好友、标签)ZSet(有序集合)opsForZSet()add,rangeByScore,rank(适合做排行榜)二在Java中操作redis的步骤1.导入Spring Date Redis坐标dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId version${redis}/version /dependency2.配置Redis数据源spring: data: redis: host: localhost port: 6379 database: 23.编写配置类 RedisConfig创建RedisTemplate对象package sky.config; import lombok.extern.slf4j.Slf4j; 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 Slf4j public class RedisConfiguration { Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ log.info(开始创建redis模板对象...); RedisTemplate redisTemplate new RedisTemplate(); //设置redis的连接工厂对象 redisTemplate.setConnectionFactory(redisConnectionFactory); //设置redis key的序列化器 redisTemplate.setKeySerializer(new StringRedisSerializer()); return redisTemplate; } }4.案例以苍穹外卖为列子设置店铺营业状态package sky.controller.admin; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; import sky.result.Result; RestController RequestMapping(/admin/shop) Api(tags 店铺管理接口) Slf4j public class ShopController { Autowired private RedisTemplate redisTemplate; public static final String KEY SHOP_STATUS; /** * 获取店铺营业状态 * return */ GetMapping(/status) ApiOperation(获取店铺营业状态接口) public Result getStatus(){ Integer status (Integer)redisTemplate.opsForValue().get(KEY); log.info(获取到店铺的营业状态为{},status 1 ? 营业中 : 打烊中); return Result.success(status); } /** * 设置营业状态 * return */ PutMapping(/{status}) ApiOperation(设置营业状态接口) public Result setStatus(PathVariable Integer status){ log.info(设置店铺的营业状态为{},status 1 ? 营业中 : 打烊中); redisTemplate.opsForValue().set(KEY,status); return Result.success(); } }做缓存使用提高菜品查询效率不需要每次都去数据库里面查package sky.controller.user; import sky.entity.Dish; import sky.result.Result; import sky.service.DishService; import sky.vo.DishVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; RestController(userDishController) RequestMapping(/user/dish) Slf4j Api(tags C端-菜品浏览接口) public class DishController { Autowired private DishService dishService; Autowired private RedisTemplate redisTemplate; /** * 根据分类id查询菜品 * * param categoryId * return */ GetMapping(/list) ApiOperation(根据分类id查询菜品) public ResultListDishVO list(Long categoryId) { //构造redis中的key规则dish_分类id String key dish_ categoryId; //查询redis中是否存在菜品数据 ListDishVO list (ListDishVO) redisTemplate.opsForValue().get(key); if(list ! null list.size() 0){ //如果存在直接返回无须查询数据库 return Result.success(list); } Dish dish new Dish(); dish.setCategoryId(categoryId); dish.setStatus(1);//查询起售中的菜品 //如果不存在查询数据库将查询到的数据放入redis中 list dishService.listWithFlavor(dish); redisTemplate.opsForValue().set(key, list); return Result.success(list); } }