1、Redis介绍
2、Redis安装并设置开机自动启动
3、Redis文件结构
4、Redis启动方式
5、Redis持久化
6、Redis配置文件详解
7、Redis图形化工具
8、Java之Jedis链接Redis单机
9、项目源码与资料下载
10、参考文章php
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。建议在linux上运行,它经过提供多种键值数据类型来适应不一样场景下的存储需求,数据存储在内存中,也可持久化到磁盘中,目前为止Redis支持的键值数据类型以下:
(1)字符串类型
(2)散列类型
(3)列表类型
(4)集合类型
(5)有序集合类型html
(1)Redis是把数据存在内存中,因此速度才会快。Redis是用C语言写的开源项目。
(2)Redis全部数据保存在内存中,对数据的更新将异步地保存到磁盘上,这样能够作到断电不丢失数据。
(3)Redis主从复制能够实现高可用和分布式java
3.1 字符串node
3.2 Hashlinux
3.3 listgit
3.4 setgithub
3.5 zsetredis
(1)缓存(数据查询、短链接、新闻内容、商品内容等等)(最多使用)算法
(2)分布式集群架构中的session分离
(3)聊天室的在线好友列表
(4)任务队列。(秒杀、抢购、12306等等)spring
(5)应用排行榜
(6)网站访问统计
(7)数据过时处理(能够精确到毫秒)
舒适提示:在使用场景中,不用考虑数据混乱因素,由于redis的增删查改是单线程执行的。
Redis的使用在Linux中效果会更佳,该文章主要体现教程,所以我以windows做为例子进行安装。
要安装Redis,首先要获取安装包。Windows的Redis安装包须要到如下GitHub连接找到。连接:https://github.com/MSOpenTech/redis。打开网站后,找到Release,点击前往下载页面。
在下载网页中,找到最后发行的版本(此处是3.2.100)。找到Redis-x64-3.2.100.msi和Redis-x64-3.2.100.zip,点击下载。这里说明一下,第一个是msi微软格式的安装包,第二个是压缩包
双击刚下载好的msi格式的安装包(Redis-x64-3.2.100.msi)开始安装。
选择“赞成协议”,点击下一步继续。
选择“添加Redis目录到环境变量PATH中”,这样方便系统自动识别Redis执行文件在哪里。
端口号可保持默认的6379,并选择防火墙例外,从而保证外部能够正常访问Redis服务。
设定最大值为100M。做为实验和学习,100M足够了。
安装完毕后,须要先作一些设定工做,以便服务启动后能正常运行。使用文本编辑器,这里使用Notepad++,打开Redis服务配置文件。注意:不要找错了,一般为redis.windows-service.conf,而不是redis.windows.conf。后者是以非系统服务方式启动程序使用的配置文件。
找到含有requirepass字样的地方,追加一行,输入requirepass 147258qq。这是访问Redis时所需的密码,通常测试状况下能够不用设定密码。不过,即便是做为本地访问,也建议设定一个密码。此处以简单的147258qq来演示。
点击“开始”>右击“计算机”>选择“管理”。在左侧栏中依次找到并点击“计算机管理(本地)”>服务和应用程序>服务。再在右侧找到Redis名称的服务,查看启动状况。如未启动,则手动启动之。正常状况下,服务应该正常启动并运行了。
最后来测试一下Redis是否正常提供服务。进入Redis的目录,cd C:\Program Files\Redis。输入redis-cli并回车。(redis-cli是客户端程序)如图正常提示进入,并显示正确端口号,则表示服务已经启动。
使用服务前须要先经过密码验证。输入“auth 147258qq”并回车(12345是以前设定的密码)。返回提示OK表示验证经过。
实际测试一下读写。输入set mykey1 "I love you all!”并回车,用来保存一个键值。再输入get mykey1,获取刚才保存的键值。
设置服务命令:redis-server --service-install redis.windows-service.conf --loglevel verbose
输入命令以后没有报错,表示成功了,刷新服务,会看到多了一个redis服务。
右键Redis并选择属性
设置启动类型为自动
经常使用的redis服务命令。
卸载服务:redis-server --service-uninstall
开启服务:redis-server --service-start
中止服务:redis-server --service-stop
舒适提示
(1)Windows使用的这个Redis是64位版本的,32位操做系统的同窗就不要折腾了。
(2)做为服务运行的Redis配置文件,一般为redis.windows-service.conf,而不是redis.windows.conf。当心不要选错了。若是修改了redis.windows.conf(非redis.windows-service.conf)文件上的配置,从服务自启动,配置的信息是不生效的,如密码配置和ip绑定。
Redis有三种启动方式,具体以下:
(1)使用redis-server命令,会以默认的redis配置进行启动
(2)使用redis-server –port6379就可使用动态参数配置进行启动
(3)使用redis-server configPath就可使用配置文件方式进行启动
(4)当直接运行redis-service.exe时候,是没有使用配置文件的,并且会提示如下内容:
3.1 什么是RDB
3.2 RDB文件生成方式
save方式
bgsave方式
Save与bgsave比较
自动生成RDB
3.3 RDB总结
4.1 RDB问题
由于RDB须要将所有数据生成RDB文件,因此这个过程比较耗时,若是用fork(bgsave)过程,则太消耗内容。若是RDB文件很是大,还会影响IO性能。
在T3-T4之间就会出现数据丢失。
4.2 AOF文件建立和恢复
建立时:
恢复时:
4.3 AOF三种策略
Always策略
Everysec策略
每秒写入一次数据,若是机器忽然有问题,可能丢失一秒数据
No策略
根据操做系统策略自行选择
三种策略比较
4.4 AOF重写
把过时的,重复的,可优化命令进行化解。
重写做用
重写方式
Bgrewriteaof命令
AOF重写配置
AOF重写流程
Redis默认的持久化方式是RDB,具体可看下图:
Redis经常使用的配置文件在redis.windows-service.conf,具体配置包括设置登陆密码、设置持久化方式、持久化路径、最大的内存空间、数据库数量、日志的等级、日志的路径、设置容许客户端链接的IP等,主从复制、高可用、集群、缓存等相关的功能将在下一篇进行讲解。
# redis 配置文件示例 # 当你须要为某个配置项指定内存大小的时候,必需要带上单位, # 一般的格式就是 1k 5gb 4m 等酱紫: # # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes # # 单位是不区分大小写的,你写 1K 5GB 4M 也行 ################################## INCLUDES ################################### # 假如说你有一个可用于全部的 redis server 的标准配置模板, # 但针对某些 server 又须要一些个性化的设置, # 你可使用 include 来包含一些其余的配置文件,这对你来讲是很是有用的。 # # 可是要注意哦,include 是不能被 config rewrite 命令改写的 # 因为 redis 老是以最后的加工线做为一个配置指令值,因此你最好是把 include 放在这个文件的最前面, # 以免在运行时覆盖配置的改变,相反,你就把它放在后面(外国人真啰嗦)。 # # include /path/to/local.conf # include /path/to/other.conf ################################ 经常使用 ##################################### # 默认状况下 redis 不是做为守护进程运行的,若是你想让它在后台运行,你就把它改为 yes。 # 当redis做为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。 daemonize no # 当redis做为守护进程运行的时候,它会把 pid 默认写到 /var/run/redis.pid 文件里面, # 可是你能够在这里本身制定它的文件位置。 pidfile /var/run/redis.pid # 监听端口号,默认为 6379,若是你设为 0 ,redis 将不在 socket 上监放任何客户端链接。 port 6379 # TCP 监听的最大容纳数量 # # 在高并发的环境下,你须要把这个值调高以免客户端链接缓慢的问题。 # Linux 内核会一言不发的把这个值缩小成 /proc/sys/net/core/somaxconn 对应的值, # 因此你要修改这两个值才能达到你的预期。 tcp-backlog 511 # 默认状况下,redis 在 server 上全部有效的网络接口上监听客户端链接。 # 你若是只想让它在一个网络接口上监听,那你就绑定一个IP或者多个IP。 # # 示例,多个IP用空格隔开: # # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 # 指定 unix socket 的路径。 # # unixsocket /tmp/redis.sock # unixsocketperm 755 # 指定在一个 client 空闲多少秒以后关闭链接(0 就是无论它) timeout 0 # tcp 心跳包。 # # 若是设置为非零,则在与客户端缺少通信的时候使用 SO_KEEPALIVE 发送 tcp acks 给客户端。 # 这个之全部有用,主要由两个缘由: # # 1) 防止死的 peers # 2) Take the connection alive from the point of view of network # equipment in the middle. # # On Linux, the specified value (in seconds) is the period used to send ACKs. # Note that to close the connection the double of the time is needed. # On other kernels the period depends on the kernel configuration. # # A reasonable value for this option is 60 seconds. # 推荐一个合理的值就是60秒 tcp-keepalive 0 # 定义日志级别。 # 能够是下面的这些值: # debug (适用于开发或测试阶段) # verbose (many rarely useful info, but not a mess like the debug level) # notice (适用于生产环境) # warning (仅仅一些重要的消息被记录) loglevel notice # 指定日志文件的位置 logfile "" # 要想把日志记录到系统日志,就把它改为 yes, # 也能够可选择性的更新其余的syslog 参数以达到你的要求 # syslog-enabled no # 设置 syslog 的 identity。 # syslog-ident redis # 设置 syslog 的 facility,必须是 USER 或者是 LOCAL0-LOCAL7 之间的值。 # syslog-facility local0 # 设置数据库的数目。 # 默认数据库是 DB 0,你能够在每一个链接上使用 select <dbid> 命令选择一个不一样的数据库, # 可是 dbid 必须是一个介于 0 到 databasees - 1 之间的值 databases 16 ################################ 快照 ################################ # # 存 DB 到磁盘: # # 格式:save <间隔时间(秒)> <写入次数> # # 根据给定的时间间隔和写入次数将数据保存到磁盘 # # 下面的例子的意思是: # 900 秒内若是至少有 1 个 key 的值变化,则保存 # 300 秒内若是至少有 10 个 key 的值变化,则保存 # 60 秒内若是至少有 10000 个 key 的值变化,则保存 # # 注意:你能够注释掉全部的 save 行来停用保存功能。 # 也能够直接一个空字符串来实现停用: # save "" save 900 1 save 300 10 save 60 10000 # 默认状况下,若是 redis 最后一次的后台保存失败,redis 将中止接受写操做, # 这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘, # 不然就会没人注意到灾难的发生。 # # 若是后台保存进程从新启动工做了,redis 也将自动的容许写操做。 # # 然而你要是安装了靠谱的监控,你可能不但愿 redis 这样作,那你就改为 no 好了。 stop-writes-on-bgsave-error yes # 是否在 dump .rdb 数据库的时候使用 LZF 压缩字符串 # 默认都设为 yes # 若是你但愿保存子进程节省点 cpu ,你就设置它为 no , # 不过这个数据集可能就会比较大 rdbcompression yes # 是否校验rdb文件 rdbchecksum yes # 设置 dump 的文件位置 dbfilename dump.rdb # 工做目录 # 例如上面的 dbfilename 只指定了文件名, # 可是它会写入到这个目录下。这个配置项必定是个目录,而不能是文件名。 dir ./ ################################# 主从复制 ################################# # 主从复制。使用 slaveof 来让一个 redis 实例成为另外一个reids 实例的副本。 # 注意这个只须要在 slave 上配置。 # # slaveof <masterip> <masterport> # 若是 master 须要密码认证,就在这里设置 # masterauth <master-password> # 当一个 slave 与 master 失去联系,或者复制正在进行的时候, # slave 可能会有两种表现: # # 1) 若是为 yes ,slave 仍然会应答客户端请求,但返回的数据多是过期, # 或者数据多是空的在第一次同步的时候 # # 2) 若是为 no ,在你执行除了 info he salveof 以外的其余命令时, # slave 都将返回一个 "SYNC with master in progress" 的错误, # slave-serve-stale-data yes # 你能够配置一个 slave 实体是否接受写入操做。 # 经过写入操做来存储一些短暂的数据对于一个 slave 实例来讲多是有用的, # 由于相对从 master 从新同步数而言,据数据写入到 slave 会更容易被删除。 # 可是若是客户端由于一个错误的配置写入,也可能会致使一些问题。 # # 从 redis 2.6 版起,默认 slaves 都是只读的。 # # Note: read only slaves are not designed to be exposed to untrusted clients # on the internet. It's just a protection layer against misuse of the instance. # Still a read only slave exports by default all the administrative commands # such as CONFIG, DEBUG, and so forth. To a limited extent you can improve # security of read only slaves using 'rename-command' to shadow all the # administrative / dangerous commands. # 注意:只读的 slaves 没有被设计成在 internet 上暴露给不受信任的客户端。 # 它仅仅是一个针对误用实例的一个保护层。 slave-read-only yes # Slaves 在一个预约义的时间间隔内发送 ping 命令到 server 。 # 你能够改变这个时间间隔。默认为 10 秒。 # # repl-ping-slave-period 10 # The following option sets the replication timeout for: # 设置主从复制过时时间 # # 1) Bulk transfer I/O during SYNC, from the point of view of slave. # 2) Master timeout from the point of view of slaves (data, pings). # 3) Slave timeout from the point of view of masters (REPLCONF ACK pings). # # It is important to make sure that this value is greater than the value # specified for repl-ping-slave-period otherwise a timeout will be detected # every time there is low traffic between the master and the slave. # 这个值必定要比 repl-ping-slave-period 大 # # repl-timeout 60 # Disable TCP_NODELAY on the slave socket after SYNC? # # If you select "yes" Redis will use a smaller number of TCP packets and # less bandwidth to send data to slaves. But this can add a delay for # the data to appear on the slave side, up to 40 milliseconds with # Linux kernels using a default configuration. # # If you select "no" the delay for data to appear on the slave side will # be reduced but more bandwidth will be used for replication. # # By default we optimize for low latency, but in very high traffic conditions # or when the master and slaves are many hops away, turning this to "yes" may # be a good idea. repl-disable-tcp-nodelay no # 设置主从复制容量大小。这个 backlog 是一个用来在 slaves 被断开链接时 # 存放 slave 数据的 buffer,因此当一个 slave 想要从新链接,一般不但愿所有从新同步, # 只是部分同步就够了,仅仅传递 slave 在断开链接时丢失的这部分数据。 # # The biggest the replication backlog, the longer the time the slave can be # disconnected and later be able to perform a partial resynchronization. # 这个值越大,salve 能够断开链接的时间就越长。 # # The backlog is only allocated once there is at least a slave connected. # # repl-backlog-size 1mb # After a master has no longer connected slaves for some time, the backlog # will be freed. The following option configures the amount of seconds that # need to elapse, starting from the time the last slave disconnected, for # the backlog buffer to be freed. # 在某些时候,master 再也不链接 slaves,backlog 将被释放。 # # A value of 0 means to never release the backlog. # 若是设置为 0 ,意味着毫不释放 backlog 。 # # repl-backlog-ttl 3600 # 当 master 不能正常工做的时候,Redis Sentinel 会从 slaves 中选出一个新的 master, # 这个值越小,就越会被优先选中,可是若是是 0 , 那是意味着这个 slave 不可能被选中。 # # 默认优先级为 100。 slave-priority 100 # It is possible for a master to stop accepting writes if there are less than # N slaves connected, having a lag less or equal than M seconds. # # The N slaves need to be in "online" state. # # The lag in seconds, that must be <= the specified value, is calculated from # the last ping received from the slave, that is usually sent every second. # # This option does not GUARANTEES that N replicas will accept the write, but # will limit the window of exposure for lost writes in case not enough slaves # are available, to the specified number of seconds. # # For example to require at least 3 slaves with a lag <= 10 seconds use: # # min-slaves-to-write 3 # min-slaves-max-lag 10 # # Setting one or the other to 0 disables the feature. # # By default min-slaves-to-write is set to 0 (feature disabled) and # min-slaves-max-lag is set to 10. ################################## 安全 ################################### # Require clients to issue AUTH <PASSWORD> before processing any other # commands. This might be useful in environments in which you do not trust # others with access to the host running redis-server. # # This should stay commented out for backward compatibility and because most # people do not need auth (e.g. they run their own servers). # # Warning: since Redis is pretty fast an outside user can try up to # 150k passwords per second against a good box. This means that you should # use a very strong password otherwise it will be very easy to break. # # 设置认证密码 # requirepass foobared # Command renaming.