Redis(Remote Dictionary Server)是一个开源的高性能键值对(key-value)存储系统,常被用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希表、列表、集合和有序集合。
为什么要用Redis?
使用Redis有多个原因,包括:
- 高性能:Redis是基于内存存储计算的,其性能速度远超MySQL等数据库,计算速度非常快,可以大大提升数据访问速度,减少响应时间。
- 数据结构丰富:Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等,这些数据结构可以满足大部分常见的数据存储需求。
- 丰富的API支持:Redis提供了丰富的API支持,使得在存储和查询数据时可以很方便地使用,同时支持自定义查询API等。
- 成熟的生态:Redis的生态比较成熟,被广泛应用于大型公司中,拥有众多相关知识扩展和分析。
- 分布式集群化扩展性高:Redis的分布式集群化扩展性极高,能够支撑大量的数据吞吐,只要硬件支持。
- 持久化保证数据安全:Redis支持持久化操作,可以保证数据的持久性和安全性。
- 缓存策略优化:Redis提供了多种缓存策略,可以根据实际需求进行选择和优化,以最大程度地提高数据访问速度和降低对数据库的压力。
Redis 的数据读写速度如何?
Redis 的读写速度非常快,它的读取速度可以达到约110000次/s,写入速度可以达到约81000次/s。
Redis 常见的问题
- 缓存雪崩:当缓存未加载到缓存或者缓存大面积失效,或者缓存故障时,所有请求直接落在数据库上,这可能导致数据库无法承受压力而宕机。为了防止缓存雪崩,可以采取一些防御措施,例如使用随机数来避免缓存失效时间的一致性,快速从RDB或者AOF文件中恢复缓存,以及使用限流或降级策略来保护数据库。
- 缓存击穿:当热点key失效时,大量请求会涌入数据库中查询数据,这可能导致数据库压力过大而宕机。为了解决这个问题,可以在key失效时构建加锁机制,从数据库中获取数据后,其他请求需要等待锁释放后才能访问该key。
- 缓存穿透:当redis中查询的数据不存在时,大量的无效请求会进入数据库中查询数据,这也会导致数据库超负荷。为了解决这个问题,可以在入口处校验请求的合法性,例如通过使用 Bloom Filter 等数据结构来过滤不合法的请求。
- 缓存并发:当多个客户端同时对同一个key进行读写操作时,可能会导致数据的不一致性问题。为了解决这个问题,可以采取一些并发控制的策略,例如使用 Redis 的事务功能或者使用乐观锁等机制来保证数据的原子性和一致性。
- 大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的公用测试用例:
- 缓存功能测试:测试缓存的基本功能是否正常,例如,缓存的添加、删除、查询操作是否正常。
- 缓存性能测试:测试缓存的性能指标是否达到预期,包括缓存的读取速度、写入速度、命中率等。
- 缓存一致性测试:测试缓存与数据库或其他数据源的一致性,确保缓存数据的准确性和及时性。
- 缓存失效机制测试:测试缓存失效机制是否正常,包括缓存的过期时间、回收策略等。
- 缓存并发测试:测试多线程或多进程环境下缓存的并发性能和数据一致性。
- 缓存安全性测试:测试缓存的安全性,包括缓存的访问控制、加密、防止恶意攻击等。
- 缓存内存使用测试:测试缓存的内存使用情况,包括缓存占用的内存大小、内存泄漏等。
- 缓存恢复测试:测试缓存恢复机制是否正常,包括缓存恢复的速度、数据一致性等。