Redis入门
Redis是什么
Redis是一款开源的内存数据结构存储,(可在内存中存储结构化的数据),用作数据库,缓存和消息中间件,支持多种数据结构,如:strings,hashes,lists,sets,带有范围查询的sorted sets ,bitmaps,hyperloglogs,带有半径查询的geospatial Indexes,和stream;
Redis内置了的主从复制,事务,以及不同级别的持久化功能,并通过Sentinel和自动分区的Cluster提供了高可用性;
在redis中可以对这些类型进行原子操作(线程安全);
为了获得优秀的性能,redis把数据存储在内存中,根据实际情况你可以每隔一段时间将数据转存至磁盘或者追加每一个操作指令到log中,来实现持久化;如果只需要用于内存缓存,你可以禁用持久化;
redis还支持异步主从复制和非常快的非阻塞的首次同步,自动重连和部分数据重新同步在遇到网络分裂(异常)时;
Redis使用c编写,可以运行于绝大多数POSIX系统上,例如 Linux,OS X,BSD,而且不需要任何的外部依赖,Linux和OS X是Redis开发和测试最多的两个操作系统,建议使用LInux系统部署,Windows版本没有官方支持。
为什么需要Redis
可以看出redis和mysql有非常大的区别,主要体现在数据结构和存储方式上,mysql是关系型数据库,存储数据前必须明确定义表结构和数据类型,数据之间可以存在关联关系,而redis中并不需要提前定义数据模型,随时可以添加新的结构到数据库中,redis也不能维护数据间的关系;
NoSQL
这里不得不提到的一个名称就是NoSQL,NoSQL有两种含义
No Relations和Not Only SQL,通常我们谈及NoSQL都是泛指非关系型数据库,即数据之间没有关系;
NoSQL伴随着web2.0开始崛起,web2.0时代(要处理大规模的数据,且经常存在非结构化的数据)传统数据库表现的力不从心,而且出现一系列难以攻克的问题;
关系型与非关系型的对比:
对比项 | 关系型 | 非关系型 |
---|---|---|
事务支持 | 完整的事务支持,非常适合存储系统关键数据 | 大多没有完整的ACID事务支持,数据的一致性较差,不支持回滚 |
存储方式 | 完整数据存储在磁盘上,大多数操作都需要读写磁盘 | 数据存储在内存中,仅在持久化时读写磁盘,且读写磁盘操作通常是非常少的 |
存储结构 | 数据必须是结构化的,数据表需要预先定义好,可靠性,稳定性高,和维护性高,但当需要修改已有结构时非常的麻烦 | 存储非结构化数据,不需要定义数据结构,任何时候任何地方都可以插入任何类型的数据,非常灵活,很容易适应数据类型和结构的变化 |
高性能 | 一方面磁盘读写导致速度慢另一方面由于需要保证强一致性,通常会对需要并发操作的数据加锁 | 直接对读写内存中的数据速度是非常快的,另外由于不需要保证强一致性,操作不需要加锁,效率非常高 |
扩展性 | 整体效率依赖于IO速度,由于数据需要保证数据之间的一致性,且数据具备固定的结构,横向扩展困难,分库分表实施困难,且无法通用 | 没有了固定存储结构,没有了强一致性要求,系统可以轻松的进行横向扩展,容易实现分布式,向资源池添加新的计算资源即可实现扩展 |
查询 | 通过结构化查询语言(SQL)来完成,根据表中定义的key,来优化查询速度,可实现复杂的连表查询语句 | 各个不同的NoSQL没有统一的标准,数据通常通过key来进行精准查询,无法实现太复杂的查询逻辑 |
通过对比可以发现NoSQL和关系型数据库各自有各自的优缺点,那么在实际运用中该如何选择呢?
一定要强调的是,两者不是非此即彼的关系,而是优势互补,通常我们把项目的关键数据(必须需要保证ACID)放在关系型数据库中,而对于一些临时的,非关键性的,访问频率非常高的数据放在NoSQL中;另外Redis也经常用于消息中间件;
NoSQL的分类:连接
redis的典型应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
安装
安装过程:链接
bin目录说明:
启动
直接运行redis-server可在前台启动服务端,但该方式将导致当前shell被占用无法执行其他操作,除非终止redis的运行....
后台进程模式启动,该方式可将redis运行与后台,需要先修改配置文件
从源码目录复制配置文件
redis.conf
至bin目录下cp ~/redis-6.0.3/redis.conf /usr/local/redis/bin/
修改daemonize 为yes (vim 打开文件后 输入
//daemonize
可定位到改行)
3.指定使用redis.conf配置文件启动(先进入bin目录下)
./redis-server redis.conf #利用客户端连接测试 ./redis-cli #看见如下内容表示已经服务端已经正常运行
停止
- 如果是前端方式启动的服务只需要ctrl+c即可关闭服务器端
- 后台进程模式,需要通过redis-cli客户端来关闭
#关闭运行在localhost上的redis服务 ./redis-cli shutdown #关闭运行在指定地址上的redis服务 ./redis-cli -h 127.0.0.1 shutdown
3.强制停止,通过kill命令直接强行结束redis服务端进程,该方式存在不稳定性,生产环境勿用
#查询进程id ps aux|grep redis #根据进程id结束服务 kill 进程id
redis-cli连接服务器
语法: redis-cli -h 主机地址 -p 端口
其中主机地址和端口号均可省略 默认主机为localhost
,默认端口为:6379