注:此文原载于本人网易博客,并加上工作日常总结完善,统一汇总于CSDN博客发布
【redis 开门见山】
redis是一个基于BSD协议开源的Key-Value型NoSQL数据库。它用C语言编写的、支持网络交互的、可基于内存也可持久化。它通常用来存储结构化的数据,因为redis的key可以包含String、hash、listset和sorted list。
【redis 接口支持】
redisclient支持多种语言,包括:c、C++、C#、php、java、python、go等语言,根据自己的开发语言,选择合适的redis client版本类型即可(后面章节将详细介绍)。
【redis 应用场景】
参考:https://www.cnblogs.com/NiceCui/p/7794659.html
1、热点数据:经常会被查询,但是不经常被修改或者删除的数据。(缓存机制)
2、计数器:诸如统计点击数等应用,使用单线程,可以避免并发问题,保证不会出错,可达到毫秒级性能。
3、队列:相当于消息系统,队列不仅可以把并发请求变成串行,并且还可以做队列或者栈使用。
注:如果对于数据一致性要求高的话还是用ActiveMQ/RocketMQ等专业系统
4、位操作:大数据处理,用到的命令是:setbit、getbit、bitcount
原理是:redis内构建一个足够长的数组,每个数组元素只能是0和1两个值,然后这个数组的下标index用来表示我们上面例子里面的用户id(必须是数字哈),那么很显然,这个几亿长的大数组就能通过下标和元素值(0和1)来构建一个记忆系统,上面我说的几个场景也就能够实现。
5、分布式锁与单线程机制
验证前端的重复请求(可以自由扩展类似情况),可以通过redis进行过滤:每次请求将request Ip、参数、接口等hash作为key存储redis(幂等性请求),设置多长时间有效期,然后下次请求过来的时候先在redis中检索有没有这个key,进而验证是不是一定时间内过来的重复提交
秒杀系统,基于redis是单线程特征,防止出现数据库“爆破”
全局增量ID生成,类似“秒杀”
6、最新列表
例如新闻列表页面最新的新闻列表,如果总数量很大的情况下,尽量不要使用select a from A limit 10这种low货,尝试redis的 LPUSH命令构建List,一个个顺序都塞进去就可以啦。不过万一内存清掉了咋办?也简单,查询不到存储key的话,用mysql查询并且初始化一个List到redis中就好了。
7、排行榜
谁得分高谁排名往上。命令:ZADD(有续集,sorted set)