Redis

1.Redis入门

Redis基于内存 的**key-value(键值对)**结构数据库

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

适合存储热点数据(热点商品,资讯,新闻)[顿时间内大量访问]

企业应用广泛

MySQL 磁盘 二维表

1.1 String
复制代码
setex key seconds value    几秒后会失效,短信验证码

1.2 hash

队列 先进先出

1.3 list
1.4 set
1.5 zset
1.6 通用命令

2. 在Java中操作Redis---------- Spring Data Redis

database 0-15 16个,各自隔离

java 复制代码
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 java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

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

    @Test
    public void test_RedisTemplate(){
        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 test_redis_String(){
        //set get setex setnx
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("name","zhangsan");
        System.out.println(valueOperations.get("name"));

        valueOperations.set("age",18,60, TimeUnit.SECONDS);
        System.out.println(valueOperations.get("age"));

        valueOperations.setIfAbsent("name","mike");
        System.out.println(valueOperations.get("name"));




    }
    @Test
    public void test_redis_hash(){
        //hset hget hdel hkeys hvals
        HashOperations hashOperations = redisTemplate.opsForHash();
        hashOperations.put("user:1","name","zhangsan");
        hashOperations.put("user:1","age",18);
        hashOperations.put("user:1","gender","男");
        String name =(String) hashOperations.get("user:1", "name");
        System.out.println(name);
        //System.out.println(hashOperations.get("user:1","age"));
        //System.out.println(hashOperations.get("user:1","gender"));

        hashOperations.delete("user:1","age");
        Set keys = hashOperations.keys("user:1");
        System.out.println(keys);
        List values = hashOperations.values("user:1");
        System.out.println(values);
    }

    @Test
    public void test_redis_list() {
        //lpush  lrange rpop  llen
        ListOperations listOperations = redisTemplate.opsForList();
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");
        List range = listOperations.range("mylist", 0, -1);
        System.out.println(range);
        Object a = listOperations.rightPop("mylist");
        System.out.println(a);
        Long mylist = listOperations.size("mylist");
        System.out.println(mylist);

    }
    @Test
    public void test_redis_set(){
        //sadd smembers scard sinter sunion srem
        SetOperations setOperations = redisTemplate.opsForSet();
        setOperations.add("set1","a","b","c","d");
        setOperations.add("set2","a","b","e","f");
        Set members = setOperations.members("set1");
        System.out.println(members);
        Long set1 = setOperations.size("set1");
        System.out.println(set1);
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);
        Set union = setOperations.union("set1", "set2");
        System.out.println(union);
        setOperations.remove("set1","a");

    }
    @Test
    public void test_redis_zset(){
        //zadd zrange zincrby zrem
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset1", "a", 10.1);
        zSetOperations.add("zset1", "b", 2.5);
        zSetOperations.add("zset1", "c", 3.6);
        Set range = zSetOperations.rangeWithScores("zset1", 0, -1);
        System.out.println(range);
        Double score = zSetOperations.incrementScore("zset1", "b", 5);
        System.out.println(score);

       zSetOperations.remove("zset1","a");
       Long zset1 = zSetOperations.size("zset1");
       System.out.println(zset1);

    }



@Test
    public void test_redis_Common(){
        //keys exists del type
    Set keys = redisTemplate.keys("*");
    System.out.println(keys);
    System.out.println(redisTemplate.hasKey("name"));
    DataType type = redisTemplate.type("name");
    System.out.println(type.name());
    System.out.println(redisTemplate.delete("name"));
}





    }

修改bean的名称,在RestController(xxxx)

java 复制代码
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.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.*;

@RestController("adminStatusController")
@RequestMapping("/admin/shop")
@Api(tags = "管理端-营业状态管理")
@Slf4j
public class StatusController {
    private static final String SHOP_STATUS = "SHOP_STATUS";
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 设置营业状态
     * @param status
     * @return
     */
    @PutMapping("/{status}")
    @ApiOperation("设置营业状态")
    public Result setStatus(@PathVariable Integer status){
        log.info("管理端设置营业状态为:{}",status == 1 ? "营业中" : "打烊中");
        redisTemplate.opsForValue().set(SHOP_STATUS,status);
        return Result.success();
    }

    /**
     * 获取营业状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation("获取营业状态")
    public Result<Integer> getStatus(){
        Integer status = (Integer) redisTemplate.opsForValue().get(SHOP_STATUS);
        log.info("获取营业状态: {}",status == 1 ? "营业中" : "打烊中");
        return Result.success(status);
    }
}

doc.html 管理端,用户端

相关推荐
焗猪扒饭7 小时前
redis stream用作消息队列极速入门
redis·后端·go
数据组小组9 小时前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替
悟空聊架构15 小时前
基于KaiwuDB在游乐场“刷卡+投币”双模消费系统中的落地实践
数据库·后端·架构
IvorySQL16 小时前
PostgreSQL 技术日报 (3月4日)|硬核干货 + 内核暗流一网打尽
数据库·postgresql·开源
进击的丸子19 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
NineData1 天前
NineData智能数据管理平台新功能发布|2026年1-2月
数据库·sql·数据分析
IvorySQL1 天前
双星闪耀温哥华:IvorySQL 社区两项议题入选 PGConf.dev 2026
数据库·postgresql·开源
ma_king2 天前
入门 java 和 数据库
java·数据库·后端
jiayou642 天前
KingbaseES 实战:审计追踪配置与运维实践
数据库
NineData2 天前
NineData 迁移评估功能正式上线
数据库·dba