网站建设的大公司排名,wordpress添加人型插件,中国十大网站公司排名,有什么做衣服的网站好目录 1. Redis 概述什么是 RedisRedis 应用场景 2. 安装与启动Redis 安装步骤源代码安装使用包管理器安装#xff08;以 Ubuntu 为例#xff09; 编译与启动命令编客户端连接 3. Redis 存储结构KV 存储结构数据结构类型String#xff08;字符串#xff09;List#xff08;… 目录 1. Redis 概述什么是 RedisRedis 应用场景 2. 安装与启动Redis 安装步骤源代码安装使用包管理器安装以 Ubuntu 为例 编译与启动命令编客户端连接 3. Redis 存储结构KV 存储结构数据结构类型String字符串List列表Hash哈希Set集合Zset有序集合 4. 基础命令String 相关命令List 相关命令Hash 相关命令Set 相关命令Zset 相关命令 5. Redis 高级应用分布式锁位运算累加器阻塞队列与异步消息队列分布式定时器 6. Redis 使用场景朋友圈点赞与评论购物车实现抽奖应用时间窗口限流百度热榜与延时队列参考 在现代应用开发中Redis 作为一个高性能的键值存储数据库凭借其卓越的性能和丰富的数据结构广泛应用于缓存、消息队列、实时分析等多个领域。 1. Redis 概述
什么是 Redis
RedisRemote Dictionary Server是一个开源的、高性能的键值对Key-Value存储数据库广泛用于数据库、缓存和消息代理。由 Salvatore Sanfilippo 于 2009 年创建Redis 具备以下显著特点
内存存储所有数据存储在内存中提供极高的读写速度。多种数据结构支持字符串、列表、哈希、集合、有序集合等多种数据类型满足不同的应用需求。持久化提供 RDB 和 AOF 两种持久化机制确保数据在服务器重启后不丢失。原子操作所有操作都是原子性的支持事务处理。丰富的功能包括发布/订阅、Lua 脚本、主从复制、哨兵和集群模式适应各种复杂应用场景。
Redis 应用场景
Redis 的高性能和多样的数据结构使其适用于多种场景包括但不限于
缓存缓存数据库查询结果、会话数据等提升系统性能。消息队列通过列表或发布/订阅模式实现消息队列功能。排行榜和计数器利用有序集合和计数器功能实现实时排行榜和计数器。实时分析进行实时数据分析和统计如网站访问量、在线用户数等。分布式锁在分布式系统中实现锁机制保证资源的安全访问。持久化存储在需要高性能读写且数据量较小的场景下作为主数据存储。 2. 安装与启动
Redis 安装步骤
Redis 的安装方式多种多样常见的有源代码安装和使用包管理器安装。以下以源代码安装和 Ubuntu 系统下的包管理器安装为例详细介绍 Redis 的安装步骤。
源代码安装 下载源码 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 默认配置文件为 redis.conf可以复制一份进行修改 cp redis.conf /etc/redis.conf
# 以管理员身份登录
sudo -i
cd /etc/redis/
#备份
cp redis.conf redis.conf.copy启动 Redis redis-server /etc/redis.conf使用包管理器安装以 Ubuntu 为例 更新包列表 sudo apt update安装 Redis sudo apt install redis-server启动 Redis 服务 sudo systemctl start redis
sudo systemctl enable redis # 设置开机自启动编译与启动命令
编译 Redis 源代码的主要命令如下 编译 make运行测试可选 make test安装 sudo make install配置 sudo vim /etc/redis/redis.conf# 守护进程修改为yes后即后台运行
daemonize yes
# 监听的地址默认127.0.0.1会导致只能在本地访问修改为0.0.0.0则可以在任意IP范文
bind 0.0.0.0
# 密码设置后访问redis必须输入密码
requirepass 123456
# 监听端口号默认6379
port 6379 #重启 redis
sudo service redis restart启动 Redis 服务器的命令
redis-server /path/to/redis.conf常用选项包括 后台运行 在 redis.conf 中设置 daemonize yes或使用命令行参数 --daemonize yes。 指定配置文件 redis-server /etc/redis/redis.conf停止 Redis 服务器
redis-cli shutdown编客户端连接
redis-cli [options] [commonds]
-h 指定要连接的redis节点的IP地址默认是127.0.0.1
-p 指定要连接的redis节点的端口默认是6379
-a 指定redis的访问密码 #例如
redis-cli -h 127.0.0.1 -a 1234563. Redis 存储结构
Redis 支持多种数据结构每种数据结构适用于不同的应用场景。以下是 Redis 的主要存储结构详解。
KV 存储结构
Redis 的基本数据模型是键值对Key-Value。每个键都是唯一的可以关联不同类型的值。键通常是字符串值可以是多种数据类型包括字符串、列表、哈希、集合和有序集合。
数据结构类型
String字符串
描述最基本的 Redis 数据类型类似于键值对中的值。特点 可以包含任何类型的数据如文本、数字、二进制数据。最大值为 512 MB。 常用命令 SET key value设置键的值。GET key获取键的值。INCR key将键的值递增。
示例
SET name Alice
GET name # 返回 AliceList列表
描述一个有序的字符串列表可以从两端推入或弹出元素。特点 支持队列和栈操作。双端链表实现适合频繁的头尾操作。 常用命令 LPUSH key value在列表左侧推入一个值。RPUSH key value在列表右侧推入一个值。LPOP key弹出左侧第一个值。RPOP key弹出右侧第一个值。
示例
LPUSH mylist a
RPUSH mylist b
LRANGE mylist 0 -1 # 返回 [a, b]Hash哈希
描述键对应的值是一个键值对集合类似于对象或字典。特点 适合存储对象的属性。内存占用较少。 常用命令 HSET key field value设置哈希字段的值。HGET key field获取哈希字段的值。HGETALL key获取哈希中所有字段和值。
示例
HSET user:1000 name Alice age 30
HGETALL user:1000 # 返回 {name: Alice, age: 30}Set集合
描述一个无序的字符串集合所有元素都是唯一的。特点 支持集合间的交、并、差运算。适合存储标签、好友列表等。 常用命令 SADD key member向集合添加一个成员。SREM key member从集合中移除一个成员。SMEMBERS key获取集合中的所有成员。
示例
SADD myset a b c
SMEMBERS myset # 返回 [a, b, c]Zset有序集合
描述一个带有分数的有序集合成员按分数排序。特点 支持按分数范围查询。适合实现排行榜、优先队列等。 常用命令 ZADD key score member向有序集合添加成员及其分数。ZRANGE key start stop [WITHSCORES]按分数范围获取成员。ZREM key member移除有序集合中的成员。
示例
ZADD leaderboard 100 Alice
ZADD leaderboard 200 Bob
ZRANGE leaderboard 0 -1 WITHSCORES # 返回 [Alice, 100, Bob, 200]4. 基础命令
Redis 提供了丰富的命令集来操作不同的数据结构。以下是各数据类型的一些常用基础命令。
String 相关命令 SET设置键的值。 SET key valueGET获取键的值。 GET keyINCR将键的值递增 1。 INCR keyDECR将键的值递减 1。 DECR keyAPPEND向键的值追加字符串。 APPEND key valueList 相关命令 LPUSH在列表左侧推入一个或多个值。 LPUSH key value1 [value2 ...]RPUSH在列表右侧推入一个或多个值。 RPUSH key value1 [value2 ...]LPOP弹出列表左侧第一个值。 LPOP keyRPOP弹出列表右侧第一个值。 RPOP keyLRANGE获取列表指定范围的值。 LRANGE key start stopHash 相关命令 HSET设置哈希字段的值。 HSET key field valueHGET获取哈希字段的值。 HGET key fieldHDEL删除哈希中的一个或多个字段。 HDEL key field1 [field2 ...]HGETALL获取哈希中所有字段和值。 HGETALL keyHEXISTS检查哈希中是否存在某个字段。 HEXISTS key fieldSet 相关命令 SADD向集合添加一个或多个成员。 SADD key member1 [member2 ...]SREM从集合中移除一个或多个成员。 SREM key member1 [member2 ...]SMEMBERS获取集合中的所有成员。 SMEMBERS keySISMEMBER检查成员是否在集合中。 SISMEMBER key memberSCARD获取集合的成员数量。 SCARD keyZset 相关命令 ZADD向有序集合添加一个或多个成员及其分数。 ZADD key score1 member1 [score2 member2 ...]ZRANGE按分数范围获取成员。 ZRANGE key start stop [WITHSCORES]ZREM移除有序集合中的一个或多个成员。 ZREM key member1 [member2 ...]ZSCORE获取成员的分数。 ZSCORE key memberZCARD获取有序集合的成员数量。 ZCARD key5. Redis 高级应用
Redis 不仅是一个简单的键值存储还支持许多高级功能适用于复杂的应用场景。以下是 Redis 的几种高级应用详解。
分布式锁
在分布式系统中分布式锁用于确保多个进程或线程之间对共享资源的互斥访问。Redis 通过 SETNX 命令和过期时间来实现分布式锁。
实现步骤 尝试获取锁 SET key value NX PX timeoutNX只有在键不存在时才设置键。PX timeout设置键的过期时间防止死锁。 释放锁 通过 Lua 脚本确保释放锁的原子性 if redis.call(GET, key) value thenreturn redis.call(DEL, key)
elsereturn 0
end示例
SET mylock unique_value NX PX 30000 # 尝试获取锁30秒过期位运算
Redis 提供了对位bit的操作通过 BITOP 和相关命令可以进行高效的位操作。
常用命令 SETBIT设置位值。 SETBIT key offset valueGETBIT获取位值。 GETBIT key offsetBITCOUNT统计位为 1 的数量。 BITCOUNT key [start end]BITOP对多个键的位进行操作AND, OR, XOR, NOT。 BITOP operation destkey key1 [key2 ...]应用场景
用户活跃度统计。布隆过滤器实现。权限控制。
累加器
累加器用于对数值进行累加操作常用于统计和计数。
实现方式
利用 Redis 的 INCR、INCRBY 等命令对键的值进行递增操作。
示例
INCR page_views # 将 page_views 键的值递增 1
INCRBY page_views 10 # 将 page_views 键的值递增 10阻塞队列与异步消息队列
Redis 的列表可以用作阻塞队列通过 BLPOP 和 BRPOP 命令实现。
阻塞队列
生产者通过 RPUSH 将消息推入队列消费者通过 BLPOP 从队列左侧阻塞获取消息。
示例
# 生产者
RPUSH queue message1# 消费者
BLPOP queue 0 # 阻塞等待直到有消息发布/订阅模式
利用 Redis 的发布/订阅功能实现消息广播。
示例
# 订阅者
SUBSCRIBE channel1# 发布者
PUBLISH channel1 Hello, World!分布式定时器
分布式定时器用于在分布式系统中实现定时任务可以利用 Redis 的有序集合和定时任务调度机制。
实现步骤 存储定时任务 将定时任务存储在有序集合中分数为执行时间戳。 ZADD timers timestamp task_data调度执行 定期检查有序集合中分数小于等于当前时间的任务并执行。 ZRANGEBYSCORE timers -inf current_timestamp执行并移除任务 执行任务后将其从有序集合中移除。 ZREM timers task_data6. Redis 使用场景
Redis 的高性能和多样化的数据结构使其适用于多种实际应用场景。以下是一些典型的使用案例。
朋友圈点赞与评论
在社交应用中用户的点赞和评论操作需要高并发处理。Redis 的高性能读写能力可以有效应对这种场景。
实现方式 点赞计数 使用字符串或哈希存储每条动态的点赞数量。 INCR post:1000:likes用户点赞记录 使用集合记录用户对哪些动态进行了点赞防止重复点赞。 SADD user:1000:liked_posts 2000评论存储 使用列表存储动态的评论。 RPUSH post:1000:comments Great post!购物车实现
在电商平台中购物车需要快速响应用户的添加、删除和更新操作。Redis 的哈希和列表结构非常适合此类需求。
实现方式 用户购物车 使用哈希存储每个用户购物车中的商品及数量。 HSET cart:user1000 item123 2
HSET cart:user1000 item456 1购物车列表 使用列表记录购物车中的商品顺序支持展示和排序。 RPUSH cart:user1000:items item123 item456抽奖应用
抽奖应用需要高效随机抽取中奖用户Redis 的集合和有序集合提供了良好的支持。
实现方式 用户集合 使用集合存储所有参与抽奖的用户。 SADD lottery:participants user1 user2 user3 ...随机抽取 使用 SRANDMEMBER 命令随机抽取中奖用户。 SRANDMEMBER lottery:participants 1时间窗口限流
为了防止系统被过多请求压垮可以使用 Redis 实现基于时间窗口的限流。
实现方式 滑动时间窗口 使用有序集合记录请求的时间戳并在每次请求时清理过期记录判断当前请求数是否超过限制。 ZADD user:1000:requests timestamp
ZREMRANGEBYSCORE user:1000:requests -inf (current_time - window_size)
ZCARD user:1000:requests固定时间窗口 使用计数器在固定时间窗口内计数。 INCR user:1000:count
EXPIRE user:1000:count window_size百度热榜与延时队列
百度热榜 利用有序集合实现实时的热点榜单根据关键词的热度分数排序展示。
实现方式
ZINCRBY hotwords 1 keyword1
ZRANGE hotwords 0 -1 WITHSCORES延时队列 使用有序集合和定时任务调度实现延时任务如定时发送邮件、订单超时处理等。
实现方式
ZADD delayed_tasks execute_timestamp task_data定期检查并执行到期任务
ZRANGEBYSCORE delayed_tasks -inf current_timestamp参考
0voice · GitHub