Redis学习第八课:Redis高级实用特性(一)
Redis高级实用特性
注:我学习的环境是vmware7.1 + ubantu10.10+ redis 3.0.2
1、安全性
设置客户端连接后进行任何其他指定前需要的密码。因为redis速度相当快,一个外部用户可以在一秒钟进行很多次的密码尝试,这就需要设定非常强大的密码来防止暴力破解。 可以在Redis的配置文件中找到如下项: # requirepass foobared requirepass anny
root@ubuntu:/usr/local/redis# ps -e
root@ubuntu:/usr/local/redis# kill -9 2039
root@ubuntu:/usr/local/redis# netstat -tunpl | grep 6379
root@ubuntu:/usr/local/redis# ./bin/redis-server ./etc/redis.conf
root@ubuntu:/usr/local/redis# ./bin/redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379>
为Redis设置密码后,再启动Redis客户端,命令就无法执行。
对Redis客户端进行授权,通过以下命令:
127.0.0.1:6379> auth anny
OK
或者在启动Redis客户端时,设置密码,命令如下:
root@ubuntu:/usr/local/redis# ./bin/redis-cli -a anny
2、主从复制
Redis主从复制配置和使用都要非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。
Redis主从复制的特点:
1、Master可以拥有多个slave。
2、多个slave可以连接同一个master外,还可以连接到其它的slave。
3、主从复制不会阻塞master, 在同步数据时,master可以继续处理client请求。
4、提高系统的伸缩性。
注意:Redis的主从复制,不仅仅是master与slave相连接,也可以slave与slave相连接,当master宕机时,另一个主要的slave立马转换角色,变成master。

