如何登录/运行
Xshell连接到服务器后
redis-server /etc/redis.conf 运行。配置文件的路径是安装时默认的。
redis-cli 进行登录连接,用于操作redis-server,需要redis-server先运行才行
Redis网络配置(服务端)
(我的redis,确实是安装在笔记本里面的)
登录:用户root
linux的ip地址查看:桌面-右键-打开终端-输入:ip addr 或者 ifconfig(interface configuration)
虚拟机的配置
VMWare的地址:192.168.200.130
无法链接到外网,ping www.baidu.com 不通
虚拟机的连接配置:虚拟机名称-右键-设置-网络配置器-网络连接-自定义:VMnet8(NAT模式)
Windows查看命令: ipconfig
台式机(客户端)的VMnet8地址查看,cmd-ipconfig-Ipv4:192.168.80.1
修改虚拟机的ip地址:vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static" (之前是#dhcp)
原有虚拟机的ip地址IPADD=192.135.112.128 改为了 192.168.80.135
注意2点:
1、第三段ip都是80,在同一个区域里面
2、第四段ip大于128,因为VMWare-编辑-虚拟网络编辑器-DHCP设置...-起始IP地址:192.168.80.128,结束IP地址192.168.80.254。看出这个区间段。
网关GATEWAY=192.168.112.2 改为了192.168.80.2
注意2点:
1、网关地址怎么来的:VMWare-编辑-虚拟网络编辑器-名称:选到Vmnet8-NAT设置-网关IP里面
2、发现跟台式机是在同一个网段192.168.80,第四段台式机192.168.80.1,
服务端192.168.80.2。
重启网络服务 或者 重启系统生效:
service network restart / reboot
神奇的事情发生啦,虚拟机可以连接外网啦,ping www.baidu.com有反应了,网页也能登录啦。
番外篇:笔记本当服务器的设置
笔记本的ip: 192.168.3.10
可以ping通外网,比如百度
修改(Linux)ip,编辑 vi /etc/sysconfig/network-scripts/ifcfg-ens33(STEIN)
然而我的笔记本没有ens33这个网卡,只有wlpls0这个网卡,估计后面这个表示的是无线网卡
#之前有的,要修改的
#指定IP地址
IPADDR=192.168.3.10
#网关?具体在哪看?
GATEWAY=192.168.3.2
#域名解析器
DNS1=8.8.8.8
设置主机名(Linux)
1.为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名
2.指令hostname:查看主机名
3.修改文件在 /etc/hostname 指定
4.修改后,重启生效
Windows下设置主机名
在C:\Windows\System32\drivers\etc\hosts文件指定即可
案例:192.168.3.6 stein
linux
在/etc/hosts文件指定
案例:192.168.3.10 notebook
安装包位置:
放到了 /opt目录下 ,然后执行解压tar -zxvf,再执行的make,以及make install
Redis后台启动&使用
1.拷贝一份redis.conf到其他目录,比如/etc目录,注意执行保证能够定位到redis.conf
(拷贝) cp (从) redis.conf (到) /etc/redis.conf
2.修改 /etc/redis.con后台启动设置daemonize no改成yes,并保存退出。(以守护进程方式启动)
3.Redis启动,注意保证能定位redis-server指令
/usr/local/bin/redis-server /etc/redis.conf (最前面一段也可以使用相对路径启动)
前面是要启动的程序,后面是指以该文件作为启动配置
4.查看进程是否启动成功:
ps -aux | grep redis 或者 netstat -anp | more 来查看
5.用客户端访问:redis-cli ;退出quit(只是退出,而没有关闭redis-server服务)
6.指定端口方式:redis-cli -p 6379(当端口改变的时候,就必须写端口号了,否则启动不了)
7.Redis关闭(会关闭redis-server服务)
1)单实例关闭:redis-cli shutdown
2)多实例关闭,指定端口关闭:redis-cli -p 6379 shutdown
3)也可以进入redis再关闭
8.配置文件
requirepass foobared 这个是密码
配置密码后,在运行redis-cli后使用auth foobared登陆密码
把bind 127.0.0.1 ::1注销掉。否则只允许本地连接,Jedis连接不上
port 6379 ,通常不改变
redis的文件构成
redis-benchmark:性能测试工具,可以在自己机器运行,看看自己机器性能如何
redis-check--aof:修复有问题的AOF文件,rdb和aof后面讲
redis-check-dump:修复有问题的dump.rdb文件
redis-sentinel:Redis集群使用
redis-server:Redis服务器启动命令
redis-cli:客户端,操作入口
Redis配置
配置文档
https://www.cnblogs.com/nhdlb/p/14048083.html#label0配置文件详解 https://www.cnblogs.com/nhdlb/p/14048083.html#label0
常规配置
设置密码
daemonize
loglevel
logfile
设定库的数量
Units单位
#INCLUDES#
#NETWORK# 网络相关配置
bind
1.在配置文件里面输入/bind进行查找,输入n(ext)查找下一个。要找75行这个,别找错成61行的了。(设置行数使用命令“:set number”)
2.默认情况bind=127.0.0.1只能接受本机的访问请求
3.如果服务器是需要远程访问的,需要将其注释掉(加上#表示允许远程连接)
4.启动redis,查看当前允许连接的情况(输入查看:ps -aux | grep redis)
5.允许远程连接。(看到redis-server后面是 *:6379)
(还有防火墙,还有保护模式也会影响。下一条说明)
protected-mode 保护模式
1.如图
2.默认是保护模式
3.如果服务器是需要远程访问的,需要将yes设置为no,这样才能远程连接
填坑了:笔记本之前连不上,就是pretected 没改成no !他竟然就这样通了 T_T
shutdown 关闭redis
redis-server /etc/redis.config 重新按该配置启动
port 端口
默认端口6379,为了安全性考虑,可以改成其他的。但是启动时就要按端口模式启动。
timeout 超时
一个空闲的客户端维持多少秒会关闭,timeout 0表示关闭该功能,即永不超时
如果发生超时,redis-cli会与redis-server断开连接
tcp-keepalive 300(默认值)
1、tcp-keepalive是对访问客户端的一种心跳检测,每隔n秒检测一次,单位为秒
2、如果设置为0,则不会进行Keepalive检测,建议设置成60
3、说明:为什么需要心跳检测机制
1)TCP协议中有长连接和短连接之分。短连接环境下,数据交互完毕后,主动释放连接;
2)长连接的环境下,进行一次数据交互后,很长一段时间内无数据交互时,客户端可能意外断开,
这些TCP连接并未来得及正常释放,那么,连接的另一方并不知道对端的情况,它会一直维护这个
连接,长时间的积累会导致非常多的半打开连接,造成端系统资源的消耗和浪费,且有可能导致在一个无效的数据链路层面发送业务数据,结果就是发送失败。所以服务器端要做到快速感知失败,减少无效链接操作,这就有了TCP的Keepalive(保活探测)机制
#GENERAL通用#
daemonize yes
设置为后台启动/守护进程;no 在前台显式运行
pidfile /var/run/redis_6379.pid
这个路径表示,存放pid文件的位置。每个实例会产生一个不同的pid文件,记录redis的进程号
loglevel notice(默认)
1、redis日志分为4个级别,默认的设置为notice,开发测试阶段可以用debug(日志内容较多,不
建议生产环境使用),生产模式一般选用notice
2、redis日志分为4个级别说明
1)debug:会打印出很多信息,适用于开发和测试阶段;
2)verbose(冗长的):包含很多不太有用的信息,但比debug要清爽一些;
3)notice:适用于生产模式:
4)warning:警告信息;
logfile ""
1、logfile""就是说,默认为控制台打印,并没有日志文件生成
2、可以为redis.conf的logfile指定配置项
3、提示:如果提示日志文件redis.log不存在,创建一个该文件即可:logfile /var/log/redis/redis.log
databases 16
设定库的数量,默认为16个,编号从0~15
#SECURITY安全#
设置密码
1.redis.conf中设置密码(永久设置)
#requirepass foobared (此时为无密码状态。取消#号设置密码)
永久设置,需要在配置文件中进行设置
可以正常使用redis-cli进行链接,但是操作时就会提示输入密码
auth [username] foobared 进行验证。[username]是可选的,默认情况下可以不写。
使用acl whoami 来查看当前用户,显示"default"
acl list 查看用户列表
2.命令行设置密码(临时设置)
1.案例。 config set requirepass foobared
2.在命令中设置密码,是临时的,重启redis服务器,密码就还原了
3.永久设置,需要在配置文件中进行设置(前面已经讲过了)
#LIMITS限制#
maxclients 10000
1、设置redis同时可以与多少个客户端进行连接。
2、默认情况下为10000个客户端。
3、如果达到了此限制,redis会拒绝新的连接请求,并且向这些连接请求方发出"max number of clients reached"
内存设置
1. maxmemory <bytes>
1、在默认情况下,对32位实例会限制在3GB,因为32位的机器最大只支持4GB的内存,而
系统本身就需要一定的内存资源来支持运行,所以32位机器限制最大3GB的可用内存是非常合
理的,这样可以避免因为内存不足而导致Redis实例崩溃
2、在默认情况下,对于64位实例是没有限制
3、当用户开启了redis.conf配置文件的maxmemory选项,那么Redis将限制选项的值不
能小于1MB
对maxmemory设置的建议
1、Redis的maxmemory设置取决于使用情况,有些网站只需要32MB,有些可能需要12GB.
2、maxmemory只能根据具体的生产环境来调试,不要预设一个定值,从小到大测试,基本标准是不干扰正常程序的运行。
3、Redis的最大使用内存跟搭配方式有关,如果只是用Redis做纯缓存,64-128M对一般小型网站就足够了
4、如果使用Redis做数据库的话,设置到物理内存的1/2到3/4左右都可以
2. maxmemory-policy noeviction(默认) 达到最大内存时采取的策略
policy一览
1)volatile-lru:使用LRU算法移除key,只对设置了过期时间的键;(最近最少使用)
2)allkeys-lru:在所有集合key中,使用LRU算法移除key
3)volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键
4)allkeys-random:在所有集合key中,移除随机的key
5)volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key
6)noeviction:不进行移除。针对写操作,只是返回错误信息
3. maxmemory-samples 5(默认值)选取用于比较的样本数量
1、设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小,redis默认会检查这么多个key并选择其中LRU的那个
2、一般设置3到7的数字,数值越小样本越不准确,但性能消耗越小
小结
连接注意事项:
1.如果Redis配置了密码,则需要进行身份校验
2.因为需要连接edis端口,比如6379,就需要配置防火墙,放开端口
3.注意修改bind,支持远程连接
4.pretected no,保护模式改成no
发布和订阅
发布和订阅是什么
一句话:Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息
Redis客户端可以订阅任意数量的频道
如何理解发布和订阅模式
任务队列
1、顾名思义,就是"传递消息的队列"
2、与任务队列进行交互的实体有两类,一类是生产者(producer),另一类则是消费者(consumer)。生产者将需要处理的任务放入任务队列中,而消费者则不断地从任务队列中读入任务信息并执行
如何理解
-可以这么简单的理解:
1)Subscriber:收音机,可以收到多个频道,并以队列方式显示
2)Publisher:电台,可以往不同的FM频道中发消息
3)Channe:不同频率的FM频道
-从Pub/Sub的机制来看,它更像是一个广播系统,多个订阅者(Subscriber)可以订阅多个频道(Channel),多个发布者(Publisher)可以往多个频道(Channel)中发布消息。
发布订阅模式分类
一个发布者,多个订阅者
多个发布者,一个订阅者
多个发布者,多个订阅者
命令行实现发布和订阅
发布订阅操作
1、PUBLISH channel msg
将信息message发送到指定的频道channel
2、SUBSCRIBE channel [channel ...]
订阅频道,可以同时订阅多个频道
3、UNSUBSCRIBE [channel ...]
取消订阅指定的频道,如果不指定频道,则会取消订阅所有频道
4.PSUBSCRIBE pattern [pattern ...]
订阅一个或多个符合给定模式的频道,每个模式以*作为匹配符,比如
it*匹配所有以it开头的频道(it.news、it.blog、it.tweets等等),
news.*匹配所有以news.开头的频道(news.it、news.global.today等等),诸如此类
5.PUNSUBSCRIBE [pattern [pattern ...]]
退订指定的规则,如果没有参数则会退订所有规则
快速入门
细节:
1、发布的消息没有持久化
2、订阅的客户端,只能收到订阅后发布的消息
Jedis
API文档
在线文档:
https://www.mklab.cn/onlineapi/jedis/
Jedis工作示意图
-Java程序操作Redis的工具
-示意图(第三个老鼠是go语言)
Jedis操作Redis数据
引入Jedis
<dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency> </dependencies>
测试连接的代码
public class Jedis_ {
//链接Redis
@Test
public void con(){
Jedis jedis = new Jedis("192.168.80.135", 6379);
//如果Redis配置了密码,则需要身份校验
jedis.auth("foobared");
String res = jedis.ping();
System.out.println("连接成功 返回结果="+res);
jedis.close();//关闭当前连接。并没有关闭Redis
}
}
发现连接不上。猜测是防火墙端口没有打开的原因。
打开防火墙端口
1、查看防火墙端口是否打开:firewall-cmd --list-all
看到里面的ports,后面什么都没有,就是表明什么都没有打开
2、添加6379端口:firewall-cmd --add-port=6379/tcp --permanent
添加成功会显示success,但是再去查看防火墙打开的端口,发现还是没有。是因为需要重启防火墙才会生效。
3、重启防火墙:firewall-cmd --reload
4、再次查看:firewall-cmd --list-all
可以看到添加上去了。
再次测试Jedis连接代码
运行成功。
如果还是有连接不上的情况。使用:netstat -anp | more 查看网络情况
语法说明:查看系统网络情况 netstat
- 基本语法
netstat [选项]
- 选项说明
-an
按一定顺序排列输出-p
显示哪个进程在调用
看到只允许本地登录:127.0.0.1:6379。
需要去改配置文件的bind,将其注销#bind
修改后,再次查看网络情况:netstat -anp | more
应该是这样显示的:0.0.0.0:6379。没有限制仅本地登录
连接不上的原因,可能是Linux端的防火墙端口没有打开,也有可能是因为redis.conf设置里面的bind需要注释,否则就限定只能本机登录访问。
测试地址:localhost:8080/redisTest/t1