当前位置:   article > 正文

苍穹外卖项目(黑马)学习笔记DAY5_黑马外卖项目

黑马外卖项目

目录

Redis入门

Redis简介

Redis启动

 Redis中5种常用数据类型介绍

Redis常用命令

        字符串类型常用命令

        哈希操作命令

        列表操作命令

        集合操作命令 

        有序集合

        通用命令

Spring Data Redis使用方式

 店铺营业状态设置功能

        设置营业状态

         查询营业状态


Redis入门

  • Redis简介

                Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,被广泛用作缓存、消息代理和键值存储等用途。它具有高性能、持久化、分布式、支持多种数据结构等特点,被许多应用程序用来加速数据访问、缓解数据库负载、实现实时分析和处理等。

                在redis目录下打开cmd输入redis-server.exe redis.windows.conf开启redis的服务器,之后再打开一个cmd输入redis-cli.exe开启redis的客户端。(redis配置文件中默认没有密码,可自行设置。redis-cli.exe -h 主机 -p 端口 -a 密码)我们也可以去安装Redis 数据库的图形化界面工具Another Redis Desktop Manager,更直观的操作redis。

  •  Redis中5种常用数据类型介绍

                Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型。

                 哈希结构适合用于存储对象。列表按照插入顺序排序,可以含重复元素。集合中不能有重复元素,可用于计算交并集。有序集合中每一个元素关联一个分数,根据分数升序排序。

  • Redis常用命令

        字符串类型常用命令
  1. 127.0.0.1:6379> set boy jay //set key value 设置指定key的值
  2. OK
  3. 127.0.0.1:6379> get boy //获取指定key的值
  4. "jay" //setex key seconds value
  5. 127.0.0.1:6379> setex girl 10 jolin //设置指定key的值 并将key的过期时间设置为seconds秒
  6. OK
  7. 127.0.0.1:6379> get girl
  8. "jolin"
  9. 127.0.0.1:6379> get girl
  10. "jolin"
  11. 127.0.0.1:6379> get girl
  12. "jolin"
  13. 127.0.0.1:6379> get girl
  14. "jolin"
  15. 127.0.0.1:6379> get girl //时间到期了就获取不到了
  16. (nil)
  17. 127.0.0.1:6379> setnx boy wang //setnx key valuekey不存在时设置key的值 成功返回1 失败为0
  18. (integer) 0
  19. 127.0.0.1:6379> setnx man wang
  20. (integer) 1
        哈希操作命令

  1. //将哈希表key 中的字段field 的值设为value
  2. 127.0.0.1:6379> hset boyfriend name xiaowang age 22 city beijing
  3. (integer) 3
  4. 127.0.0.1:6379> hget boyfriend name //获取存储在哈希表中指定字段的值
  5. "xiaowang"
  6. 127.0.0.1:6379> hget boyfriend age
  7. "22"
  8. 127.0.0.1:6379> hget boyfriend city
  9. "beijing"
  10. 127.0.0.1:6379> hdel key city //删除存储在哈希表中的指定字段 删除失败返回0 成功返回1
  11. (integer) 0
  12. 127.0.0.1:6379> hdel boyfriend city
  13. (integer) 1
  14. 127.0.0.1:6379> hkeys boyfriend //获取哈希表中所有字段
  15. 1) "name"
  16. 2) "age"
  17. 127.0.0.1:6379> hvals boyfriend //获取哈希表中所有值
  18. 1) "xiaowang"
  19. 2) "22"
        列表操作命令

  1. // 向左插入(头部)多个数据
  2. 127.0.0.1:6379> lpush name zhangsan lisi wangwu
  3. (integer) 3
  4. 127.0.0.1:6379> rpush name more //向右插入(尾部) 多个数据
  5. (integer) 4
  6. 127.0.0.1:6379> lrange name 0 -1 // lrange key start stop 获取列表指定范围内的元素 0 -1 全部
  7. 1) "wangwu"
  8. 2) "lisi"
  9. 3) "zhangsan"
  10. 4) "more"
  11. 127.0.0.1:6379> rpop name //rpop key 移除并获取列表最后一个元素
  12. "more"
  13. 127.0.0.1:6379> lrange name 0 -1
  14. 1) "wangwu"
  15. 2) "lisi"
  16. 3) "zhangsan"
  17. 127.0.0.1:6379> llen name //llen key 获取列表长度
  18. (integer) 3
        集合操作命令 
  1. 127.0.0.1:6379> sadd list1 2 4 6 8 10 //sadd key member1... 向集合中添加一个或多个数据
  2. (integer) 5
  3. 127.0.0.1:6379> smembers list1 //smembers key返回集合中所有成员
  4. 1) "2"
  5. 2) "4"
  6. 3) "6"
  7. 4) "8"
  8. 5) "10"
  9. 127.0.0.1:6379> scard list1 //scard key 获取集合中的成员数
  10. (integer) 5
  11. 127.0.0.1:6379> sadd list2 1 2 3 4 5 6 7 8 9 10
  12. (integer) 10
  13. 127.0.0.1:6379> sinter list1 list2 //sinter key1 key2 返回给定所有集合的交集
  14. 1) "2"
  15. 2) "4"
  16. 3) "6"
  17. 4) "8"
  18. 5) "10"
  19. 127.0.0.1:6379> sunion list1 list2 //sunion key1 key2 返回所有给定集合的并集
  20. 1) "1"
  21. 2) "2"
  22. 3) "3"
  23. 4) "4"
  24. 5) "5"
  25. 6) "6"
  26. 7) "7"
  27. 8) "8"
  28. 9) "9"
  29. 10) "10"
  30. 127.0.0.1:6379> srem list1 2 4 6 8 //srem key member1 ... 删除集合中一个或多个成员
  31. (integer) 4
  32. 127.0.0.1:6379> smembers list1
  33. 1) "10"
  34. 127.0.0.1:6379>
        有序集合
  1. //向有序集合添加一个或多个成员 zadd key score1 member1
  2. 127.0.0.1:6379> zadd zset 0.1 zhangsan 0.2 lisi 0.3 wangwu
  3. (integer) 3
  4. 127.0.0.1:6379> zrange zset 0 -1 //zrange key start stop 返回索引区间的成员
  5. 1) "zhangsan"
  6. 2) "lisi"
  7. 3) "wangwu"
  8. 127.0.0.1:6379> zincrby zset 1.0 zhangsan //zincrby key increment member 对指定成员分数加法
  9. "1.1000000000000001"
  10. 127.0.0.1:6379> zrem zset zhangsan //移除成员
  11. (integer) 1
  12. 127.0.0.1:6379> zrange zset 0 -1
  13. 1) "lisi"
  14. 2) "wangwu"
  15. 127.0.0.1:6379>
        通用命令
  1. 127.0.0.1:6379> keys * //keys pattern 查找所有符合给定模式的key
  2. 1) "dish_20"
  3. 2) "SHOP_STATUS"
  4. 3) "name"
  5. 4) "list1"
  6. 5) "dish_11"
  7. 6) "boy"
  8. 7) "man"
  9. 8) "dish_12"
  10. 9) "setmealCache::13"
  11. 10) "list2"
  12. 11) "zset"
  13. 12) "dish_21"
  14. 13) "boyfriend"
  15. 14) "dish_18"
  16. 15) "dish_19"
  17. 16) "dish_16"
  18. 17) "users::xiaowang"
  19. 127.0.0.1:6379> exists boy //检查给定key是否存在
  20. (integer) 1
  21. 127.0.0.1:6379> type boy //返回key所存储的值的类型
  22. string
  23. 127.0.0.1:6379> del key123
  24. (integer) 0
  25. 127.0.0.1:6379> del boy //删除存在的key
  26. (integer) 1
  27. 127.0.0.1:6379> exists boy
  28. (integer) 0
  29. 127.0.0.1:6379>
  • Spring Data Redis使用方式

        步骤:1. 导入Spring Data Redis的maven坐标

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>

                   2. 配置Redis数据源

  1. redis:
  2. host: localhost
  3. port: 6379 //主机和端口是默认值可以不用设置
  4. password: //如果有设置密码需要配置
  5. database: //redis 有许多数据库 可以选择默认为0

                   3. 编写配置类,创建RedisTemplate对象

  1. @Configuration
  2. @Slf4j
  3. public class RedisConfiguration {
  4. @Bean
  5. //先注入工厂对象
  6. public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){
  7. RedisTemplate redisTemplate=new RedisTemplate();
  8. //连接工厂对象
  9. redisTemplate.setConnectionFactory(connectionFactory);
  10. //设置redis key的序列化器
  11. redisTemplate.setKeySerializer(new StringRedisSerializer());
  12. return redisTemplate;
  13. }
  14. }

                 4. 通过RedisTemplate对象操作Redis

                        Redistemplate给我们封装五类接口,让我们操作对应类型的数据。通过调用方法来存储和获取数据库的数据,方法很多这里就不详细说明,大家可以去搜索,其实直接.一下大家就知道怎么用了。

 店铺营业状态设置功能

        根据产品原型,我们要设计三个接口:设置营业状态、管理端查询营业状态、用户端查询营业状态。由于有客户端和服务端,如果两边的类都叫做ShopController会出现分歧,我们可以在

