您的位置:首页 > 新闻 > 会展 > 生成链接_商城app骗局_免费个人网站怎么建立_网站seo推广seo教程

生成链接_商城app骗局_免费个人网站怎么建立_网站seo推广seo教程

2024/10/11 8:20:09 来源:https://blog.csdn.net/weixin_43925427/article/details/142813085  浏览:    关键词:生成链接_商城app骗局_免费个人网站怎么建立_网站seo推广seo教程
生成链接_商城app骗局_免费个人网站怎么建立_网站seo推广seo教程

目录

    • 1. Redis 概述
      • 什么是 Redis
      • Redis 应用场景
    • 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

Redis(Remote Dictionary Server)是一个开源的、高性能的键值对(Key-Value)存储数据库,广泛用于数据库、缓存和消息代理。由 Salvatore Sanfilippo 于 2009 年创建,Redis 具备以下显著特点:

  • 内存存储:所有数据存储在内存中,提供极高的读写速度。
  • 多种数据结构:支持字符串、列表、哈希、集合、有序集合等多种数据类型,满足不同的应用需求。
  • 持久化:提供 RDB 和 AOF 两种持久化机制,确保数据在服务器重启后不丢失。
  • 原子操作:所有操作都是原子性的,支持事务处理。
  • 丰富的功能:包括发布/订阅、Lua 脚本、主从复制、哨兵和集群模式,适应各种复杂应用场景。

Redis 应用场景

Redis 的高性能和多样的数据结构使其适用于多种场景,包括但不限于:

  • 缓存:缓存数据库查询结果、会话数据等,提升系统性能。
  • 消息队列:通过列表或发布/订阅模式实现消息队列功能。
  • 排行榜和计数器:利用有序集合和计数器功能实现实时排行榜和计数器。
  • 实时分析:进行实时数据分析和统计,如网站访问量、在线用户数等。
  • 分布式锁:在分布式系统中实现锁机制,保证资源的安全访问。
  • 持久化存储:在需要高性能读写且数据量较小的场景下作为主数据存储。

2. 安装与启动

Redis 安装步骤

Redis 的安装方式多种多样,常见的有源代码安装和使用包管理器安装。以下以源代码安装和 Ubuntu 系统下的包管理器安装为例,详细介绍 Redis 的安装步骤。

源代码安装
  1. 下载源码

    wget http://download.redis.io/redis-stable.tar.gz
    tar xzf redis-stable.tar.gz
    cd redis-stable
    
  2. 编译

    make
    make test  # 可选,运行测试确保编译正确
    sudo make install
    
  3. 配置
    Redis 默认配置文件为 redis.conf,可以复制一份进行修改:

    cp redis.conf /etc/redis.conf
    # 以管理员身份登录
    sudo -i
    cd /etc/redis/
    #备份
    cp redis.conf redis.conf.copy
    
  4. 启动 Redis

    redis-server /etc/redis.conf
    
使用包管理器安装(以 Ubuntu 为例)
  1. 更新包列表

    sudo apt update
    
  2. 安装 Redis

    sudo apt install redis-server
    
  3. 启动 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 123456

3. Redis 存储结构

Redis 支持多种数据结构,每种数据结构适用于不同的应用场景。以下是 Redis 的主要存储结构详解。

KV 存储结构

Redis 的基本数据模型是键值对(Key-Value)。每个键都是唯一的,可以关联不同类型的值。键通常是字符串,值可以是多种数据类型,包括字符串、列表、哈希、集合和有序集合。
在这里插入图片描述

数据结构类型

String(字符串)
  • 描述:最基本的 Redis 数据类型,类似于键值对中的值。
  • 特点
    • 可以包含任何类型的数据,如文本、数字、二进制数据。
    • 最大值为 512 MB。
  • 常用命令
    • SET key value:设置键的值。
    • GET key:获取键的值。
    • INCR key:将键的值递增。

示例

SET name "Alice"
GET name  # 返回 "Alice"
List(列表)
  • 描述:一个有序的字符串列表,可以从两端推入或弹出元素。
  • 特点
    • 支持队列和栈操作。
    • 双端链表实现,适合频繁的头尾操作。
  • 常用命令
    • 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 value
    
  • GET:获取键的值。

    GET key
    
  • INCR:将键的值递增 1。

    INCR key
    
  • DECR:将键的值递减 1。

    DECR key
    
  • APPEND:向键的值追加字符串。

    APPEND key value
    

