一.redis的概念
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。在redis官网中对redis的描述是这样的(Redis is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine. Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions, and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.)我们可以提取其中的关键点:redis是基于opensource,遵守BSD协议,使用c语言编写的key-value形式存储数据,存储在内存中的数据库,并且redis支持持久化的数据储存
二.redis的作用和优势
我们知道当前市场中主流的数据库是MySQL,我们思考以下几个问题:redis 和MySQL有怎样的关系?MySQL在当前市场的局限在哪?redis相对于MySQL具有怎样的优势?
我们对比一下MySQL和redis:
在高并发的市场环境下,MySQL对数据的处理逐步进入瓶颈期,它无法在及时处理巨量的数据,在某些应用场景无法满足用户的需求,redis相对于MySQL,首先从硬件方面进行对比:MySQ的数据存储在硬盘中,而redis中的数据存储在内存中,因此,redis对于数据的读取具有更快的速度,从存储结构上来看,redis使用key-value的形式存储数据,查询数据具有更高的效率;从数据库类型来看,与MySQL的关系型数据库(RDBMS)不同,redis是NOSQL类型的数据库。
通过两者的对比,我们对redis的作用和优势进行概括性描述:
redis作用
1.redis提供分布式缓存技术,是挡在mysql之前的带刀护卫(减少MySQL处理数据的压力)(当请求发送给数据库时,在请求到达MySQL之前会先到达redis,在redis中查询数据是否存在,如果在redis中存在就直接返回,不通过MySQL,redis中不存在则去MySQL中查询,在MySQL中查询成功后返回数据,同时将数据也加载到redis中,下一次的请求直接在redis中获取数据)
2.redis支持内存存储和持久化(RDB+AOF),redis支持异步将内部中的数据写到硬盘上,同时不影响继续服务(当redis发生断电等异常情况,从硬盘中加载数据,不再通过MySQL)。
3.提供高可用的架构搭配,如单机,主从,哨兵,集群等等
4.为缓存穿透、击穿和雪崩提供解决方案
5.提供分布式锁
6.队列
Reids提供list和set操作,这使得Redis能作为一个很好的消息队列平台来使用。
我们常通过Reids的队列功能做购买限制。比如到节假日或者推广期间,进行一些活动,对用户购买行为进行限制,限制今天只能购买几次商品或者一段时间内只能购买一次。也比较适合适用。
7.排行榜+点赞
在互联网应用中,有各种各样的排行榜,如电商网站的月度销量排行榜、社交APP的礼物排行榜、小程序的投票排行榜等等。Redis提供的zset数据类型能够快速实现这些复杂的排行榜。比如小说网站对小说进行排名,根据排名,将排名靠前的小说推荐给用户
redis的优势:
- 性能极高 -Redis能读的速度是110000次/秒,写的速度是81000次/秒
- Redis数据类型丰富,不仅仅支持简单的key-value类型的数据,同时还提供list,zset,set,hash等数据结构的存储
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
- Redis支持数据的备份,即master-slave模式的数据备份
- 生成dump.rpb文件(可以在配置文件中改) 默认生成在redis.conf同级目录
三.redis7新特性
四.redis的使用
我们在此处所说的redis的使用是Linux环境下的使用
4.1redis的安装
1.redis的安装需要在64位的centos运行环境,因此使用以下指令,测试我们centos的环境
getconf LONG_BIT 结果返回32就代表32位,返回64就代表64位
2.redis需要在安装依赖于gcc的编译环境,我们使用以下指令进行测试:
gcc -v 查看gcc版本
yum -y install gcc-c++ 安装c++库环境
.3.将此前下载的redis-7.0.11.tar.gz(当然你下载的可能是其他版本)直接拖入到Linux中的/opt文件夹中(一般放入/opt文件夹,该文件夹是自定义文件夹)是,之后解压文件夹
tar -zxvf redis-7.0.11.tar.gz /opt目录下解压
在解压文件夹之后会生成这样一个redis-7.0.11这样一个文件目录:
在解压之后进入文件目录内:
cd redis-7.0.11
安装redis
make && make install
进入默认的安装目录内并且查看与redis相关的文件
cd /usr/local/bin #进入安装的默认文件夹
ll #查看当前目录下的文件及目录
能观察到以下与redis相关的文件结果:
4.重新切回到redis -7.0.11这个文件目录下,创建myredis 的文件目录,并将redis-7.0.11的文件目录下的redis.conf这个文件复制到myredis的文件目录下(因为我们要对配置文件进行修改,所以最好要对原来的配置文件进行保存)
mkdir /myredis #在redis-7.0.11目录下创建myredis的文件目录
cp redis.conf /myredis/redis7.conf #将默认的配置文件复制过去
5.对复制的配置文件进行修改:
在底行模式下使用/+关键字的方式进行对配置文件的特定内容进行搜索,锁定到特定内容之后将该内容进行修改:
示例:
vim /myredis/redis7.conf
// linux在vim中搜索词 esc + /搜索词 + enter
6.修改redis.conf配置文件,改完后确保生效,一定要记得重启redis服务器
1.默认daemonize no 改为 daemonize yes
2.默认protected-mode yes 改为 protected-mode no
3.默认bind 127.0.0.1 改为 直接注释掉(默认bind 127.0.0.1只能本机访问)或改成本机IP地址,否则影响远程IP连接
4.添加redis密码 改为 requirepass 你自己设置的密码
7.启动redis服务器和客户端
redis-server /root/opt/redis-7.0.11/myredis/redis7.conf #启动服务
为什么要从根目录开始使用呢?因为如果我们从当前目录开始使用可能会报找不到文件或者目录的错误(亲测)
ps -ef | grep redis | grep -v grep #测试是否启动成功
测试结果:
8.连接服务
redis-cli -a 设置的密码 -p 6379
ping 测试 得到 pong执行第一行的 redis 有一个warning警告 下面指令可以不展示警告
redis-cli -a 设置的密码 -p 6379 2>/dev/null
4.2redis的使用(永远的helloworld)
输入以下的代码:
set k1 helloWorld
OK
get k1
"helloWorld"
4.3redis的关闭
关闭服务
Linux redis 里: shutdown 直接关闭
单实例远程关闭 : redis-cli -a 密码 shutdown
多实例远程关闭,指定端口号关闭: redis-cli -p 6379 shutdown
4.4redis的卸载
卸载redis
ls -l /usr/local/bin/redis-* 查看所以redis文件
rm -rf /usr/local/bin/redis-* 删除全部文件