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

目录

Redis入门

Redis简介

Redis启动

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

Redis常用命令

        字符串类型常用命令

        哈希操作命令

        列表操作命令

        集合操作命令 

        有序集合

        通用命令

Spring Data Redis使用方式

 店铺营业状态设置功能

        设置营业状态

         查询营业状态


Redis入门

  • Redis简介

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

  • Redis启动

                在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常用命令

        字符串类型常用命令
127.0.0.1:6379> set boy jay   //set key value 设置指定key的值
OK
127.0.0.1:6379> get boy       //获取指定key的值
"jay"                                 //setex key seconds value           
127.0.0.1:6379> setex girl 10 jolin  //设置指定key的值 并将key的过期时间设置为seconds秒
OK                                                        
127.0.0.1:6379> get girl
"jolin"
127.0.0.1:6379> get girl
"jolin"
127.0.0.1:6379> get girl
"jolin"
127.0.0.1:6379> get girl
"jolin"
127.0.0.1:6379> get girl  //时间到期了就获取不到了
(nil)
127.0.0.1:6379> setnx boy wang  //setnx key value 在key不存在时设置key的值 成功返回1 失败为0
(integer) 0
127.0.0.1:6379> setnx man wang
(integer) 1
        哈希操作命令

                //将哈希表key 中的字段field 的值设为value
127.0.0.1:6379> hset boyfriend name xiaowang age 22 city beijing
(integer) 3
127.0.0.1:6379> hget boyfriend name //获取存储在哈希表中指定字段的值
"xiaowang"
127.0.0.1:6379> hget boyfriend age  
"22"
127.0.0.1:6379> hget boyfriend city
"beijing"
127.0.0.1:6379> hdel key city //删除存储在哈希表中的指定字段 删除失败返回0 成功返回1
(integer) 0
127.0.0.1:6379> hdel boyfriend city
(integer) 1
127.0.0.1:6379> hkeys boyfriend //获取哈希表中所有字段
1) "name"
2) "age"
127.0.0.1:6379> hvals boyfriend //获取哈希表中所有值
1) "xiaowang"
2) "22"
        列表操作命令

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

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

                   2. 配置Redis数据源

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

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

@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
                                //先注入工厂对象
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory){
        RedisTemplate redisTemplate=new RedisTemplate();
            //连接工厂对象
        redisTemplate.setConnectionFactory(connectionFactory);
            //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

                 4. 通过RedisTemplate对象操作Redis

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

 店铺营业状态设置功能

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

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

        设置营业状态

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

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

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

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

         查询营业状态

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

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

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值