简述redis特点及其应用场景
1.Redis 特性
- 速度快: 10W QPS,基于内存,C语言实现
- 单线程(目前已近支持多线程)
- 持久化(虽然基于内存,但是具有写入磁盘能力,做到断电不丢)
- 支持多种数据结构
- 支持多种编程语言
- 功能丰富: 支持Lua脚本,发布订阅,事务,pipeline(流水线)等功能
- 简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单
- 主从复制
- 支持高可用和分布式
1.1.单线程(处理客户端请求)
Redis 6.0版本前一直是单线程方式处理用户的请求
单线程为何如此快?
- 纯内存
- 非阻塞
- 避免线程切换和竞态消耗
因为存的数据都比较小,运算速率比较高,单线程反而可以避免切换CPU浪费时间,为了可以提高效率可以实行多实例,一个CPU跑一个实例。
注意事项:
- 一次只运行一条命令
- 拒绝长(慢)命令:keys, flushall, flushdb, slow lua script, mutil/exec, operate big value(collection),排队时间很长。
- 其实不是单线程: 早期版本是单进程单线程,3版本后实际还有其它的线程, 实现特定功能,如: fysncfile descriptor,close file descriptor
2.redis 典型应用场景
-
Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享
-
缓存:数据查询、电商网站商品信息、新闻内容
-
计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景
-
微博/微信社交场合:共同好友,粉丝数,关注,点赞评论等
-
消息队列 :ELK的日志缓存、部分业务的订阅发布系统
-
地理位置:基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能
版权声明:本文为aa896517050原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。