List 相关命令

  • LPUSH:在列表左侧推入一个或多个值。

    LPUSH key value1 [value2 ...]
    
  • RPUSH:在列表右侧推入一个或多个值。

    RPUSH key value1 [value2 ...]
    
  • LPOP:弹出列表左侧第一个值。

    LPOP key
    
  • RPOP:弹出列表右侧第一个值。

    RPOP key
    
  • LRANGE:获取列表指定范围的值。

    LRANGE key start stop
    

Hash 相关命令

  • HSET:设置哈希字段的值。

    HSET key field value
    
  • HGET:获取哈希字段的值。

    HGET key field
    
  • HDEL:删除哈希中的一个或多个字段。

    HDEL key field1 [field2 ...]
    
  • HGETALL:获取哈希中所有字段和值。

    HGETALL key
    
  • HEXISTS:检查哈希中是否存在某个字段。

    HEXISTS key field
    

Set 相关命令

  • SADD:向集合添加一个或多个成员。

    SADD key member1 [member2 ...]
    
  • SREM:从集合中移除一个或多个成员。

    SREM key member1 [member2 ...]
    
  • SMEMBERS:获取集合中的所有成员。

    SMEMBERS key
    
  • SISMEMBER:检查成员是否在集合中。

    SISMEMBER key member
    
  • SCARD:获取集合的成员数量。

    SCARD key
    

Zset 相关命令

  • ZADD:向有序集合添加一个或多个成员及其分数。

    ZADD key score1 member1 [score2 member2 ...]
    
  • ZRANGE:按分数范围获取成员。

    ZRANGE key start stop [WITHSCORES]
    
  • ZREM:移除有序集合中的一个或多个成员。

    ZREM key member1 [member2 ...]
    
  • ZSCORE:获取成员的分数。

    ZSCORE key member
    
  • ZCARD:获取有序集合的成员数量。

    ZCARD key
    

5. Redis 高级应用

Redis 不仅是一个简单的键值存储,还支持许多高级功能,适用于复杂的应用场景。以下是 Redis 的几种高级应用详解。

分布式锁

在分布式系统中,分布式锁用于确保多个进程或线程之间对共享资源的互斥访问。Redis 通过 SETNX 命令和过期时间来实现分布式锁。

实现步骤

  1. 尝试获取锁

    SET key value NX PX timeout
    
    • NX:只有在键不存在时才设置键。
    • PX timeout:设置键的过期时间,防止死锁。
  2. 释放锁
    通过 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 value
    
  • GETBIT:获取位值。

    GETBIT key offset
    
  • BITCOUNT:统计位为 1 的数量。

    BITCOUNT key [start end]
    
  • BITOP:对多个键的位进行操作(AND, OR, XOR, NOT)。

    BITOP operation destkey key1 [key2 ...]
    

应用场景

  • 用户活跃度统计。
  • 布隆过滤器实现。
  • 权限控制。

累加器

累加器用于对数值进行累加操作,常用于统计和计数。

实现方式

利用 Redis 的 INCRINCRBY 等命令对键的值进行递增操作。

示例

INCR page_views  # 将 page_views 键的值递增 1
INCRBY page_views 10  # 将 page_views 键的值递增 10

阻塞队列与异步消息队列

Redis 的列表可以用作阻塞队列,通过 BLPOPBRPOP 命令实现。
在这里插入图片描述

阻塞队列

生产者通过 RPUSH 将消息推入队列,消费者通过 BLPOP 从队列左侧阻塞获取消息。

示例

# 生产者
RPUSH queue "message1"# 消费者
BLPOP queue 0  # 阻塞等待直到有消息

发布/订阅模式

利用 Redis 的发布/订阅功能实现消息广播。

示例

# 订阅者
SUBSCRIBE channel1# 发布者
PUBLISH channel1 "Hello, World!"

分布式定时器

分布式定时器用于在分布式系统中实现定时任务,可以利用 Redis 的有序集合和定时任务调度机制。

实现步骤

  1. 存储定时任务
    将定时任务存储在有序集合中,分数为执行时间戳。

    ZADD timers timestamp task_data
    
  2. 调度执行
    定期检查有序集合中分数小于等于当前时间的任务并执行。

    ZRANGEBYSCORE timers -inf current_timestamp
    
  3. 执行并移除任务
    执行任务后,将其从有序集合中移除。

    ZREM timers task_data
    

6. 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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com