Redis主从复制过程:
1、Slave与master建立连接,发送sync同步命令。
2、master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。
3、后台完在保存后,就将此文件发送给slave。
4、slave将此文件保存到硬盘上。
配置主从服务器:
只需要修改slave的配置文件中加入以下配置:
slaveof 192.168.32.216 6379 #指定master的ip和端口
masterauth anny #这是主机的密码
主从服务器实验操作:
1、首先将本台虚拟机重命名为Redis_master,通过下面命令关机。
root@ubuntu:/usr/local/redis#init 0
2、通过vmware,在Redis_master虚拟机名称上点右键,点击“Clone”命令,一路点“下一步”,直到完成。将新克隆的虚拟机重命名为Redis_slave。
3、分别启动虚拟机redis_master和redis_slave。
4、切换到虚拟机redis_slave,修改IP。修改/usr/local/redis/etc/redis.conf文件,修改以下内容:
slaveof 192.168.32.216 6379
masterauth anny
5、分别启动两台机器的redis-server.
6、我们在虚拟机redis_master的 redis客户端写入数据,数据会自动同步到虚拟机redis_slave上。
7、如何判断谁是主谁是从,可以通过info命令查看role内容。
3、事务处理
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
- 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
- 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
Redis对事务的支持目前还比较简单。Redis只能保证一个client发起的事务中命令可以连续的执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。
Redis 事务命令
下表列出了 redis 事务的相关命令:
| 序号 | 命令及描述 |
|---|---|
| 1 | DISCARD 取消事务,放弃执行事务块内的所有命令。 |
| 2 | EXEC 执行所有事务块内的命令。 |
| 3 | MULTI 标记一个事务块的开始。 |
| 4 | UNWATCH 取消 WATCH 命令对所有 key 的监视。 |
| 5 | WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 |
multi:将任务命令放入队列
exec:顺序执行本事务上下文队列中的任务命令。
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 10
QUEUED
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
127.0.0.1:6379> get age
"20"
discard:清空事务的命令队列并退出事务上下文,即我们常说的事务回滚。
当执行了multi命令后,如果想取消事务处理,可以使用discard命令。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 30
QUEUED
127.0.0.1:6379> set age 40
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get age
"20"
强调:在Redis的事务上下文中,当其中某一个命令执行失败时,不会影响到其他命令的执行。这一点跟我们理解中的事务不一样,发生错误,不会回滚。
看下面例子,在整个事务中,第一条命令执行成功,而第二条命令执行失败,但事务没有回滚。
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> get name
"test"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr age
QUEUED
127.0.0.1:6379> incr name
QUEUED
127.0.0.1:6379> exec
1) (integer) 21
2) (error) ERR value is not an integer or out of range
127.0.0.1:6379> get age
"21"
乐观锁:
大多数是基于数据版本(version)的记录机制实现的。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来实现读出数据时,将此版本号一同读出,之后更新时,对此版本号加1。此时,将提交数据的版本号与数据库表对应记录的当前版本号时行比对,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据。
watch命令会监视给定的key,当exec的时候如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch命令多次监视多个key,这样就可以对指定的key加乐观锁。注意watch的key是对整个连接有效的,事务也一样。如果连接断开,监视和事务都会被自动清除。当然exec、discard、unwatch命令都会清除连接中的所有监视。
Redis乐观锁实例:
在第一个终端中,通过watch命令监控名称为“age“的key:
127.0.0.1:6379> get age
"21"
127.0.0.1:6379> watch age
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 18
QUEUED
然后我在第二个终端中,对key为“age“进行赋值。
127.0.0.1:6379> set age 25
OK
然后我又回到第一个终端进行后续命令,这时执行事务返回nil,表示事务执行不成功。
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get age
"25"
Redis学习第八课:Redis高级实用特性(一)的更多相关文章
- Redis学习第八课:Redis高级实用特性(二)
Redis高级实用特性 4.持久化机制 Redis是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到硬盘来保证持久化.Redis支持两种持久化方式:(1).snapshott ...
- redis学习(八)——redis应用场景
毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象 ...
- Redis数据库高级实用特性:持久化机制
Redis数据库高级实用特性:持久化机制 大型web系统数据缓存设计 Redis高级特性:虚拟内存的使用技巧 Redis高级实用特性:安全性与主从复制 Memcached.Redis OR Tair
- Redis学习笔记八:集群模式
作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...
- redis学习笔记(详细)——高级篇
redis学习笔记(详细)--初级篇 redis学习笔记(详细)--高级篇 redis配置文件介绍 linux环境下配置大于编程 redis 的配置文件位于 Redis 安装目录下,文件名为 redi ...
- redis学习教程一《Redis的安装和配置》
redis学习教程一<Redis的安装和配置> Redis的优点 以下是Redis的一些优点. 异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执 ...
- C# Redis学习系列三:Redis配置主从
Redis配置主从 主IP :端口 192.168.0.103 6666 从IP:端口 192.168.0.108 3333 配置从库 (1)安装服务: redis-server ...
- redis 学习(1)-- redis 安装与启动
redis 学习(1)-- redis 安装与启动 redis 特性 关于 redis 的介绍网上已经有很多信息了,这里我就不在详细说明了.介绍一下几个鲜明特性: 1.速度快 官方称可以达到10W的q ...
- Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板
原文:Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...
随机推荐
- shell 加法计算
Shell 相加目前发现有 3 种写法: 1. a=10 b=20 c=`expr ${a} + ${b}` echo "$c" 2. c=$[ `expr 10 + 20` ] ...
- 文件上传allowedTypes和文件下载contentType(mimeType)
我们在做文件上传和下载时,常常要用到以下mimeType,下面列出来供大家参考参考!希望多顶顶 '.a' : 'application/octet-stream', '.ai' ...
- django字段的参数
所有的模型字段都可以接收一定数量的参数,比如CharField至少需要一个max_length参数.下面的这些参数是所有字段都可以使用的,并且是可选的. null 该值为True时,Django在数据 ...
- Cassandra 和 Spark 数据处理一窥
Apache Cassandra 数据库近来引起了很多的兴趣,这主要源于现代云端软件对于可用性及性能方面的要求. 那么,Apache Cassandra 是什么?它是一种为高可用性及线性可扩展性优化的 ...
- Spring Boot中注解事务
- 自适应界面开发总结——WPF客户端开发
1.由于界面大小是变化的,所以必须有一个稳定不变的参考界面(即在一个标准的界面尺寸下进行WPF界面开发,比如:发票查验V3.0的美工设计尺寸——1024*740): PS:在WPF的用户控件Xam ...
- LeetCode--108--将有序数组转化为二叉搜索树
问题描述: 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10 ...
- LeetCode--053--最大子序和
问题描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: ...
- Java IO流中的flush()
通过BufferedOutputStream或BufferedWriter 链接到底层流上来实现.因此,在写 完数据时,flush就显得尤为重要. 例如: 上图中WEB服务器通过输出流向客户端响应了一 ...
- OAF开发中一些LOV相关技巧 (转)
原文地址:OAF开发中一些LOV相关技巧 在OAF开发中,LOV的使用频率是很高的,它由两部分构成一是页面上的LOV输入框(如OAMESSageLovInputBean),二是弹出的LOV模式窗口(O ...