【redis】05Redis的常用命令及高级应用

时间:2023-03-09 04:30:19
【redis】05Redis的常用命令及高级应用
Redis常用命令
Redis提供了非常丰富的命令,对数据库和个中数据类型进行操作,
这些命令呢,可以在Linux终端使用。
分为两大类的命令,一种是键值相关的命令,一种是服务器相关的命令,
首先来看下咱们的键值相关的命令,
Keys
返回满足的给定pattern的所有key
【redis】05Redis的常用命令及高级应用
返回满足后面这个模糊匹配的所有的键,
当前库里面的所有的键,
keys *代表返回所有键,
开始给大家讲数据类型的时候,咱们设置的所有的键都在这里,
都在这里显示出来了,我如果只想显示my大头的,
咱们用:
keys my*
表示my打头,他是一个模糊匹配,
这个命令就是取出我当前数据库当中的,所有key,
exists
从这个字面意思上面来理解,是不是确认一个key是否存在啊,
咱们用咱们的exists  
【redis】05Redis的常用命令及高级应用
返回0代表,我当前库没有name这个键,
返回1代表,咱们当前库,有age键,
从结果来看呢,name键不存在,age键存在
这是咱们的exists方法。
del
删除一个键,
【redis】05Redis的常用命令及高级应用
返回1代表删除成功,再看下是否存在返回0
expire
我前面是不是讲过,setex还记得吗
是不是设置某一个键的过期时间啊,
同样咱们可以用一个expire对咱们的键设置国企时间,
【redis】05Redis的常用命令及高级应用
对咱们现有的一个键啊,比如说我当时的addr这个键是存在的,
如果不存在这里会报错啊,
 addr是存在,存在以后,我对这个addr进行10秒设置过期,设置一个过期时间为10秒,
