Redis基础
1.1 Redis简介
- Redis是一个基于内存的 key-value 结构的数据库
- 基于内存存储,读写性能高
- 单线程,每个命令具备原子性
- 支持数据持久化
- 支持主从集群、分片集群
- 适合存储热点数据(读写需求大的数据),如热点商品、咨询、新闻等、
1.2 Redis下载和安装(windows版)

1.3 Redis服务配置(windows版)
所有操作需要在Redis安装目录中进行,因为没有添加环境变量
启动:
redis-server.exe redis.windows.conf
停止:
Ctrl + C连接服务:
redis-cli.exe -h [主机] -p [端口号] -a [密码](Redis默认端口号是6379)
注意:==默认情况下Redis服务是没有设置密码的==,并且Redis是没有用户的概念的,不需要提供用户名
设置密码
打开Redis配置文件 redis.windows.conf
寻找这一行:
# requirepass foobared,将注释去掉,foobared的位置填写密码即可注:如果在登录的时候没有-a授权,在操作Redis数据库的时候需要
auth [密码]验证才可操作
Redis图形化工具
another redis desktop manager
1.4 Redis数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有几种常用的数据类型
五大基本类型
字符串 string
哈希 hash
列表 list
集合 set
有序集合 sorted set / zset
特殊类型
GEO 地理坐标
BitMap 基于位操作数据,二值统计
HyperLog 基数统计,12KB固定空间,有误差

