Redis深入操作(redis事务控制,乐观锁,密码配置,性能监控)

一、redis事务控制

1.1redis本身支持事务处理,但是这种支持的事务处理本身是存在有设计缺陷的,而且与传统数据库的事务控制不同,首先来看一下redis中事务支持命令:

                        .打开事务:multi

                        .取消事务:discard

                        .提交事务:exec

1.2范例:观察redis中的事务:

先初始化一个数据

#设置一个数据 
set age 30

现在对这个数据进行更新

#打开事务支持
multi
#进行数据操作
set age 300
set age 3000
#这里我们会发现一个很熟悉的单词提示,队列;因为我们一旦开启了事务支持,所有的更新操作都要追加到这个更新队列中
#y由于我们发现 300,3000对人的年龄不适合,所以我这里关闭事务,所以数据并没有提交,所以数据将会恢复到更新之前的状态
discard


上面的例子给我们一种错觉,好像确实符合事务控制的流程。

如果更新处理,执行了exec提交后,事务才会真正的执行。

看上去上面的事务控制似乎理所应当

但是这种事务本身是有bug的,因为redis的设计之初就是不要事务的。这里的事务就是一个玩笑。

为什么说redis事务是一个笑话呢,下面一个例子来验证

set id huting    #设置一个数据
multi            #打开事务支持
incr id           #【queued】进行数据操作
set age 500 #【queued】进行数据操作
exec   #提交事务
#这个时候恭喜你 ,报错了。哈哈哈哈哈。。

Redis深入操作(redis事务控制,乐观锁,密码配置,性能监控)_第1张图片

原因分析:因为id的数据不是一个数字,所以不能进行自增更新,所以报错了,但是这个不是重点,重点的是,set age 500这句命令还是被执行了,

那么问题来了,部分提交成功,部分报错,这叫事务吗?现在我想你应该明白redis的事务控制是一个玩笑了。

所以nosql在应用上都是考虑不处理事务的情况居多。

二、乐观锁

在数据库执行操作,为了保证数据库的一致性,A更新 B不能更新。
所谓的锁,在数据库上我们分为两种锁
              *悲观锁  *乐观锁

悲观锁:基于数据库操作实现

乐观锁:基于算法的实现,在数据表上追加一个锁的而处理列。

这里我补充一下乐观锁和悲观锁的概念:

               悲观锁:SELECT * FROM table_test WHERE min = 1 FOR UPDATE
               当A在执行这条操作的时候,B只能等待。

       乐观锁:当A执行更新的同时 把Min的值改成了2,那么B再执行语句的时候会更新失败,但是不会影响其他的访问

1.在Redis里面 ,有直接支持乐观锁的。要观察乐观锁的处理,则可以打开两个不同的session来进行处理

打开两个控制窗口,进行操作我这里定义第一个为session1 第二个为session 2


我们按照下面的顺序开始操作开始操作

在session1中,我们进行如下的操作

#设置一个数据:
	set age 30
	#进行这个数据的监听
	watch age
	#启用事务
	multi
	#这个时候我们并没有对age做任何修改
在session 2对数据进行修改操作
	set age 500
	get age

回到session1

set age 60
#提交事务
exec

这个时候我们会发现session中的显示内容如下:

Redis深入操作(redis事务控制,乐观锁,密码配置,性能监控)_第2张图片

而且我们发现session1中的数据并没有更新成功:

原因分析:由于session2已经更新了原始数据,所以原始数据的标记列发生了变化,所以本次session1的更新就失败了,这就是所谓的乐观锁。


三、redis密码配置

因为我们现在的Redis都没有进行认证的处理操作,那么所有的程序都可以进行连接,为了安全我们必须设置密码

1.在redis设计的时候并没有像其他的数据库那样准备了复杂的权限,唯一在redis里只需要设置验证密码就行

#第一步 修改redis.conf文件
vim /usr/local/src/redis/conf/redis.conf
#进入文件找到
#requirepass footbared
#在下面追加
requirepass huting666
#保存退出这样子密码就设置好了
#但是需要重新启动一下服务
#关闭服务
killall redis-server
#重新启动服务
/usr/local/src/redis/bin/redis-server /usr/local/src/redis/conf/redis.conf

2.进行redis登陆:

登陆redis服务器

注意注意了,登陆我们有两种方法

1.进入追加

/usr/local/src/redis/bin/redis-cli -h 127.0.0.1 -p 6379
#进入后追加命令
auth huting666
2.一步到位
/usr/local/src/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a huting666