咱们可以用一个ttl看一下这个键,还有多长时间过期,
ttl addr还有8秒过期,
ttl addr还有1秒过期,
当他过期掉以后,我再ttl addr这里返回一个-1,返回-1代表addr键已经过期,
在本例中,我们设置的addr这个key的过期时间是10秒,然后我们不断的用ttl
来获取这个key的有效时长,直至为-1说明此值已过期, 
get age
(nil)
看一下没有吧,
set age 20
OK
get age
"20"
我给age设置一个20是不是返回20啊,返回20以后咱们给他设置一下,给他设置一个过期时间,
expire age 10
(integer) 1
设置成功这里返回一个1
ttl age
(integer) 5
还有五秒过期,
ttl age
(integer) 4
还有四秒过期
ttl age
(integer) 2
还有两秒过期
ttl age
(integer) 1
还有一秒过期,
ttl age
(integer) -1
-1代表已经过期,已经过期以后咱们再
get age
(nil)
还能获取到吗,获取不到了吧,也就是说咱们的age键过了10秒,已经被销毁掉了,
此键已经被销毁掉了,
exists age
(integer) 0
是不是没有啦,变成0了吧,代表咱们的age键已经被销毁了,
也就是说已经过期了,
咱们还有一个方法叫做move方法,
是将当前数据库中的key转移到其它数据库中,
将这个之前呢,咱们先讲一个方法叫做选择数据库,  选择数据库咱们要用到一个方法叫做select
select 0
OK
select 0代表选择到当前数据库,选择到0数据库,
select 0代表已经进入到0数据库,
然后呢
set age 30
OK
给他的age设置一个30
get age 
"30"
然后我再get age是不是能获取到30
move age 1
(integer) 1
然后呢,我move age到咱们的1号数据,他这里的数据库名称不一样啊,
他这里的数据库是0到15,0到15号的数据库,也就是说总共16个数据库,
select 0代表第0个数据库,select 1代表第一个数据库,
我move age 1代表,代表从0数据库里面把age键,给他移动到1号数据库里面,
然后再get age返回nil,也就是说咱们已经移出去了,
但是移到1里面没有呢,咱们select 1进入1号数据库,然后再get age看能不能获取到,
是不是获取到30啦。这样就可以获取到咱们的30啦,
也就是说是不是把咱们的age从0数据库是不是成功的移动到了1号数据库,
咱们在进入到咱们的redis客户端的时候默认进入的是咱们的0号数据库,
【redis】05Redis的常用命令及高级应用
0号和1号,[1]>这样子的区别,
persist 对咱们的过期时间移除,取消吧,移除咱们的过期时间,
【redis】05Redis的常用命令及高级应用
取消定时用persist age对age键进行取消过期时间
然后在用ttl查看这个age键的过期时间,返回-1说明这个age键取消了过期时间,
这个时候返回的这个-1不代表过期了,代表取消了过期时间,
get age
"20"
咱们的这个age是不是还存在啊,是不是没有过期啊,因为他现在没有过期时间了,
tll age返回的-1代表这个age没有过期时间,
randomkey
这个方法随机返回key空间的一个key
random代表随机吧,咱们随机返回key空间的一个key,
随机返回咱们数据中的一个键吧,
【redis】05Redis的常用命令及高级应用
咱们看到的这些都是随机返回的,
rename
从字面意思上来理解,rename代表什么呢,重命名吧,
【redis】05Redis的常用命令及高级应用
keys * 看到这里有一个age键
咱们给age键重命名一下行不行,
rename返回个OK代表重命名成功,再keys * 查看下哲理的age是不是换名字啦
type 
返回值的类型,返回键的数据类型,
【redis】05Redis的常用命令及高级应用
这是咱们的键值的相关命令
接下来看一下咱们服务器的相关命令,
ping
这个命令大家并不陌生吧,
来进入到咱们的win cmd一下 ctrl + r  --- cmd
ping 192.168.88.89 -t
这个ping代表什么意思,代表咱们的主机是否相通,
ping咱们这个ip是否相通,看下是不是有返回数据包
这就是说这个ping代表的是我能否连接到192.168.88.89这台服务器上,
咱们的redis的ping也是一样的,代表测试链接是否存活,
ping
PONG
输入一个ping返回一个PONG
代表咱们乒乓球扔到墙上是不是弹回来了,代表咱们有响应吧,有响应代表咱们链接正常,
好如果我们把他删除掉,
【redis】05Redis的常用命令及高级应用
第一次ping有相应这个时候我们把redis服务停止掉,
停止掉以后再ping,出现一个错误吧,不能连接到咱们的redis,是不是连接失败吧,
如果我再连接上,我这会儿再ping是不是返回一个PONG
是不是又连接成功啦,
【redis】05Redis的常用命令及高级应用
#pkill redis-server
#netstat -tunpl | grep 6379
是不是已经被杀除掉了,
然后咱们在用redis客户端ping是不是返回一个不能连接到redis数据库吧,
好这个时候咱们在给他启动,
#/usr/local/redis/bin/redis-server /user/local/redis/etc/redis.conf
启动成功一个后再看下端口是否有人监听
#netstat -tunpl | grep 6379
【redis】05Redis的常用命令及高级应用
是不是返回有这个进程在监听这个端口啊,
此时我再在客户端里面ping又返回一个PONG
代表咱们又连接成功,这就是咱们的ping是测试连接是否存活,
echo命令
在命令行打印一些内容
跟咱们的php的echo是一样的,
【redis】05Redis的常用命令及高级应用
我echo lijie是不是直接出来了"lijie"
是不是我输入什么就显示什么啊,这个非常简单啊,
select
选择数据库redis数据库的编号从0~15,我们可以选择任易一个数据库来进行数据的存取
【redis】05Redis的常用命令及高级应用
选择16时,报错,说明没有编号为16的这个数据库,
quit
退出连接
【redis】05Redis的常用命令及高级应用
或者说用exit也可以啊
是不是退出咱们的客户端了啊,然后再进
/usr/local/redis/bin/redis-cli
然后exit也一样的退出连接
然后再进来我ctrl + c也一样的, 是不是有很多种方法啊,quit也是其中的一种,
dbsize
代表返回当前数据库中key的数目,
【redis】05Redis的常用命令及高级应用
我当前数据库是不是0啊
如果我这里没有编号的话,默认进来就是0 
结果说明此库中有18个键
select 1
OK
dbsize
(integer) 1
刚才是不是把age移动过去啦,是不是应该有一个键啊,
select 2
OK
dbsize
(integer) 0
是不是0啊,select 2里面我是不是没有键,
keys *
(empty list or set)
是不是空的
info
获取服务器的信息和统计,
【redis】05Redis的常用命令及高级应用
返回了版本号等等一些内容
这里返回的都是redis服务器相关的一些信息
比如说咱们的redis的版本
redis_version:2.4.1
还有一些等等的一些相关的服务器的相关信息,
vm_enabled代表虚拟内存
【redis】05Redis的常用命令及高级应用
db0刚刚是不是有19个键,过期的键为0
那么db1呢总共有多少个键,1个键吧,过期的键也是0
这是咱们服务器的一些相关的信息
config get
这个方法,实时传储收到的请求,
【redis】05Redis的常用命令及高级应用
本例子中我们获取了dir这个参数配置的值,如果向获取全部参数数据的配置值也很简单,
只需要执行“config get *”即可将宣布的值都显示出来
config get *
返回了所有的一些选项,
比如说dir咱们在root下面
"dbfilename"
"dump.rdb"
dbfilename是咱们数据库的文件名吧,
还有数据库的密码呢,主机的授权等一些信息,
最大的内存的等等一些信息,
可以返回相关配置的一些参数的值,
flushdb
删除当前选择数据库中的所有的key
【redis】05Redis的常用命令及高级应用
在本例中我们将0号数据库中的key都清楚了。
select 1
OK
keys *
1) "age"
是不是有个age键,好我把它删除掉,
flushdb 
OK
这里显示OK,然后咱们再keys
keys *
(empty list or set)
是不是空啊,也就是咱们的flushdb是清空咱们的当前数据库,
flushall
flushall代表删除所有数据库中的所有key
【redis】05Redis的常用命令及高级应用
当我选择一号数据库的时候dbsize有一个键吧,
然后我再select 0,在0号数据库里面flushall,然后在进入1号数据库,
dbsize是不是变成0啦,也就是说这个命令不管在哪儿执行,不管你在哪个库执行
他都会把所有的数据库的所有的键,全部删除掉,
那么咱们服务器相关的命令呢,也就讲到这里,也给大家都介绍完了啊,
也相对简单一些啊 ,
接下来咱们来讲一下咱们redis的高级应用,
【redis】05Redis的常用命令及高级应用
Redis高级使用特性,
redis高级应用呢,咱们分为几个部分,
分为6个部分,
首先咱们来讲咱们的安全性,咱们目前为止进入到咱们redis的客户端,是不是都没有输入
用户名密码吧,这样子用起来是不是非常的不安全吧,
那好咱们给他做一个安全性的设置,行吧,这是咱们第一点要讲的,
第二点呢,咱们可以给咱们的redis做一个主从复制
咱们的redis同样支持咱们的事务处理
我前面是不是说过,他虽然支持事务处理,但是他的事务处理是不是非常的不成熟,
第四个呢,咱们讲一下他的持久化机制,redis咱们一开始是不是就说了,
redis的数据是不是都缓存在,是不是保存在咱们的内存里面,然后他再不停的往磁盘里面写入
吧,做快照吧,一会详细的给大家来讲咱们的持久化机制,
再往后发布订阅信息,这个咱们可以做一个消息系统啊,用这个功能咱们可以做一个消息系统,
再往后还有什么虚拟内存的使用,
这是咱们redis的六大块儿高级功能,
首先咱们来看第一块儿,安全性,
我现在
exit
我退出了redis客户端,退出来我再进入
/usr/local/redis/bin/redis-cli
我每次进来是不是不需要输入用户名密码,
然后我这里就可以set name吧,
set name lijie
OK
get name
"lijie"
我直接都可以设置删除吧,所有的权限是不是都有,这样子用起来是不是很不安全,
那咱们怎么办啊,来看一下他的安全性,怎么做啊
安全性
设置客户端连接后进行任何其他指定前需要使用的密码
这是咱们的redis安全性啊,
警告:因为redis的速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在
一秒钟进行150K次的密码尝试,这意味着你需要指定非常分成强大的密码来防止玻璃破解
【redis】05Redis的常用命令及高级应用
设置密码也比较简单咱们只需要在咱们的配置文件中修改咱们的一个选项叫做
requirepass然后后面指定咱们需要设置的密码,即可
然后在启动的时候指定咱们的配置文件,
我们设置的连接口令是beijing 
首先exit退出咱们客户端
vi /usr/local/redis/etc/redis.conf
进入编辑,编辑以后
咱们在命令模式下面找一个/requirepass
【redis】05Redis的常用命令及高级应用
默认是不是加的注释啊,这里写上lijie
requirepass lamplijie
我的lamplijie就是咱们的redis密码
保存退出,修改完配置文件以后咱们需要干嘛,咱们需要重启咱们的服务吧,
pkill redis-server
删除完以后来在,咱们启动,
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
启动完以后来看咱们的进入啊,
/usr/local/redis/bin/redis-cli
o(︶︿︶)o 唉同学们可能会奇怪,为什么能进来呢,我没有输入用户名密码吧,
这个时候我来输入下命令啊,看一下能不能运行,
keys *
(error) ERR operation not permitted
这个时候咱们就可以看到有一个操作被拒绝的错误提示,操作被禁止,也就是说咱们没有权限,
那这里咱们怎么办,他这里咱们有一个授权的方法,
咱们叫做 auth ,输入咱们的密码叫做lamplijie
auth lamplijie
OK
对吧,是咱们刚才设置的密码吧,那么好吧,咱们授权,授权这里会返回一个OK,
返回OK代表什么授权成功,授权成功以后我再keys
keys *
1) "name"
这个时候咱们是不是显示了啊,
命令是不是执行成功啊,这是不是咱们的一种授权方式吧,
如果我不想,每次进来都输入一次auth,那怎么办,咱们登录的时候就直接给他输入密码,
exit
咱们退出来
退出来以后咱们同样进入
/usr/local/redis/bin/redis-cli -a lamplijie
我后面跟上一个a指定咱们的密码,叫做lamplijie,
这里-a代表输入咱们的密码,进入以后我直接
keys *
1) "name"
是不是咱们不需要在授权了啊,也就是说咱们授权有两种方式,
一种方式是进来以后直接用auth命令授权,
另一种方式是直接登录授权,
这是咱们的两种授权方式啊,
这是咱们的安全性,接下来看一下咱们redis比较重要的一个功能,
主从复制
redis的主从复制配置和使用都非常简单。比咱们的mysql要简单很多,
通过主从复制呢,可以允许多个从服务器(slave server)拥有和主服务器(master server)
相同的数据库副本。
也就是说咱们的从服务器可以从咱们的主服务器把数据库复制过来,
这就达到了一个主从复制,
来看一下咱们的主从复制有什么样的特点,
Redis主从复制的特点:
1.Master可以拥有多个slave,首先从机一定要与咱们的主机相连吧,
2.多个slave可以链接同一个master外,还可以链接到其他的slave,还可以连接到其他的master
其他的slave
3.主从复制不会阻塞master,在同步数据是,master可以举行处理咱们的client的请求。
也就是说在咱们的master和咱们的slave同步数据的时候,他不影响我再往里面写数据,
【redis】05Redis的常用命令及高级应用
那为什么其他的slave跟另一个slave相连呢,这个是为了什么啊,为了比如说,我当前这台master
突然有一天出现问题了,down掉了,那其他机器是不是就无法同步了呢,
为了避免这个现象出现,咱们在链接一个slave,当Master宕机以后咱们这个slave立马作为主机,
立马转换角色,变成主机,这是咱们的一个心跳感应,当这个主机断掉以后,这个立马变成主机,
好,这是咱们的一个主从复制的特点,还可以什么提高咱们系统的伸缩性,
来看,那个具体的一个过程呢,
比如说,一台主机,一台从机,
当我的主机想我的从机,请求同步命令的时候,
此时咱们的master主机会再开启一个后台进程,干嘛啊,把他当前的数据库,
备份到一个文件里面,这里这个时候再往里面进入的写的命令呢,
咱们也不影响,两个进程同时进行不影响,比如说这个时候又有插入了吧,
比如用sadd又往里面插入了一个键,都不影响,我这里还在执行插入,
这里在备份数据库,这里备份成功,以后,我将这个文件发送给咱们的slave,
发送完毕以后我slave把这个文件保存到咱们的硬盘上面,保存到自己的硬盘上以后干嘛,
启动的时候他会找这个文件,我把这个文件里面的数据库给映射到我本地的数据库,
这样就可以达到咱们的主从同步,主从复制同步吧,
Redis主从复制过程,
1.当Slave向咱们的master建立连接,发送sync同步请求命令。
2. Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程,会开始
收集新的写命令,并缓存。
两边是不影响的吧,
3.当后天保存这个文件成功以后,将此文件发送给咱们的slave从机
4.然后从机呢将此文件保存到硬盘上。
保存到硬盘上面是不是就拿到咱们主机的数据库啦,拿到主机的数据库后,咱们是不是就
可以同步成功了,这样就完成了咱们的主从复制,
那怎么样来配置呢,
配置主从服务器:
配置咱们从服务器很简单,只需要在从的配置文件中加入以下配置。
【redis】05Redis的常用命令及高级应用
先把slaveof这个注释项目打开,然后填写咱们的主机ip地址,主机的端口,
如果说主机加了密码,
咱们需要打开咱们的masterauth主机授权,并且输入主机的口令,
关机一下,咱们把这台机器给他clone克隆一下,重命名下这个机器叫Redis_master
好关闭Redis_master成功
Redis_master右键---Manage---Clone...
下一步,。。。
克隆出来一台,咱们来给他重命名一下,叫做Redis_slave
Redis_slave呢,现在咱们把两台机器同时启动,
咱们一会儿来做呢,就以Redis_Master作为主机,
然后以Redis_slave来做从机,
主机呢,咱们不需要怎么配置,只需要在咱们的从机上面进行一个配置,
配置咱们的slaveof然后再配置咱们的masterauth 。
就可以进行主从复制,一会就来做一下看他启动成功了吗
好咱们的主从都已经启动成功了,
来首先看一下咱们的主,
linux登录
localhost login:root
Password:
先看一下咱们的ip地址,
ifconfig eth0
【redis】05Redis的常用命令及高级应用
 咱们主机的ip地址是192.168.88.89
