仿论坛项目--Redis,一站式高性能存储方案

2024-09-06 06:04

本文主要是介绍仿论坛项目--Redis,一站式高性能存储方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Redis入门

• Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构:
字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。
• Redis将所有的数据都存放在内存中,所以它的读写性能十分惊人。
同时,Redis还可以将内存中的数据以快照或日志的形式保存到硬盘上,以保证数据的安全性。
• Redis典型的应用场景包括:缓存、排行榜、计数器、社交网络、消息队列等。
下载好之后,配置环境变量。E:\work\Redis
打开cmd,输入redis-cli启动redis
默认15个库,通过命令select 1,2…选择相应的库

set test:count 1
get test:count取值
incr test:count 增加
decr test:count 减少

Spring整合Redis

• 引入依赖

  • spring-boot-starter-data-redis
    • 配置Redis
  • 配置数据库参数
  • 编写配置类,构造RedisTemplate
    • 访问Redis
  • redisTemplate.opsForValue()
  • redisTemplate.opsForHash()
  • redisTemplate.opsForList()
  • redisTemplate.opsForSet()
  • redisTemplate.opsForZSet()

点赞

• 点赞

  • 支持对帖子、评论点赞。
  • 第1次点赞,第2次取消点赞。
    • 首页点赞数量
  • 统计帖子的点赞数量。
    • 详情页点赞数量
  • 统计点赞数量。
  • 显示点赞状态。

我收到的赞

• 重构点赞功能

  • 以用户为key,记录点赞数量
  • increment(key),decrement(key)
    • 开发个人主页
  • 以用户为key,查询点赞数量

关注、取消关注

• 需求

  • 开发关注、取消关注功能。
  • 统计用户的关注数、粉丝数。
    • 关键
  • 若A关注了B,则A是B的Follower(粉丝),B是A的Followee(目标)。
  • 关注的目标可以是用户、帖子、题目等,在实现时将这些目标抽象为实体。

关注列表、粉丝列表

• 业务层

  • 查询某个用户关注的人,支持分页。
  • 查询某个用户的粉丝,支持分页。
    • 表现层
  • 处理“查询关注的人”、“查询粉丝”请求。
  • 编写“查询关注的人”、“查询粉丝”模板。

优化登录模块

• 使用Redis存储验证码

  • 验证码需要频繁的访问与刷新,对性能要求较高。
  • 验证码不需永久保存,通常在很短的时间后就会失效。
  • 分布式部署时,存在Session共享的问题。
    • 使用Redis存储登录凭证
  • 处理每次请求时,都要查询用户的登录凭证,访问的频率非常高。
    • 使用Redis缓存用户信息
  • 处理每次请求时,都要根据凭证查询用户信息,访问的频率非常高。

关于Redis的概念,下列描述错误的是()

A.NoSQL是关系型数据库之外的数据库的统称,Redis就是一个NoSQL数据库。

B.Redis以键值对的形式,将数据存储于硬盘中,其所有的kay都是字符串类型!

C.Redis的值支持多种数据类型,包括字符串、哈希、列表、集合、有序集合等。

D.Redis提供了对值进行运算的命令,如对集合求交集、并集、差集等。

解析:
A. NoSQL是关系型数据库之外的数据库的统称,Redis就是一个NoSQL数据库。

这个说法是对的。NoSQL数据库确实是指那些非关系型的数据库,而Redis正是一个NoSQL数据库。

B. Redis以键值对的形式,将数据存储于硬盘中,其所有的key都是字符串类型!

这里有一个错误。Redis默认是将数据存储在内存中的,并不是硬盘。虽然Redis可以从硬盘中读取持久化数据或把数据写入硬盘(通过RDB快照或AOF机制),但其主要特性之一就是作为内存数据库提供快速的数据访问。

C. Redis的值支持多种数据类型,包括字符串、哈希、列表、集合、有序集合等。

这个说法是正确的。Redis支持多种数据类型,包括但不限于字符串、哈希、列表、集合、有序集合等。

D. Redis提供了对值进行运算的命令,如对集合求交集、并集、差集等。

这也是正确的。Redis确实提供了针对集合和其他数据类型的命令来执行各种操作,包括但不限于交集、并集、差集等。

关于Redis的持久化,下列描述错误的是:()

A.RDS是以快照的形式,将内存中的数据整体拷贝到硬盘上。
B.执行RDS存储时会产生阻塞,因此RDS不适合实时备份,而适合定时备份。
C.AOF是以日志形式,将内存中的数据整体拷贝到硬盘上。
D.AOF的操作实时性好,但是产生的数据体积大,数据的恢复速度慢。

解析:
A. RDB(Redis Database dump,即RDS)是以快照的形式,将内存中的数据整体拷贝到硬盘上。

这个描述是正确的。RDB是Redis的一种持久化方式,它会创建一个数据快照并保存到硬盘上。

B. 执行RDB存储时会产生阻塞,因此RDB不适合实时备份,而适合定时备份。

这个描述也是准确的。在执行RDB持久化时,Redis会有一个短暂的时间内停止处理客户端请求,这可能会导致服务短暂中断或延迟,因此通常是在低峰时段进行。

C. AOF(Append Only File)是以日志形式,将内存中的数据整体拷贝到硬盘上。

这里存在错误。AOF并不是将内存中的数据整体拷贝到硬盘上,而是记录所有写入操作的命令到一个文件中。当Redis启动时,它可以通过重新执行这些命令来重建数据集。

D. AOF的操作实时性好,但是产生的数据体积大,数据的恢复速度慢。

这个描述基本是正确的。AOF因为记录的是命令,所以它的实时性较好,但由于记录了每一次写操作,文件可能变得非常大,而且在数据恢复时可能需要花费较长时间来重放这些命令。

想要返回有序集合中元素的个数,下列命令中正确的是()

A.zcard key
B.scard key
C.zlen key
D.zsize key

解析:
A.zcard key - 这个命令用于获取无序集合(Set)的大小,而不是有序集合(Sorted Set)。

B.scard key - 这个命令同样用于获取无序集合(Set)的大小,与有序集合无关。

C.zlen key - 这个命令不存在,正确的命令应该是zcount key,用于计算有序集合在指定分数范围内的元素数量。

D.zsize key - 这个命令也不存在,正确的命令应该是zcount key,用于计算有序集合在指定分数范围内的元素数量。

综上所述,选项A和B是针对无序集合的命令,选项C和D是错误的命令。实际上,要获取有序集合中元素的个数,应该使用zcard key这个命令。所以正确答案为A。

这篇关于仿论坛项目--Redis,一站式高性能存储方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141200

相关文章

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里