Redis总结

最近针对Redis的基本数据结构、持久化机制、事务、主从复制和分布式锁等知识点做了系统的学习和整理,现对本次学习Redis的过程做一次思考和总结。

为什么要使用nosql(not only sql)

这个问题我们站在互联网技术中常提到的"高并发""高可用"关键词来思考这个问题,我是这样子理解的:

  • 传统的关系型数据库,比如单机的MySQL的QTS只有2000~3000左右,在一些大并发的场景下,比如618活动、双11活动等场景下,数据库根本就扛不住这么大的并发量,轻而易举的就将数据库打挂了,从而导致了服务不可用。
  • 每请求一次数据库可以看作是一次I/O,在大并发的场景下,频繁的I/O非常影响系统的性能。
  • 传统的关系型数据库存在扩展成本高、读写慢(速度肯定不会比直接在内存中取快)、容量有限等问题。
  • nosql具有高并发(直接内存操作)、高可用(主从、集群模式)、成本低和没有复杂的关系等优点。
  • Java或者Guava的map其实性能也很高,但是不能满足需求,因为生命周期随着JVM而结束。而且现在大部分项目都是分布式的,没法解决缓存的一致性的问题。

举个例子:用户第一次从数据库中读到数据之后缓存到redis中,然后第二次直接从redis中读取就会大大提高系统的性能。

当然nosql也存在一些缺点,比如不支持SQL语句查询、特性不够丰富等。

综上所述,nosql的出现更多的是为了解决数据量大,分布式中的问题,提高系统的高并发和高可用,为了数据吞吐量上的数量而对数据一致性打一点折扣

市面上常见nosql数据都有什么
  • 键值(Key-Value)存储数据库
    • 相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
    • 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
    • 数据模型: 一系列键值对
    • 优势: 快速查询
    • 劣势: 存储的数据缺少结构化
  • 列存储数据库
    • 相关产品:Cassandra, HBase, Riak
    • 典型应用:分布式的文件系统
    • 数据模型:以列簇式存储,将同一列数据存在一起
    • 优势:查找速度快,可扩展性强,更容易进行分布式扩展
    • 劣势:功能相对局限
  • 文档型数据库
    • 相关产品:CouchDB、MongoDB
    • 典型应用:Web应用(与Key-Value类似,Value是结构化的)
    • 数据模型: 一系列键值对
    • 优势:数据结构要求不严格
    • 劣势: 查询性能不高,而且缺乏统一的查询语法
  • 图形(Graph)数据库
    • 相关数据库:Neo4J、InfoGrid、Infinite Graph
    • 典型应用:社交网络
    • 数据模型:图结构
    • 优势:利用图结构相关算法
    • 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案
redis都有哪些常见的应用场景
  • 最常用的功能就是缓存。直接从缓存查找数据,减少I/O,直接提高程序性能。
  • 分布式session共享的问题。
  • 分布式锁的实现(redisson)。
  • zset实现排行榜功能。
  • BitMap实现判断哪些用户登陆过系统的功能
  • 实现发布/订阅功能,不过基本不推荐这么使用,有成熟的MQ解决方案,比如rabbitMQ、kafka
redis核心知识点
### Redis 实训总结经验分享 Redis 是一种高性能的内存数据库,广泛应用于缓存、消息队列、分布式锁等场景。以下是对 Redis 实训中关键点的总结和经验分享。 #### 1. Redis 的安全问题 在实际项目中,Redis 的安全性是一个不可忽视的问题。如果配置不当,可能会导致数据泄露、拒绝服务攻击或数据篡改等问题[^1]。因此,在使用 Redis 时需要特别注意以下几点: - **访问控制**:通过设置密码(`requirepass` 配置项)限制对 Redis 服务器的访问。 - **限流防护**:启用 Redis 的限流机制,防止恶意请求导致的服务中断。 - **数据加密**:对于敏感数据,可以采用数据加密技术确保其完整性。 #### 2. Redis 的性能优化 Redis 的高性能主要得益于其基于内存的操作模式以及简单的键值存储结构。在实际应用中,可以通过以下方式进一步提升 Redis 的性能[^2]: - **缓存策略**:将热点数据存储到 Redis 中,减少对后端数据库(如 MySQL)的直接访问压力。例如,让 80% 以上的查询走缓存,20% 以下的查询走数据库- **持久化配置**:根据业务需求选择合适的持久化方式(RDB 或 AOF)。RDB 提供快照式持久化,适合数据恢复;AOF 提供更高的数据安全性,但可能会影响性能。 - **分片集群**:当单机 Redis 的容量或性能无法满足需求时,可以考虑使用 Redis 分片或 Redis 集群来扩展存储能力和并发处理能力。 #### 3. Redis 的备份恢复 为了确保数据的安全性和可靠性,定期进行 Redis 数据备份是非常重要的[^1]。以下是备份恢复的最佳实践: - **自动备份**:通过配置定时任务(如 `cron`)定期生成 RDB 文件。 - **增量备份**:结合 AOF 日志实现增量备份,减少全量备份带来的性能开销。 - **灾难恢复**:在主从架构中,确保从节点的数据同步正常,以便在主节点故障时快速切换。 #### 4. 权限管理可视化范围 在某些项目中,Redis 的数据可能需要根据不同角色的权限进行访问控制。例如,在一个微信小程序开发项目中,不同用户角色可以查看不同的数据范围[^3]。类似地,可以在 Redis 中实现类似的权限管理逻辑: - **命名空间隔离**:为不同角色的数据设置独立的命名空间前缀,避免数据冲突。 - **ACL 控制**:Redis 6.0 及以上版本支持 ACL(Access Control List),可以为不同用户分配特定的命令权限和键空间访问权限。 #### 5. Maven 项目中的 Redis 集成 在基于 Maven 的 Spring Boot 项目中集成 Redis 时,可以通过以下步骤完成配置[^4]: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 同时,需要在 `application.yml` 或 `application.properties` 文件中配置 Redis 连接信息: ```yaml spring: redis: host: localhost port: 6379 password: your_password timeout: 5000ms lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0 ``` #### 6. 常见问题解决方法 在 Redis 实训过程中,可能会遇到以下常见问题: - **内存不足**:可以通过调整 `maxmemory` 和 `maxmemory-policy` 参数来解决。 - **网络延迟**:检查 Redis 服务器客户端之间的网络连接是否正常。 - **数据丢失**:确保持久化配置正确,并定期测试数据恢复流程。 --- ### 示例代码:Redis 缓存操作 以下是一个简单的 Redis 缓存操作示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; @Service public class CacheService { @Autowired private StringRedisTemplate redisTemplate; public void setCache(String key, String value) { redisTemplate.opsForValue().set(key, value); } public String getCache(String key) { return redisTemplate.opsForValue().get(key); } } ``` ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值