Redis深入操作(redis事务控制,乐观锁,密码配置,性能监控)_第3张图片

!!!redis一定要设置密码,而且在集群开发的时候一定要将密码进行统一

四、redis性能监控

我们要明白在一个应用中一旦使用了redis,那么表示我们可能会大面积的使用redis
如果想知道当前的运行状态,那么我需要对其进行监控处理,redis本身没有这个功能,所以我们需要采用工具实现redis的监控操作,

我们这里采用“redis-stat”工具实现监控操作

1.为了体现redis的特点,下面建立三个redis运行进程,模拟的方式很简单,配置不同的redis端口就行,需要准备不同的redis.conf文件

 首先干掉之前的redis目录

  cd /usr/data/
  rm -r redis

我们这里创建三个redis目录

mkdir -p /usr/data/redis/{redis-6379,redis-6380,redis-6381}/{run,logs,dbcache}
#将之前的redis的配置文件拷贝6379的一份
cp /usr/local/src/redis/conf/redis.conf /usr/local/src/redis/conf/redis-6379.conf

编辑每一个配置文件修改各自的内容

 #以redis-6379为例子
 vim /usr/local/redis/conf/redis-6379.conf
修改内容:
注释调:#bind 127.0.0.1    #取消外网访问
设置端口
pidfile /usr/data/redis/redis-6379/run/redis-6379.pid
logfile  "路径";
dir  路径
完成  #这里的具体配置可以参考我之前redis安装教程来,由于已经写过一次,这里不必罗嗦了

将上面改好的文件复制两份:

cp /usr/local/src/redis/conf/redis-6379.conf /usr/local/src/redis/conf/redis-6380.conf
cp /usr/local/src/redis/conf/redis-6379.conf /usr/local/src/redis/conf/redis-6381.conf

使用vim命令分别先后打开上面复制的两份文件

 vim /usr/local/src/redis/conf/redis-6380.conf
 #输入面的命令进行全局修改
 1,$s/6379/6380/
  vim /usr/local/src/redis/conf/redis-6381.conf
#输入面的命令进行全局修改
1,$s/6379/6381/

重启redis服务

#重新启动redis的服务
/usr/local/src/redis/bin/redis-server   /usr/local/src/redis/conf/redis-6379.conf
/usr/local/src/redis/bin/redis-server   /usr/local/src/redis/conf/redis-6380.conf
/usr/local/src/redis/bin/redis-server   /usr/local/src/redis/conf/redis-6381.conf

验证redis是否ok

ps -ef | grep redis
netstat -nptl

当你输入上面的命令出现下图的结果,那么恭喜你,到这里redis的模拟集群搭建好了


2.本机redis进程有了 

  下一步通过GITHUB下载redis-stat开发包

首先你要想使用redis-stat检测包必须下载ruby相关的环境:

ruby安装环境

注意这里一定要安装新版本的2.0.0以上的版本,不然后面你就等着报错吧!

然后git上的redis-stat工具下载到/usr/local/目录中

cd /usr/local
git clone https://github.com/junegunn/redis-stat.git

注意假如你的机器没有安装git,这里会提示你的命令无效,这个时候需要你进一步安装git

sudo yum install git
对不起,到这一步还不能使用,下载的redis-state里实际上只有一个执行命令,如果要使用这个命令,则
进入到bin目录下
cd /usr/local/redis-stat/bin
#执行如下执行进行安装
gem install redis-stat

最后一步:启动redis-stat工具进行监听

#首先这里查看一下自己的ip
ifconfg
/usr/local/redis-stat/bin/redis-stat 162.38.134.37:6379 162.38.134.37:6380 162.38.134.37:6381 -a huting666

当你输入最后这条指令是,就会出现下图所以的性能检查表,恭喜你!

Redis深入操作(redis事务控制,乐观锁,密码配置,性能监控)_第4张图片

但是到这里我们还没有完,我们总部能每次查看redis性能都去后台查看。(另外值得注意的是这里的ruby最好使用2.3.0版本,不然太新和太久都会报错,不要为我为什么,因为我经历过!哈哈)

/usr/local/redis-stat/bin/redis-stat 阿里云ip:6379 阿里云ip:6380 阿里云ip:6381 -a huting666 --server=80 --daemon --verbose

执行完之后到你的window浏览器中输入你的ip地址即可,因为这里使用的是80端口,所以不需要添加端口号。

Redis深入操作(redis事务控制,乐观锁,密码配置,性能监控)_第5张图片

到这里性能监控就全做完了。

你可能感兴趣的:(Redis,centos7)