Day05 店铺营业状态设置 && Redis

发布于:2025-08-13 ⋅ 阅读:(13) ⋅ 点赞:(0)

Redis 入门

Redis 简介

Redis 是一个基于内存的 key-value 结构数据库。

·基于内存存储,读写性能高

·适合存储热点数据(热点商品,资讯,新闻)

企业应用广泛

redis 中文网:Redis中文网

Redis 下载与安装

Redis 的 Windows版属于绿色软件,直接解压即可使用,解压后目录结构如下:

Redis 服务启动与停止

 启动:在解压目录下进入命令行窗口,输入以下命令即可启动

结束:直接 Ctrl + C 即可

客户端连接服务器:

注意服务端不能关,否则连接不上

客户端断开:输入 exit 即可

补充如果我们要连接外部的服务器:

-h 后面写域名,-p 后面写端口名

密码修改:在 conf 文件里找到 443 行这一行,

requirepass 后面跟的就是你需要的密码

这时我们重启 Redis,并重新连接客户端,会发现一个 error 告诉我们未认证

我们要想连接,在之前的命令下加一个 -a yourPassWord 即可

当然我们可以直接下载图形化工具进行连接

服务端记得不要关

Redis 数据类型

5种常用数据类型介绍

各种数据类型的特点

Redis 常用命令

字符串操作命令

        

哈希操作命令

列表操作命令

集合操作命令

有序集合操作命令

通用命令

在 Java 中操作 Redis

Redis 的 Java 客户端

Redis 的 Java 客户端很多,常用的几种:
· Jedis

· Lettuce

· Spring Data Redis

Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用 Spring Data Redis 来简化操作

Spring Data Redis 使用方式

package com.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){
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置 redis 的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置 redis key 的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}
package com.sky.test;

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.core.*;

@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);
        ValueOperations valueOperations = redisTemplate.opsForValue();
        HashOperations hashOperations = redisTemplate.opsForHash();
        ListOperations listOperations = redisTemplate.opsForList();
        SetOperations setOperations = redisTemplate.opsForSet();
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }
}

最后是完整的测试代码,数据库里面的乱码是正常的,因为序列化的问题没有处理

package com.sky.test;

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 javax.xml.crypto.Data;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testRedisTemplate(){
        System.out.println(redisTemplate);
        ValueOperations valueOperations = redisTemplate.opsForValue();
        HashOperations hashOperations = redisTemplate.opsForHash();
        ListOperations listOperations = redisTemplate.opsForList();
        SetOperations setOperations = redisTemplate.opsForSet();
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }

    @Test
    public void testString(){
        //set get setex setnx
        redisTemplate.opsForValue().set("city","北京");
        String city = (String) redisTemplate.opsForValue().get("city");
        System.out.println(city);
        redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
        redisTemplate.opsForValue().setIfAbsent("local", "1");
        redisTemplate.opsForValue().setIfAbsent("local", "2");
    }

    @Test
    public void testHash(){
        //hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash();

        hashOperations.put("100", "name", "tom");
        hashOperations.put("100", "age", "20");

        String name = (String) hashOperations.get("100", "name");
        System.out.println(name);

        Set keys = hashOperations.keys("100");
        System.out.println(keys);

        List values = hashOperations.values("100");
        System.out.println(values);

        hashOperations.delete("100", "name");
    }

    @Test
    public void testList(){
        //lpush lrange rpop llen
        ListOperations listOperations= redisTemplate.opsForList();

        listOperations.leftPushAll("mylist","a","b","c");
        listOperations.leftPush("mylist", "d");

        List list = listOperations.range("mylist", 0, -1);
        System.out.println(list);

        listOperations.rightPop("mylist");

        Long size = listOperations.size("mylist");
        System.out.println(size);
    }

    @Test
    public void testSet(){
        //sadd smembers scard sinter sunion srem
        SetOperations setOperations = redisTemplate.opsForSet();

        setOperations.add("set1", "a","b","c","d");
        setOperations.add("set2", "a", "b", "x", "y");

        Set members = setOperations.members("set1");
        System.out.println(members);

        Long size = setOperations.size("set1");
        System.out.println(size);

        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);

        Set union = setOperations.union("set1", "set2");
        System.out.println(union);

        setOperations.remove("set1", "a", "b");
    }

    @Test
    public void testZset(){
        // zadd zrange zincrby zrem
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        zSetOperations.add("zset1", "a", 10);
        zSetOperations.add("zset1", "b", 12);
        zSetOperations.add("zset1", "c", 9);

        Set zset1 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset1);

        zSetOperations.incrementScore("zset1", "c", 10);

        zSetOperations.remove("zset1", "a", "b");
    }

    @Test
    public void testCommon(){
        //keys exists type del
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);

        Boolean name = redisTemplate.hasKey("name");
        Boolean set1 = redisTemplate.hasKey("set1");
        System.out.println(name);
        System.out.println(set1);

        for (Object key : keys) {
            DataType type = redisTemplate.type(key);
            System.out.println(type.name());
        }

        redisTemplate.delete("mylist");
    }
}

店铺营业状态设置

需求分析和设计

产品原型

接口设计

营业状态数据存储方式:基于 Redis 的字符串来进行存储

代码开发

package com.sky.controller.admin;

import com.sky.result.Result;
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.*;

@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Slf4j
@Api(tags = "管理端店铺营业状态相关接口")
public class ShopController {

    @Autowired
    RedisTemplate redisTemplate;

    public static final String  KEY = "SHOP_STATUS";

    @GetMapping("/status")
    @ApiOperation("营业状态查询")
    public Result<Integer> getByStatus(){
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("当前店铺的营业状态为:{}", status == 1 ? "营业中": "打样中");
        return Result.success(status);
    }

    @PutMapping("/{status}")
    @ApiOperation("营业状态设置")
    public Result SetStatus(@PathVariable Integer status){
        log.info("将当前店铺的状态设置为:{}", status);
        redisTemplate.opsForValue().set(KEY, status);
        return Result.success();
    }
}
package com.sky.controller.user;

import com.sky.result.Result;
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;

@RestController("userShopController")
@RequestMapping("/user/shop")
@Slf4j
@Api(tags = "用户端店铺营业状态相关接口")
public class ShopController {

    @Autowired
    RedisTemplate redisTemplate;

    public static final String  KEY = "SHOP_STATUS";

    @GetMapping("/status")
    @ApiOperation("营业状态查询")
    public Result<Integer> result(){
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("当前店铺的营业状态为:{}", status == 1 ? "营业中": "打样中");
        return Result.success(status);
    }


}

功能测试


网站公告

今日签到

点亮在社区的每一天
去签到