本文共 1797 字,大约阅读时间需要 5 分钟。
Redis入门与实践
NoSQL概念探索
NoSQL特点
- 无固定的模式:数据存储不依赖于预定义的模式,灵活性更高。
- 高性能处理大数据:支持高并发和大规模数据存储。
- 多样化数据类型:支持字符串、哈希、列表、集合、有序集合等多种类型。
- 可扩展性:容易根据业务需求扩展数据库水平。
- 分布式特性:支持主从复制、集群部署。
Redis与传统RDBMS对比
- 传统RDBMS:
- 数据结构化
- 使用SQL
- 严格的事务和一致性
- 关系型数据模型
- NoSQL:
- 没有固定的查询语言
- 适合非关系型数据
- 提供高性能、高可用性和可扩展性
NoSQL分类
键值存储(Redis):
- iygoUnlike传统数据库,键值对无需预设模式。
- 适用于高速缓存、会话存储等场景。
文档存储(MongoDB):
- 数据库以文档形式存储,支持动态查询。
- 适合处理非结构化数据,如社交网络信息。
列存储(HBase):
- 基于Google Bigtable设计,以列为中心。
- 适用于高访问率的实时数据处理。
图关系存储(Neo4j):
Redis基础知识
Redis数据结构
- 字符串 (String):支持动态字符串操作,常用于计数器和缓存。
- 哈希 (Hash):存储字段值对,适合用户信息存储。
- 列表 (List):支持栈、队列操作,用于有序数据处理。
- 集合 (Set):存储唯一值,不允许重复,适用于社交关系存储。
- 有序集合 (ZSet):结合有序的特性,支持按顺序查询。
- 地理位置 (Geospatial):支持经纬度存储和距离查询。
- HyperLogLog:用于基数统计,优化PFADD命令。
- 位图 (Bitmap):用于状态存储,如用户活跃度、登录记录等。
Redis持久化
- RDB:将数据结构快照文件记录到磁盘。
- AOF:能量节省模式,基于Redis命令记录。
- R wanderedbAOF+: 提高写性能,但文件体积较大。
Redis性能优化
- 单线程架构:所有操作都在单线程中完成,性能由内存和 CPU 限制。
- 高效操作:Redis采用C语言实现,减少上下文切换。
- 高性能命令:像LUA脚本、管道和多次查询提升效率。
Redis核心应用场景
- 高速缓存。
- 实时计数:如点击量统计、点赞数。
- 消息中间件:Redis Pub/Sub 适用于微服务架构的消息队列。
- 地图信息服务。
- 用户行为分析。
事务与锁
Redis事务
- 本质涉及多个命令进行原子性操作。
- 乐观锁:基于版本控制,减少并发问题。
- 监视(Watch): 获取数据版本,防止并发修改冲突。
分布式锁
- Redisis:基于彼此的leshooting机制。
- 基于HA modifiersLE:可靠的分布式锁实现,减少死锁风险。
Jedis与Spring Boot
Jedis简介
- Redis官方Java客户端,广泛用于Spring Boot应用中。
- 提供与Redis交互的方便接口,支持事务、高级序列化等功能。
Spring Boot整合
- 依赖项: spring-boot-starter-data-redis。
- 配置示例:
spring.redis.host=127.0.0.1spring.redis.port=6379
- ** RedisTemplate 操作**:
@Autowiredprivate RedisTemplate redisTemplate;@Testvoid contextLoads() { redisTemplate.opsForValue().set("counter", "1"); System.out.println(redisTemplate.opsForValue().get("counter"));}
Redis优化与发展
- 持久化选择:根据需求选择RDB或AOF。
- 高负载性能:通过克隆(Nearby nodes)优化读写性能。
- 集群部署:使用 Redis Sentinel 或 Redis Cluster 汇集。
- LUA脚本: 提升批量操作效率,适合复杂逻辑场景。
通过合理运用Redis的特性和优化方案,开发者可以显著提升应用性能并应对各种业务挑战。在实际项目中,根据具体需求选择合适的数据类型和工作流程,确保 Redis系统的高效稳定运行。
转载地址:http://ynygz.baihongyu.com/