再看一下咱们的slave
ifconfig eth0
【redis】05Redis的常用命令及高级应用
因为我由于是刻录过来的,是咱们克隆过来的吧,
ip地址这里怎么编程172啦,
咱们修改一下啊,把他改成同一网段的,
ifconfig eth0 192.168.88.90
给他临时改一下,这个时候再来查看
【redis】05Redis的常用命令及高级应用
已经修改成功,88.90
ping一下咱们的主机,看通不通,
ping 192.168.88.89
好这里有返回数据吧,表示已经连通了,
两台主机已经连通了,
连通以后,咱们的主机,先启动咱们的redis
/usr/local/redis/bin/redis-server /user/local/redis/etc/redis.conf
启动以后进入到咱们的客户端,
/usr/local/redis/bin/redis-cli
启动过redis客户端后,我看一下
keys *
(error) ERR operation not permitted
启动以后是不是需要授权,
auth lamplijie
OK
授权成功以后来
keys
1) "name"
是不是只有name对吧,
咱们把他都情况啊,
flushall
OK
flushall把所有的数据库都清空掉,为了咱们做实验啊,
keys *
(empty list or set)
我这里再keys是不是都没有了啊,
我这个时候来配置咱们的从机,Redis_slave,
注意咱们的第一步是,是不是配置咱们的配置文件,
vi /usr/local/redis/etc/redis.conf
第一步打开咱们的
/slaveof
找到了
【redis】05Redis的常用命令及高级应用
slaveof的第一个参数是masterip主机ip,第二个参数是主机的端口,
好咱们复制一份儿,
slaveof 192.168.88.89 6379
是咱们的ip地址跟端口吧,注意这个88.89是咱们的主机的ip地址,
【redis】05Redis的常用命令及高级应用
然后再找masterauth
masterauth lamplijie
保存退出,
好这个时候在启动,
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
启动以后咱们登录啊,
/usr/local/redis/bin/redis-cli -a lamplijie
是不是我得登录本地,得~
进来以后,我
keys *
(empty list or set)
然后再回到在主机那儿,往里面写,
set age 20
OK
keys *
1) "age"
是不是有一个age啦,有age以后咱们
get age  
"20"
get age一下是不是20啊,
好再看咱们的从服务器
keys *
1) "age"
是不是有了age啦,代表咱们的从机和咱们的主机是不是同步成功啊,
get age
"20"
是不是20,是不是在主机设置的20。
也就是说此时此刻代表咱们的主从复制成功,
那有些同学会问,那这样子的情况下,我怎么知道谁是主,谁是从啊,
可以用info命令看咱们的,是查看服务器的相关命令,
【redis】05Redis的常用命令及高级应用
这里有一个role角色,咱们当前角色是不是从啊,slave吧。
当前角色是从啊,
【redis】05Redis的常用命令及高级应用
master_link_status什么意思
也就是说我链接主机的状态为正在连接,对吧已经连接成功吧,
再来看这个主机,咱们再来info一下,
【redis】05Redis的常用命令及高级应用
slave0这个从机当前是在线的, 
也就是说当前的Redis_slave正连接着咱们的master
这就是咱们完成了主从复制,非常非常简单吧,
大家需要知道两点,第一点需要在咱们的从机上面配置咱们的slaveof
并且这个ip地址是主机的Redis_master的ip地址,
第二点要配置咱们主机的授权口令,
如果说中间有一点没有配置成功,下面的主从复制,是不成功的,