【4.0】Redis使用场景和通用命令

发布时间 2023-09-10 13:45:16作者: Chimengmeng

【一】使用场景

缓存系统:使用最广泛的就是缓存

计数器:网站访问量,转发量,评论数(文章转发,商品销量,单线程模型,不会出现并发问题)

消息队列:发布订阅,阻塞队列实现(简单的分布式,blpop:阻塞队列,生产者消费者)

排行榜:有序集合(阅读排行,点赞排行,推荐(销量高的,推荐))有序集合

社交网络:很多特效跟社交网络匹配,粉丝数,关注数

实时系统:垃圾邮件处理系统,布隆过滤器

【1】缓存系统:

  • 缓存是一种用于提高访问数据的性能的技术。
    • 它通过将计算或数据库访问的结果存储在高速存储介质中,例如内存中,来加快对这些数据的后续访问速度。
    • 缓存系统通常用于加速热门数据的读取访问,并减轻底层数据存储系统的负载压力。
  • 举例来说
    • 假设有一个电子商务网站,用户频繁地浏览特定商品的详细信息页面。
    • 为了提高性能,网站可以使用缓存系统将这些商品的信息存储在内存中。
    • 当用户再次访问相同的商品页面时,系统会首先检查缓存中是否存在该商品的数据。
    • 如果存在,则直接从缓存中获取,省去了从数据库中读取的时间和工作量。
    • 这样可以显著降低响应时间并提高用户体验。

【2】计数器:

  • 计数器通常用于记录某个事件发生的次数。
    • 例如,网站可以使用计数器来跟踪访问量、转发量或评论数等指标。
    • 计数器可以帮助网站了解用户行为、评估内容的受欢迎程度以及为用户提供个性化推荐等。
  • 例如
    • 一个新闻网站可以使用计数器来记录每篇文章的阅读量。
    • 每当有用户打开一篇文章时,计数器加一。
    • 通过定期更新或实时展示阅读量数据,网站可以向用户展示热门文章、推荐相关内容,并向广告商提供准确的阅读量统计。

【3】消息队列:

  • 消息队列是一种在分布式系统中用于异步通信和解耦各个组件之间的技术。
    • 它可以将消息从一个发送者传递给一个或多个接收者,以便进行后续的处理。
  • 举例来说
    • 一个电子商务网站可能有许多服务需要处理订单、库存管理、支付、发货等任务。
    • 为了提高系统的可伸缩性和稳定性,可以使用消息队列作为这些服务之间的通信桥梁。
    • 当有新的订单生成时,订单服务可以将订单信息发布到消息队列中。
    • 然后,库存服务、支付服务和发货服务等消费者可以异步地从消息队列中获取订单信息并进行处理。

【4】排行榜:

  • 排行榜是用于按照特定标准对数据进行排序并展示前几名的功能。
    • 在多个应用场景中,如阅读排行、点赞排行和推荐系统等,可以使用有序集合来实现排行榜功能。
  • 举例来说
    • 一个新闻阅读网站可以使用有序集合记录每篇文章的阅读量,并根据阅读量对文章进行排序。
    • 通过定期更新有序集合中文章的阅读量,网站可以实现实时更新的阅读排行榜,向用户展示热门文章,并为用户提供个性化推荐。

【5】社交网络:

  • 社交网络在很多特效和功能中都与用户的关注和粉丝数息息相关。
    • 通过记录用户的关注和粉丝信息,社交网络可以提供用户之间的连接、消息通知、动态更新等功能。
  • 例如
    • 一个微博平台可以使用关注和粉丝数来衡量用户的影响力和受欢迎程度。
    • 用户的关注数表示有多少人关注了该用户,而粉丝数表示有多少人关注了该用户。
    • 这些指标可以用于计算用户的影响力指数,并用于确定用户在平台上的可见性和推荐算法中的权重。

【6】实时系统:

  • 实时系统要求能够在给定时间限制内进行快速响应和处理。
    • 它们广泛应用于垃圾邮件处理系统、即时通讯应用、金融交易系统等场景。
  • 举例来说
    • 一个垃圾邮件处理系统需要通过分析邮件内容和发件人信息来判断是否为垃圾邮件。
    • 为了在实时性要求下进行有效的过滤,可以使用布隆过滤器数据结构。
    • 布隆过滤器可以快速地判断一个元素是否可能存在,从而提高垃圾邮件过滤的效率。

【二】通用命令

  • Redis通用命令是用于管理和操作Redis数据库的一组基础命令。

