Redis基础知识
Redis版本说明
Redis性能与特性
1.速度快
2.持久化
3.支持多种数据结构
4.功能丰富
5.高可用以及分布式
Redis应用场景
1.缓存
2.计数器
3.排行榜
4.定位功能(3.2开始支持)
5.简单的消息系统
6.交友
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
- Redis与其他key-value缓存产品有以下三个特点:
- 1.Redis支持数据的持续化,可以将内存中的数据保持再在磁盘中,重启的时候可以再次加载进行使用。
- 2.Redis不仅仅支持简单的key-value类型的数据,同时还提供List、Set、Zset、Hash等数据结构的存储。
- 3.Redis支持数据的备份,即master-slave模式的数据备份。
Redis版本说明
Redis版本号采用标准惯例:主版本号.福版本号.补丁级别,一个副版本号就标记为一个标准发行版本,例如:1.2,2.0,2.2,2.4,2.6,2.8,奇数的副版本用来表示非标准版本,例如2.9.x发行版本是Redis 3.0标准版本的非标准发行版本。
根据Redis的命名规则,我们首先要判定我们要使用的是不是稳定版本,避免在生产环境使用测试版本,出现不可控问题。尽量选择市面主流的大版本,新的版本虽然增加了很多的功能,但是并不一定最新的就是最适合我们的。我尽可能选择使用者众多的,可以提升相互交流的空间同时也提供更好的可维护性。
Redis性能与特性
1.速度快
这也是我们为什么要选择内存数据库的原因,也是我们很重要的一个参数指标。Redis使用C语言开发,C语言号称最贴近系统的开发语言。
Redis所有数据都会存在内存当中。举个例子:以人作为参考的话,在大脑记忆力的东西我们想找的话一定是最快的,其次才是我们所记录子啊书本上的东西。
2.持久化
存在脑子里的知识可能忘记丢失,持久化存储到纸上(硬盘)的数据才相对于最稳定。
3.支持多种数据结构
同样key-value的数据库,Redis比Memcache要好一些,很好的支持了String、List、Set、Hash、Zset数据结构。
4.功能丰富
Redis同样也支持事务、流水线、发布/订阅、消息队列功能。当然比如消息队列功能来讲,还是专业的MQ比较好,毕竟术业有专攻。什么样的东西做什么样的事情。
5.高可用以及分布式
主从复制配置简单,容易上手。可以提供基本的数据备份。技术条件支持的情况下,容易实现读写分离,备份同时提高性能。也可以使用Sentinel实现很好的主从切换,完成高可用。在3.0以后的版本中拥有了官方的集群工具Redis-Cluster实现了分布式的功能,使我们的容量的到了很好的扩展。
Redis应用场景
1.缓存
缓存肯定是大家应用场景最多的一个方向,几乎现在所有的中大型网站,都用到了缓存。
合理的使用缓存不但能提高网页的访问速度,也能够降低后端数据库的压力。
根据数据类型和实际使用的情况,设置灵活的键值过期策略,又可以保障数据的有效性,所有用在缓存的场合非常多。
2.计数器
好多不熟悉业务或者开发的运维同学可能会问,计数器究竟是什么?
我们可以通过我们实际的例子来说明。比如这一篇博文,有多少来浏览,都会有记录。
那么这个记录怎么来做,每次浏览的话,这个记录都会+1,当浏览人数太多的时候,或者文章基数较大的时候,每次都去数据库来操作读写这个数据,肯定对后端数据库会有较大的压力。
如果我们使用Redis的 incr
来实现这个功能,在内存中来计数,不但性能好,还可以减轻后端数据库的压力。所以Redis!
3.排行榜
比如音乐或者某比赛排行榜,我们可以使用音乐名作为元素,使用播放次数作为分值。
如果使用Redis的 zadd
来实现这个功能,使用zrevrange来按照分值获取前10名或者50名的歌曲,或者获取歌曲排名,都是操作比较容易的,试想一下这种范围取值,如果使用Mysql来操作,一般会全表扫描,对I/O、数据库都是压力,所以是Redis。
4.定位功能(3.2开始支持)
Redis的GEO特性,我们可以通过提前输入具体的地理位置信息,经纬度一些主要内容,在使用时,可以快读定位到APP使用者的位置,以及位置之间的距离等。
5.简单的消息系统
在日常的应用开发中,消息队列的使用还是比较常见的,Redis也有阻塞队列的功能。能够让程序在执行时被另一个程序添加到队列。
6.交友
我们合一存储好友的信息,比如爱好、兴趣等,通过使用Set集合的差查找爱好不同,或者爱好相同的点,增加交友匹配度等。
当然,Redis的实际应用还远不止这些,既然这个数据库可以在我们实际的应用中,解决如此多的痛点问题,也有如此多的应用场景,那么肯定使用的公司一定比较多,为了提高我们自身的能力,或者竞争力,能够更好的解决或者运维好这一款数据库,我当然需要深入的去学习。