关注微信公众号【
Java之言
】,更多干货文章
和学习资料
,助你放弃编程之路!
Redis(
Remote Dictionary Server
),即远程字典服务
,是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化
的日志型、Key-Value
的Nosql数据库,并提供多种语言的API。
redis是一个高性能
的key-value存储系统,它支持存储的value类型包括string
(字符串)、list
(链表)、set
(集合)、zset
(sorted set --有序集合)和hash
(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 – 来源百度百科
Redis 官网:https://redis.io/
Redis 是基于内存的数据库,不言而喻,那存取速度肯定是比基于硬盘的IO操作比较耗时的数据库(例如Mysql,Mongo等)快很多。所以一般用于缓存数据(比如热点数据,执行耗时较久但结果不经常变动的SQL的运行结果数据等),达到快速响应。
在高并发场景,如果所有的请求直接访问Mysql数据库,数据库可能会出现连接异常。如果使用redis做缓冲操作,先让请求访问到redis,没有命中再访问Mysql数据库,能减少Mysql数据库的压力。
当然,除了缓存作用,它还有其他作用,例如分布式锁;利用Redis原子性的自增操作实现计数器,用户点赞数,pv/uv,限速器等;利用zset实现排行榜;利用集合的交集,并集,差集实现共同好友,共同爱好等;还有一些高级操作Bitmaps,GEO实现地理位置定位等。
网上说 Redis 底层是一个单线程模型,其实是不严谨的。Redis 单线程指的是网络请求模块使用单线程,即一个线程处理所有网络请求,但是其他模块还是使用了多个线程。既然是单线程模型,那么CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存和网络带宽。
Redis基于Reactor模式开发了自己的网络事件处理器,称之为文件事件处理器(File Event Hanlder)。文件事件处理器由Socket、IO多路复用程序、文件事件分派器(dispather),事件处理器(handler)四部分组成。
IO多路复用程序同时监听多个socket,当被监听的socket准备好执行accept、read、write、close等操作时,与这些操作相对应的文件事件就会产生。IO多路复用程序会把所有产生事件的socket压入一个队列中,然后有序地每次仅一个socket的方式传送给文件事件分派器,文件事件分派器接收到socket之后会根据socket产生的事件类型调用对应的事件处理器进行处理。
Redis官方只有Linux版本,没有Windows版本。网上的Windows版本是apache的大牛对Linux版本进行改造和维护的。
Redis底层是采用NIO的多路IO复用机制,能实现高并发,并且线程安全。但是NIO在不同操作系统上实现不同,在Windows操作系统,使用select实现轮询,事件复杂度为O(n),会出现空轮询的情况,效率低下,并且默认对轮询的数据有一定的限制,很难支持上万的TCP连接。但是在Linux操作系统,是采用epoll实现事件驱动回调,不会出现空轮询,只对活跃的socket连接实现主动回调,事件复杂度为O(1),能够支持上万的高并发请求。
所以,我们推荐在Linux操作系统下安装Redis,当然如果只是学习使用,也可以在Windows上安装。
下载Redis安装包,并上传到Linux服务器,通过命令 tar -zxvf redis-5.0.10.tar.gz
解压。
在 /usr/local
目录下创建文件夹 mkdir redis
,用于存放编译后的可执行文件以及配置文件等。
进入解压后的目录下(例如我这里是 /opt/redis-5.0.10
),然后运行 make install PREFIX=/usr/local/redis
命令进行编译安装。
编译安装完成后,就会在 /usr/local/redis
目录下生成一个 bin
目录,此目录下有以下可执行文件。
进入 bin 目录,执行 ./redis-server
即可前台启动redis。(后续我们讲解如何修改配置文件后台启动)
再启动一个Linux连接客户端,进入bin目录,执行 ./redis-cli
,即可连接上redis,进行操作。
设置Redis后台启动,设置密码,设置允许外界访问。
首先将解压后的的 redis.conf
文件复制一份到安装目录下的 bin目录下。
cp /opt/redis-5.0.10/redis.conf /usr/local/redis/bin/
使用命令 vi redis.conf
打开复制后的文件,修改以下配置变量的值。
# yes代表后台启动
daemonisze yes
# 去除#号,修改密码,例如123456
requirepass 123456
# 注释掉bind 127.0.0.1,并且将protected-mode的值改为no,即可允许外界访问redis服务。
#bind 127.0.0.1
protected-mode no
当然,如果还允许外界访问Redis服务,还需要将Redis服务端口开放添加到防火墙中。
# 查询6379端口是否开放
[root@192 bin]# firewall-cmd --query-port=6379/tcp
no
# 开放6379端口 (可以是一个端口范围,如1500-2000/tcp)
[root@192 bin]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
success
# 重启防火墙
[root@192 bin]# firewall-cmd --reload
success
# 再次查询6379端口是否开放,已开放
[root@192 bin]# firewall-cmd --query-port=6379/tcp
yes
使用命令 ./redis-server ./redis.conf
后台方式启动Redis服务。
再通过 ./redis-cli 命令连接redis后,如果没有进行密码验证,将无法进行操作,使用 AUTH 密码
进行密码验证之后才能操作。
百度云下载:链接:https://pan.baidu.com/s/1IUz-RPXw9NmSysMDqJNPcQ 提取码:sshi
下载后解压到你想安装的目录下
在安装目录下启动
cmd
命令行窗口,然后输入redis-server.exe redis.windows.conf
命令,回车。如果出现一个方形图标,即服务启动成功。
不过此种启动方式,是前台启动方式,只创建 Redis 临时服务,不会在window Service
列表出现 Redis 服务名称和状态,此窗口关闭,Redis 服务会自动关闭。
通过客户端连接测试,在安装目录下再启动一个
cmd
命令行窗口,然后输入redis-cli.exe
命令,回车。如下则连接成功。
修改端口和密码
在Redis的安装目录下找到
redis.windows-service.conf
文件,用文本编辑器
打开。找到port
所在行,把默认的端口更改,例如改为6380。找到 requirepass 所在行,回车另起一行,例如输入requirepass 123456
,这样Redis密码就为123456,设置好保存后文件,重启redis服务。
客户端连接测试。输入
redis-cli.exe -p 6380
连接,此时我们随便输入命令例如列出所有键命令keys *
,会报错,因为我们还未输入密码验证。再输入auth 123456
,123456是我们刚设置的Redis密码。就可以执行命令了。
前台方式启动redis服务,则需要保持打开命令行窗口启动着。窗口一关则服务停止。以下演示将 Redis 设置为 Windows下的服务,并在后台启动。
首先将 Redis 注册为服务,在 Redis 安装目录下启动一个cmd命令行窗口,然后输入redis-server.exe --service-install redis.windows.conf --loglevel verbose
命令,回车。注意!!!一定要把临时服务关闭,否则安装不上。
再输入
redis-server.exe --service-start
命令,启动服务。
- 启动服务:redis-server.exe --service-start
- 暂停服务:redis-server.exe --service-stop
- 卸载服务:redis-server.exe --service-uninstall
关注微信公众号【
Java之言
】,更多干货文章
和学习资料
,助你放弃编程之路!