@RestController("userShopController")添加别名。

        设置营业状态

                 用什么方法请求?传入什么参数?返回什么数据?

                 该方法使用put方式,通过路径参数status,无额外的数据需要返回。

                 在Redis中使用key为SHOP_STATUS来存储营业状态。

  1. @PutMapping("/{status}")
  2. @ApiOperation("设置店铺状态")
  3. public Result setStatus(@PathVariable Integer status){
  4. log.info("设置店铺的营业状态:{}",status == 1 ?"营业中":"打样中");
  5. ValueOperations valueOperations = redisTemplate.opsForValue();
  6. valueOperations.set("SHOP_STATUS",status);
  7. return Result.success();
  8. }

         查询营业状态

                 用什么方法请求?传入什么参数?返回什么数据?

                 该方法使用get方式,无需前端传数据,返回status给前端。

  1. @GetMapping("/status")
  2. @ApiOperation("服务端获取店铺状态")
  3. public Result<Integer> getStatus(){
  4. ValueOperations valueOperations = redisTemplate.opsForValue();
  5. Integer shopStatus = (Integer) valueOperations.get("SHOP_STATUS");
  6. return Result.success(shopStatus);
  7. }

后期,我可能会写一篇关于《Redis设计与实现》这本书的学习笔记。如果大家需要这本书的电子版,可以私信我~  

 如果有帮助你,希望可以点赞收藏转发~             

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号