1.5 Redis常用命令
1.5.1 字符串 (String)
特点:最基础的类型,二进制安全(可以存储文本、数字甚至图片序列化后的数据)。
- SET
keyvalue:设置键值对。 - GET
key:获取值。 - SETEX
keysecondsvalue:(开发常用) 设置值的同时指定过期时间(单位:秒)。 - SETNX
keyvalue:只有键不存在时才设置(常用于分布式锁的基础实现)。 - INCR / DECR
key:将存储的数字值加1 / 减1(原子操作,适合做计数器)。 - MSET / MGET:批量设置或获取多个键值。
1.5.2 哈希 (Hash)
特点:类似于 Java 的 HashMap,适合存储对象。比起 String 存储 JSON 字符串,Hash 修改单个字段更省内存且方便。
- HSET
keyfieldvalue:设置哈希表字段的值。 - HGET
keyfield:获取指定字段的值。 - HGETALL
key:获取该 Key 下所有的字段和值。 - HDEL
keyfield:删除一个或多个字段。 - HKEYS
key:获取哈希表中所有 field - HVALS
key:获取哈希表中所有 value - HEXISTS
keyfield:判断字段是否存在。 - HINCRBY
keyfieldincrement:给指定字段的数值加上增量。
1.5.3 列表 (List)
特点:简单的字符串列表,按插入顺序排序。可以作为 栈(Stack) 或 队列(Queue) 使用。
- LPUSH / RPUSH
keyvalue:从左侧 / 右侧插入元素。 - LPOP / RPOP
key:从左侧 / 右侧移除并返回第一个元素。 - LRANGE
keystartstop:获取指定范围内的元素(0 -1代表查看全部)。 - LLEN
key:获取列表长度。 - BRPOP
keytimeout:阻塞式弹出,如果列表没数据会等待(常用于简单的消息队列)。
1.5.4 集合 (Set)
特点:无序且唯一。支持集合间的交集、并集、差集操作。
- SADD
keymember:添加成员。 - SMEMBERS
key:返回所有成员。 - SISMEMBER
keymember:判断成员是否存在(查询速度极快)。 - SREM
keymember:移除成员。 - SCARD
key:获取成员总数。 - SINTER / SUNION / SDIFF:计算多个集合的交集 / 并集 / 差集。
1.5.5 有序集合 (Sorted Set / ZSet)
特点:每个元素关联一个分数(Score),自动按分数排序。非常适合做排行榜。
- ZADD
keyscoremember:添加成员并指定分数,或更新分数。 - ZRANGE
keystartstop[WITHSCORES]:按分数从小到大返回。 - ZREVRANGE
keystartstop:按分数从大到小返回。 - ZSCORE
keymember:获取指定成员的分数。 - ZRANK / ZREVRANK:获取成员的排名(从 0 开始)。
- ZREM
keymember:移除成员。
1.5.6 全局通用管理命令 (必会)
这些命令不分类型,对所有 Key 都通用:
| 命令 | 说明 |
|---|---|
| KEYS * | 查看所有 Key(生产环境严禁使用,会导致阻塞) |
EXISTS key | 检查 Key 是否存在 |
TYPE key | 查看 Key 的数据类型 |
DEL key | 删除指定的 Key |
EXPIRE key seconds | 为 Key 设置过期时间 |
TTL key | 查看 Key 剩余的生存时间(-1 永久,-2 已过期) |
| DBSIZE | 查看当前数据库的 Key 总数 |
| FLUSHDB | 清空当前数据库(慎用) |
1.6 在Java中操作Redis
1.6.1 Redis的Java客户端
Redis的Java客户端很多,常用的几种:
- Jedis
- Lettuce
- Spring Data Redis
Spring Data Redis 是 Spring 的一部分,对 Redis 底层开发包进行了高度封装,在 Spring 项目中,可以使用 Spring Data Redis 来简化操作
1.6.2 Spring Data Redis使用方式
在 SpringBoot 中使用 Redis,官方提供了一套非常成熟的方案:Spring Data Redis。它通过封装底层的 Redis 客户端(如 Lettuce 或 Jedis),让我们能像操作 Java 集合一样操作 Redis。
- 引入依赖
在你的
pom.xml中引入 Spring Boot 官方提供的 Starter。它会自动包含连接池等必要组件。xml<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>- 配置连接信息
在
application.yml中配置 Redis 的地址。由于你目前是在本地开发,且之前尝试过设置密码,配置如下:ymlspring: redis: host: localhost port: 6379 # 如果你之前在 conf 里没设密码,这里就留空 password: database: 0 # 默认使用 0 号数据库 lettuce: pool: max-active: 8 # 最大连接数 max-idle: 8 # 最大空闲连接- 配置序列化器(关键步骤)
默认情况下,Spring 使用 Java 自带的序列化(JdkSerializationRedisSerializer),这会导致你在 Another Redis 里看到的 Key 是一串像
\xac\xed\x00\x05这样的乱码。为了方便观察和通用性,我们通常将其配置为 JSON 序列化:
java@Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); // 使用 StringRedisSerializer 来序列化 Key template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); // 使用 GenericJackson2JsonRedisSerializer 来序列化 Value(转为 JSON 存储) GenericJackson2JsonRedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer(); template.setValueSerializer(jsonSerializer); template.setHashValueSerializer(jsonSerializer); return template; } }- 在代码中操作 Redis
Spring 提供了两个核心工具类:
StringRedisTemplate:专门处理String类型的 Key-Value,读写速度最快。RedisTemplate:可以处理复杂的 Java 对象。
示例:在 Service 层使用
java@Service public class DishService { @Autowired private RedisTemplate<String, Object> redisTemplate; public void testRedis() { // 1. 操作 String redisTemplate.opsForValue().set("shop_status", 1, 1, TimeUnit.HOURS); // 2. 操作 Hash(适合存储对象,如菜品详情) redisTemplate.opsForHash().put("dish:101", "name", "红烧肉"); redisTemplate.opsForHash().put("dish:101", "price", 38); // 3. 获取数据 Object status = redisTemplate.opsForValue().get("shop_status"); // 4. 删除数据 redisTemplate.delete("shop_status"); } }- 常用操作映射表
RedisTemplate的方法命名非常有规律,对应了 Redis 的数据结构:Redis 命令类型 Java 操作对象 示例 String opsForValue()set(k, v),get(k)Hash opsForHash()put(k, f, v),get(k, f)List opsForList()leftPush(k, v),rightPop(k)Set opsForSet()add(k, v),members(k)ZSet opsForZSet()add(k, v, score),range(k, s, e)💡 进阶:使用注解简化(Spring Cache)
如果你觉得手动写
opsForValue太麻烦,Spring 还提供了一套注解。只需在方法上加个注解,它会自动先查 Redis,查不到再查数据库并写入 Redis。java@Cacheable(cacheNames = "dishCache", key = "#id") // 自动缓存结果 public Dish getById(Long id) { return dishMapper.getById(id); }
1.7 将Redis注册为Windows服务
将 Redis 注册为 Windows 服务是本地开发中提升效率的常规操作。通过这种方式,Redis 会随系统启动而在后台自动运行。
由于 Redis 官方并不正式支持 Windows,我们通常使用的是微软或 tporadowski 维护的 Windows 移植版。以下是具体操作步骤:
使用命令行注册服务
以管理员身份运行终端:按下
Win + X,选择“命令提示符(管理员)”或“终端(管理员)”。进入 Redis 安装目录:假设你的 Redis 安装在
D:\Redis。DOS
d: cd D:\Redis执行安装命令:
DOS
.\redis-server --service-install redis.windows.conf --loglevel verbose--service-install:表示安装为服务。redis.windows.conf:指定配置文件(确保该文件在当前目录下)。
启动服务
安装成功后,你可以通过以下命令启动 Redis:
DOS
redis-server --service-start或者直接使用 Windows 自带的服务管理命令:
DOS
net start redis- 管理 Redis 服务
如果你需要停止、卸载或修改服务,可以使用以下常用命令:
| 操作 | 命令 |
|---|---|
| 启动服务 | redis-server --service-start |
| 停止服务 | redis-server --service-stop |
| 卸载服务 | redis-server --service-uninstall |
| 重命名服务 | redis-server --service-install --service-name RedisServerName |
- 通过 GUI 界面检查状态
如果你想确认 Redis 是否真的设置成了“自动启动”:
- 按下
Win + R,输入services.msc并回车。 - 在列表中找到 Redis。
- 右键选择“属性”,确保“启动类型”为“自动”。
💡 进阶建议:配合 Docker 运行(推荐)
既然你之前在 User Summary 中提到对 Docker 有兴趣,其实在 Windows 上最现代的做法是使用 Docker 容器化运行 Redis:
Bash
# 运行一个名为 redis 的容器,并设置为随机启动
docker run -d --name redis -p 6379:6379 --restart always redis优点:不需要在 Windows 系统里安装各种环境变量和 .conf 文件,且版本切换极其方便(比如从 Redis 5 切换到 Redis 7 只需要改个标签)。
你现在是习惯在宿主机直接安装软件,还是准备尝试把整个“苍穹外卖”的中间件(MySQL, Redis, Nginx)都迁移到 Docker 中管理?