后端学习笔记-Redis

入门

Redis简介

Ubuntu下载Redis

bash 复制代码
# 更新软件包列表
sudo apt update

# 安装 Redis
sudo apt install redis-server -y

# 启动 Redis
sudo systemctl start redis-server

# 设置开机自启
sudo systemctl enable redis-server

# 检查状态
sudo systemctl status redis-server

Redis在Linux系统中配置文件的位置:

bash 复制代码
/etc/redis/redis.conf

设置密码

bash 复制代码
# 1. 设置 Redis 密码
sudo vim /etc/redis/redis.conf
# 找到并取消注释 requirepass,设置密码:
# requirepass your_secure_password

# 2. 重启 Redis
sudo systemctl restart redis-server

可以使用idea的数据库插件选数据源为Redis直连redis

数据类型

常用命令

字符串操作命令

setnx创建失败显示0,即key已存在

哈希操作命令
列表操作命令

值类似于队列

bash 复制代码
lrange key 0 -1 # 可以获取全部元素
集合操作命令
有序集合操作命令
通用命令

在java中操作Redis

Spring Data Redis使用方式

Redis配置类

java 复制代码
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){
        log.info("开始创建RedisTemplate对象");
        RedisTemplate redisTemplate = new RedisTemplate();
        // 设置redis连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

使用方法

java 复制代码
@SpringBootTest
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 操作String
     */
    @Test
    public void testString(){
        // set get setex setnx
        redisTemplate.opsForValue().set("name","张三");
        String name = (String) redisTemplate.opsForValue().get("name");
        System.out.println(name);
        redisTemplate.opsForValue().set("code","10086",60, TimeUnit.SECONDS);
        redisTemplate.opsForValue().setIfAbsent("lock","1");
        redisTemplate.opsForValue().setIfPresent("lock","2");
    }

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

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

        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","age ")
    }

    /**
     * 操作List
     */
    @Test
    public void testList(){
        // lpush lpop lrange llen
        ListOperations listOperations = redisTemplate.opsForList();

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

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

        listOperations.rightPop("mylist");

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

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

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

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

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

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

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

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

    /**
     * 操作ZSet
     */
    @Test
    public void testZSet(){
        // zadd zrange zrem zincrby
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

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

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

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

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

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

        Boolean name = redisTemplate.hasKey("name");
        Boolean set1 = redisTemplate.hasKey("set1");

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

        redisTemplate.delete("name");
    }
}

使用场景

java 复制代码
@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Slf4j
@Api(tags = "店铺相关接口")
public class ShopController {

    public static final String KEY = "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(KEY,status);
        return Result.success();
    }

    /**
     * 获取店铺的营业状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation("获取店铺的营业状态")
    public Result<Integer> getStatus(){
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("获取店铺营业状态:{}",status == 1 ? "营业中" : "打烊中");
        return Result.success(status);
    }
}
相关推荐
小宋加油啊33 分钟前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
闪电悠米39 分钟前
黑马点评-Redis 消息队列-03_stream_consumer_group
开发语言·数据库·redis·分布式·缓存·junit·lua
Xzh04231 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
Cloud_Shy6182 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 33 - 35)
开发语言·人工智能·笔记·python·学习方法
做cv的小昊2 小时前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论
星恒随风2 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
佛祖让我来巡山3 小时前
线上 Redis 突然“爆”了,怎么办?
redis·redis宕机·redis崩了·redis线上事故
sensen_kiss4 小时前
CPT304 SoftwareEngineeringII 软件工程 2 Pt.8 软件测试 (Software Testing)(上)
学习·软件工程
力学与人工智能4 小时前
PPT分享 | 洛桑联邦理工学院魏震:深度几何学习在工业设计优化中的应用
学习·优化·工业设计·深度几何学习·洛桑联邦理工学院
三十..5 小时前
Redis 核心原理与高可用架构实践
运维·数据库·redis