开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情
Redis
Redis是基于C语言写的,而且是内存中的数据库,读写速度很快。在项目中 也经常会使用到Redis,一般会用来做缓存、或者分布式锁,也可以用来设计消息队列 ,同时还支持事务、持久化、Lua脚本、多种集群方案。
Redis是一个高性能的基于Key-Value结构存储的NoSQL开源数据库。大部分公司采用Redis来
实现分布式缓存,用来提高数据查询效率。
至于我们为什么要选择Redis,我总结为以下六个原因:
1)、基于内存存储,可以降低对关系型数据库的访问频次,从而缓解数据库压力
2)、数据IO操作能支持更高级别的QPS,官方发布的指标是10W;
3)、提供了比较多的数据存储结构,比如string、list、hash、set、zset等等。
4)、采用单线程实现IO操作,避免了并发情况下的线程安全问题。
5)、可以支持数据持久化,避免因服务器故障导致数据丢失的问题
6)、Redis还提供了更多高级功能,比如分布式锁、分布式队列、排行榜、查找附近的人等功能,为更复杂的需求提供了成熟的解决方案。
Redis的数据结构
| 数据类型 | 内部实现 | 应用场景 | |
|---|---|---|---|
| String(字符串) | int和SDS(简单动态字符串) | 缓存对象、常规计数、 分布式锁 | |
| List(列表) | 双向链表或压缩列表(节点个数<512) | 消息队列 | |
| Hash(哈希表) | 哈希表或压缩链表(节点个数<512 ) | 缓存对象、购物车 | |
| Set(无序集合) | 整数集合(intset)或哈希表(元素都是整数&&个数< 512 ==整数集合) | 点赞、共同关注(交集运算)、抽奖活动(set拥有去重功能,保证同一个用户不会中奖两次) | |
| Zset(有序集合) | 压缩列表或跳表 | 排行榜 |