GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

软件开发 --- redis 之初体验

一个键值对(Key-Value)的内存数据库

可以用作数据库缓存、消息队列、排行榜等场景。

 

快速上手

Redis 默认有 16 个数据库(索引从 0 到 15),但所有命令默认都会在数据库 0 中执行,除非你显式地使用 SELECT 命令来切换到其他数据库。

安装

一、在 Windows 上安装 Redis

Redis 并没有官方支持 Windows 版本,但是可以通过 Microsoft Open Tech 版本或者使用 WSL(Windows Subsystem for Linux)来在 Windows 上运行 Redis。

1.访问 https://github.com/microsoftarchive/redis/releases ,下载最新的 Redis 版本的 .zip 文件。这里只有2016版本的比较旧,还是建议使用官方linux编译的版本,或者其他第三方编译者的软件。

2.解压运行 Redis。

redis-server.exe

 

此时 Redis 会启动,默认监听在 6379 端口。

3.在另一个命令行窗口中,输入:

redis-cli.exe

你就可以开始使用 Redis 了。

注意: 这种方法是微软开放技术组维护的版本,已不再更新,且性能和稳定性较 Linux 上的版本较差。如果你在生产环境中使用 Redis,推荐使用 Linux 环境。

二、在 Linux 上安装 Redis

Redis 在 Linux 上的安装非常简便,通常可以通过包管理器直接安装,也可以从源码进行安装。

方法 1:通过包管理器安装(例如在 Ubuntu 上)

sudo apt update
sudo apt install redis-server
安装完成后,Redis 会自动作为服务启动。可以使用以下命令检查 Redis 服务状态:
sudo systemctl status redis-server
sudo systemctl enable redis-server
redis-cli
测试 Redis
set mykey "Hello, Redis!"
get mykey

 

方法 2:从源码安装 Redis

如果你从源码安装 Redis,首先需要安装一些编译所需的工具:

sudo apt update
sudo apt install build-essential tcl
wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
make test
sudo make install
redis-server
在另一个终端中使用 Redis 客户端:
redis-cli

 

对于生产环境,建议使用 Linux 服务器,因为 Redis 原生是为 Linux 开发的,性能和稳定性更好。

 

1. 数据缓存:快速存取热点数据

Redis 常用来缓存经常访问的数据,减少数据库的压力。

假设我们有一个商品详情页,每次用户访问都要查询数据库。为了加速访问,可以用 Redis 做缓存:

存储商品信息:

SET product:1001 "{'name': 'iPhone 14', 'price': 5999}"
Key 是 product:1001,表示商品 ID 为 1001 的商品。
product也可以理解为表,库默认是0,1001是key Value 是 JSON 字符串,存储商品的名称和价格。

 

获取商品信息:

GET product:1001
返回:{'name': 'iPhone 14', 'price': 5999}。

 

优势:

数据从 Redis 读取速度非常快(内存存储)。

如果商品数据更新,可以直接更新缓存中的值。

 

2. 分布式锁:控制资源访问

在分布式系统中,多个服务可能会同时操作某一资源,Redis 可以用来实现分布式锁,防止冲突。

假设一个秒杀活动中,所有用户都抢同一个商品库存。为了防止超卖,可以用 Redis 锁。

加锁:

SET lock:product:1001 user123 EX 10 NX
lock:product:1001 是锁的名称,表示商品 1001 的锁。
user123 是持有锁的用户 ID。
EX 10 设置锁的过期时间为 10 秒。
NX 表示“只有锁不存在时才设置”。

 

释放锁:

DEL lock:product:1001

 

优势:

防止多个用户同时扣减库存。

锁有过期时间,防止因程序异常导致锁无法释放。

 

3. 消息队列:异步任务处理

Redis 的 List 数据结构可以用来实现简单的消息队列,多个消费者可以异步处理任务。

例子:
假设用户下单后,需要异步发送订单确认邮件。

生产者添加任务:

LPUSH email_queue "{'user_id': 123, 'email': 'user@example.com'}"

 

主程序把任务信息(用户 ID 和邮箱地址)添加到队列 email_queue。

消费者处理任务:

BRPOP email_queue 0

 

发送邮件的程序,从队列中取出任务,并处理发送邮件的操作。

优势:

异步处理,避免阻塞主流程。

支持多个消费者并行处理任务。

 

4. 排行榜:实时统计和排序

Redis 的 Sorted Set(有序集合)可以用来实现排行榜功能。

例子:
假设一个游戏中需要显示玩家积分排行榜。

记录玩家分数:

ZADD leaderboard 1000 player1
ZADD leaderboard 1200 player2
ZADD leaderboard 900 player3

ZADD 命令将玩家和分数添加到有序集合 leaderboard 中。

获取排行榜:

ZREVRANGE leaderboard 0 2 WITHSCORES

返回:[player2: 1200, player1: 1000, player3: 900]。 

优势:

Redis 自动对分数进行排序,查询效率极高。

支持动态更新分数,实时反映变化。

 

5. 会话管理:记录用户登录状态

Redis 可以用来存储用户的会话信息,比如登录状态、购物车内容等。

例子:

记录用户登录状态:

SETEX session:user123 3600 "logged_in"
  //session:user123 是会话的 Key,表示用户 ID 为 123 的会话信息。SETEX:这是 Redis 的一个命令,用于设置一个键的值,并且设置这个键的过期时间。SETEXSETEXPIRE 命令的结合,允许你同时设置键的值和过期时间。
  //3600 是过期时间(秒),表示会话有效时间为 1 小时。
  //logged_in 是会话的状态信息。

 

检查用户是否登录:

GET session:user123
  //返回:logged_in(表示用户已登录)。
  //如果返回 nil,表示会话已过期或用户未登录。 

优势:

使用 Redis 可以高效管理用户的会话,支持大规模并发访问。

会话有过期机制,无需手动清理过期数据。

 

总结

1. 高性能: Redis 数据存储在内存中,读写速度非常快。

2. 丰富的数据结构: 支持字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash)等多种数据类型。

3. 支持持久化: 虽然 Redis 是内存数据库,但支持将数据保存到磁盘,防止数据丢失。

4. 灵活扩展: 支持分布式部署,适合高并发场景。

 

posted on 2024-12-08 19:56  GKLBB  阅读(2)  评论(0编辑  收藏  举报