【1】keys

  • 该命令用于获取匹配指定模式的所有键名。

  • 尽管这个命令很方便,但在生产环境中不推荐使用,因为它需要遍历整个键空间,时间复杂度为O(n)。

  • 在生产环境中,更适合使用scan命令来遍历大量键。

  • 示例:

# 打印出所有键名
keys *

# 打印出所有以"he"开头的键名
keys he*

# 打印出所有以"he"开头,第三个字母是'h'到'l'的键名范围
keys he[h-l]

# 三位长度,以"he"开头,"?"表示任意一位字符
keys he?

【2】dbsize

  • 该命令用于计算当前数据库中键的总数。

  • Redis内置了一个计数器,可以在生产环境中使用该命令,它的时间复杂度是O(1)。

  • 示例:

# 计算当前数据库中的键的总数
dbsize

【3】exists

  • 该命令用于检查给定键是否存在于数据库中。

  • 如果键存在,则返回1;如果不存在,则返回0。

  • 它的时间复杂度是O(1)。

  • 示例:

# 设置键"a"
set a b

# 检查键"a"是否存在
exists a

【4】del

  • 该命令用于删除给定的键。

  • 如果键存在并成功删除,则返回1;如果键不存在,则返回0。

  • 它的时间复杂度是O(1)。

  • 示例:

# 删除键"a"
del a

【5】expire

  • 该命令用于设置键的过期时间,以秒为单位。

  • 在指定的时间之后,键将自动被删除。

  • 可以使用ttl命令来查看键的剩余过期时间,并使用persist命令移除键的过期时间。

  • 示例:

# 设置键"name"的过期时间为3秒
expire name 3

# 查看键"name"的剩余过期时间
ttl name

# 去掉键"name"的过期时间
persist name

【6】type

  • 该命令用于获取给定键存储的值的类型。

  • 常见的类型包括字符串(string)、哈希(hash)、列表(list)、集合(set)和有序集合(zset)。

  • 示例:

# 检查键"name"的类型
type name

【7】info

  • info命令用于获取Redis的服务器信息和统计数据。

  • 它可以返回关于内存使用、CPU利用率、客户端连接、主从复制状态等方面的信息。

  • 可以通过传递不同的参数来获取不同类型的信息。

  • 示例:

# 获取Redis服务器所有信息
info

# 获取CPU相关信息
info cpu

# 获取内存相关信息
info memory

【8】client list

  • client list命令用于获取当前连接到Redis服务器的客户端列表。
  • 它返回每个客户端的唯一标识符、IP地址、端口号、连接时长等信息。
  • 示例:
# 获取连接到Redis服务器的客户端列表
client list

【9】client kill

  • client kill命令用于关闭指定客户端的连接。
  • 您可以通过传递客户端的IP地址和端口号来关闭特定的客户端连接。
  • 示例:
# 关闭指定IP地址和端口号的客户端连接
client kill 127.0.0.1:12345

【10】flushall

  • flushall命令用于清空Redis服务器中的所有数据库。
  • 执行此命令将删除所有键和与其相关的数据。
  • 请小心使用该命令,因为数据在执行后将无法恢复。
  • 示例:
# 清空Redis服务器中的所有数据库
flushall

【11】flushdb

  • flushdb命令用于清空当前选定数据库中的所有键和与其相关的数据,而不影响其他数据库。

  • 执行此命令将删除当前数据库中的所有数据。需要注意的是,flushdb只会清空当前所选数据库,而不是整个Redis服务器中的所有数据库。

  • 示例:

# 清空当前选定数据库中的所有数据
flushdb

【12】select

  • select命令用于在多个数据库之间进行切换,以便对指定数据库中的键进行操作。
  • Redis默认有16个数据库,编号从0到15。
  • 通过select命令,您可以切换到指定的数据库,并对其中的键执行操作。
  • 示例:
# 切换到第3个数据库
select 3

# 在第3个数据库中执行其他Redis命令
get key1
set key2 value

【13】monitor

  • monitor命令用于启动Redis服务器的监视器模式,即记录并打印出所有发送给服务器的命令请求。
  • 这对于调试和跟踪Redis服务器的操作非常有用。
  • 示例:
# 启动Redis服务器的监视器模式
monitor
  • 请注意,在生产环境中使用这些命令时,务必谨慎操作,特别是在执行flushdb命令时。
  • 确保您已经了解其影响,并在确保备份数据或进行其他必要操作后再执行。
  • 此外,需要格外注意选择正确的数据库并使用monitor命令,以避免对错误的数据进行操作或产生过多的日志信息。