Redis缓存

发布时间 2023-12-20 20:36:31作者: 虾米521

Redis(Remote Dictionary Server)是一个开源的高性能键值对(key-value)存储系统,常被用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希表、列表、集合和有序集合。

 

为什么要用Redis?

使用Redis有多个原因,包括:

  1. 高性能:Redis是基于内存存储计算的,其性能速度远超MySQL等数据库,计算速度非常快,可以大大提升数据访问速度,减少响应时间。
  2. 数据结构丰富:Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等,这些数据结构可以满足大部分常见的数据存储需求。
  3. 丰富的API支持:Redis提供了丰富的API支持,使得在存储和查询数据时可以很方便地使用,同时支持自定义查询API等。
  4. 成熟的生态:Redis的生态比较成熟,被广泛应用于大型公司中,拥有众多相关知识扩展和分析。
  5. 分布式集群化扩展性高:Redis的分布式集群化扩展性极高,能够支撑大量的数据吞吐,只要硬件支持。
  6. 持久化保证数据安全:Redis支持持久化操作,可以保证数据的持久性和安全性。
    1. 缓存策略优化:Redis提供了多种缓存策略,可以根据实际需求进行选择和优化,以最大程度地提高数据访问速度和降低对数据库的压力。

Redis 的数据读写速度如何?

Redis 的读写速度非常快,它的读取速度可以达到约110000次/s,写入速度可以达到约81000次/s。

 

Redis 常见的问题
  1. 缓存雪崩:当缓存未加载到缓存或者缓存大面积失效,或者缓存故障时,所有请求直接落在数据库上,这可能导致数据库无法承受压力而宕机。为了防止缓存雪崩,可以采取一些防御措施,例如使用随机数来避免缓存失效时间的一致性,快速从RDB或者AOF文件中恢复缓存,以及使用限流或降级策略来保护数据库。
  2. 缓存击穿:当热点key失效时,大量请求会涌入数据库中查询数据,这可能导致数据库压力过大而宕机。为了解决这个问题,可以在key失效时构建加锁机制,从数据库中获取数据后,其他请求需要等待锁释放后才能访问该key。
  3. 缓存穿透:当redis中查询的数据不存在时,大量的无效请求会进入数据库中查询数据,这也会导致数据库超负荷。为了解决这个问题,可以在入口处校验请求的合法性,例如通过使用 Bloom Filter 等数据结构来过滤不合法的请求。
  4. 缓存并发:当多个客户端同时对同一个key进行读写操作时,可能会导致数据的不一致性问题。为了解决这个问题,可以采取一些并发控制的策略,例如使用 Redis 的事务功能或者使用乐观锁等机制来保证数据的原子性和一致性。
  5. 大key问题:当redis中存储的数据过大或者存储了过多的hash、list等节点时,可能会导致内存占用过高和性能下降的问题。为了解决这个问题,可以采取一些优化措施,例如限制key的长度和数量、避免使用过于复杂的数据结构等。

 

只看查询的接口,目前还没有提测,看下大家是怎么测试的 吸取的经验

权益中台华为云容灾测试中,运维只能同步10G以下的缓存同步,会出现数据不一致的情况

1、对账 人工、系统

2、性能问题

3、只读,第一个版本 11.13~11.17

4、了解降级方案

 

 

 

 

 

 

 

 

redis链接方法

 

 

 

  redis:

    database: 0

    port: 25490

    password: coupon123456

    jedis:

      pool:

        maxActive: 8

        maxIdle: 8

        minIdle: 0

    # 本地启动项目需添加 hosts 10.60.200.200

    host: fc-coupon-test.rediscluster.cache.corpautohome.com

    timeout: 30000ms

 

 

 

 

针对redis的公用测试用例:

 

  1. 缓存功能测试:测试缓存的基本功能是否正常,例如,缓存的添加、删除、查询操作是否正常。
  2. 缓存性能测试:测试缓存的性能指标是否达到预期,包括缓存的读取速度、写入速度、命中率等。
  3. 缓存一致性测试:测试缓存与数据库或其他数据源的一致性,确保缓存数据的准确性和及时性。
  4. 缓存失效机制测试:测试缓存失效机制是否正常,包括缓存的过期时间、回收策略等。
  5. 缓存并发测试:测试多线程或多进程环境下缓存的并发性能和数据一致性。
  6. 缓存安全性测试:测试缓存的安全性,包括缓存的访问控制、加密、防止恶意攻击等。
  7. 缓存内存使用测试:测试缓存的内存使用情况,包括缓存占用的内存大小、内存泄漏等。
  8. 缓存恢复测试:测试缓存恢复机制是否正常,包括缓存恢复的速度、数据一致性等。