今天我们学习一种新的NoSQL数据库,叫做redis 。Redis是一种基于键值对(key-value)的NoSQL数据库 。Redis与其它数据库相比,不同的是Redis的值可以存储多种数据类型 。它们具体包括:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、GEO(地理信息定位)等 。除此之外Redis还会将数据保存到内存中,所以Redis数据库地读写性能非常高 。这时可能有人会说,那Redis岂不是很不安全,因为保存在内存中的数据是不安全的,如果碰到突然断电或者系统故障的话,那保存到Redis中的数据岂不是就要丢失了 。在这一点上,我们恰恰不用担心,因为Redis为我们提供了快照和日志等方式,来允许我们将内存中的数据保存到硬盘上,这样当遇到上述故障重Redis时,Redis就会重新从硬盘加载已经保存好的数据,重新加载到内存中 。除了上述功能外,Redis还提供了很多附加的高级的功能 。如键过期、发布订阅、事物、流水线、Lua脚本等功能 。下面我们看一下Redis中的特性 。
- Redis特性
- 前面我们提到过Redis的执行速度非常快,下面我们从几个方面来介绍一下为什么Redis的速度这么快 。首先Redis中的所有数据都是存储到内存中的,我们知道直接操作内存和直接操作磁盘是有很大的区别的,因为操作磁盘为会很大的IO开销,所以,这也是Redis将数据保存到内存中,提高性能的原因之一 。其二Redis是用C语言写的,在这一点上,我们知道C语言是最接近汇编的语言,也就是最接近操作系统的语言了,所以,在执行速度上,也会比间接提高Redis的执行效率 。还有一个原因,那就是Redis是采用单线程架构,这么做的好处就是可以预防多线程可以产生的竞争问题 。
- Redis虽然是键值对的数据库,但Redis中的值不仅可以保存字符串,还可以保存多种数据类型 。也就是前面提到过的字符串、哈希、列表、集合、有序集合等 。
- 在Redis中除了提供了上述的5种数据结构外,还提供了多种额外的功能 。如键过期(可以实现缓存功能)、发布订阅(可以实现消息系统)、流水线(可以通过此功能一次性执行一批命令,减少网络开销)、Lua脚本(可以通过Lua语言创造新的Redis命令)等 。
- Redis提供了简单的TCP通信协议,支持很多种语言,可以很方便的接入到Redis中 。
- 持久化 。就向前面提到的 。在Redis中,可以通过快照和日志功能,来将内存中的数据,持久化到硬盘中 。
- 主从复制 。Redis中提供了复制的功能 。可以实现多个相同的数据的Redis副本,依次来实现Redis的分布式存储 。
- 分布式 。Redis中提供了Redis Sentinel功能,通过它可以保证Redis节点在发生故障时,自动转移 。依次来保证Redis的安全性 。除此之外,Redis还提供了Redis Cluster功能 。正是通过此功能,才保证了Redis真正的分布式实现 。
- Redis可以做些什么
- 缓存 。通过Redis中的键过期功能,我们可以为键设置一个过期时间,这样当这个键超过了过期时间时,当前保存的键的信息,也就是失效了 。这也就是用Redis实现缓存功能的使用方式 。
- 排行榜系统 。在Redis中提供了列表和有序列表,通过此功能,我们可以很方便的实现排行榜功能,
- 计数器 。我们平时在购物时,会发现购物网站上有很多类似于浏览量之类的数据 。当我们每访问一次时,数据就会执行加1操作 。如果我们采用传统的数据库方式实现,那么就会因为并发量很大,而对数据库性能产生相应影响 。而如果采用Redis的方式计算,则会容易多了,因为Redis中会在内存中计算,这样计数器的性能就会非常高了 。当然除此之外还可以用Redis实现社交网络中的赞、踩、粉丝、共同好友、等功能 。
- 消息队列 。Redis中提供了发布订阅和阻塞队列功能,虽然我们可以使用专业的消息队列,但对于一般的队列功能,Redis都可以支持 。
- Redis的注意事项
- 我们知道Redis是将数据存储到内存中的,虽然存储到内存中的会提到数据访问的性能,但如果我们将所有的数据都保存到内存中,那么就可能会造成相应的内存泄漏了,从而导致系统的瘫痪 。
- 我们知道,将数据存储到内存中的目的是为了提高数据访问的性能 。那么我们怎么在设计系统时,怎么判断哪些数据要保存到Redis中,而哪些数据而不需要保存到Redis中呢?通常来说数据分为热数据(频繁操作的数据)和冷数据(非频繁操作的数据) 。我们知道,提高数据访问性能的主要原因是因为大量并发的操作,正是因为这样,所以,如果我们不将大部分用户都访问的公用数据放到内存中,那么势必会造成程序的不稳定 。所以我们应该将公用的数据,应该存储到Redis中 。那么反之,不是公用的数据,也就不会产生大量的并发,所以,这一部分数据,我们是不需要存储到Redis中的 。
推荐阅读
- 网站跳出率高?从21个地方入手优化
- Redis主从服务搭建
- Redis哨兵服务构建
- 今日回收999黄金价格 99999黄金回收价格2021今天
- 蓝牙音频编码哪个音质好?今天我们来逐一解读
- Redis中的发布订阅模式用代码实现就是这么简单
- 五个非常有用的驾驶技巧!
- 详解Redis慢查询功能--快速定位性能瓶颈
- 方舟生存进化手游单机代码 方舟生存进化代码
- 美味寿司~