Redis高级应用特性

1、安全性

2、主从复制

3、事务处理

4、持久化机制

5、发布订阅消息

6、虚拟内存的使用

安全性

设置客户端连接后进行任何其他指定前需要使用的密码。

警告:因为redis速度相当快,所以在1台比较好的服务器下,一个外部的用户可以在1秒中进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。

方式:

在redis的配置文件中加入:requirepass password  //password为自己设定

之后进入:

127.0.0.1:6379> keys *

(error) NOAUTH Authentication required.

授权方式:

1、127.0.0.1:6379> auth guozhen123

OK

127.0.0.1:6379> keys *

(empty list or set)

2、在开启redis的时候授权:

D:\Program Files\redis\Redis>redis-cli -a guozhen123

127.0.0.1:6379> keys *

(empty list or set)

主从复制

Redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本

redis主从复制的特点:

1、Master可以拥有对个slave

2、多个slave可以连接同一个master外,还可以连接到其他slave

3、主从复制不会阻塞master,同步数据时,master可以继续处理client请求

4、提高系统的伸缩性

配置从服务器:

配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:

slaveof 192.168.1.1 6379 #指定master的ip和端口

masterauthlamp #这是主机的密码

可以通过info命令查看当前redis的状态,是主还是从:

事务处理

Redis对事务的支持目前还比较简单。Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序执行队列中的命令

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命令

127.0.0.1:6379> get age

"20"

127.0.0.1:6379> multi

OK

127.0.0.1:6379> set age 100

QUEUED

127.0.0.1:6379> set age 200

QUEUED

127.0.0.1:6379> discard

OK

127.0.0.1:6379> get age

"20"

事务处理的缺陷:

127.0.0.1:6379> get age

"20"

127.0.0.1:6379> get name

"guozhen"

127.0.0.1:6379> multi

OK

127.0.0.1:6379> incr name

QUEUED

127.0.0.1:6379> incr age

QUEUED

127.0.0.1:6379> exec

1) (error) ERR value is not an integer or out of range

2) (integer) 21

发生错误不回滚所有操作。

乐观锁:

大多数是基于数据版本(version)的记录机制实现的。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个“version”字段开实现读取数据时,将此版本号一同读出,之后更新时,对此版本号加1.此时,将提交数据的版本号与数据表对应记录的当前版本号进行对比,如果提交的数据版本号大于当前的数据版本号,则予以更新,否则认为是过期数据。

比如:版本控制器svn就肯定乐观锁的实现。首先中央仓库和个人仓库中的版本号都一致。如果拉下来的进行了修改,本地对应的锁自增。然后提交到中央仓库后中央仓库的锁变成提交者的锁,之后就乐观锁控制。

乐观锁复杂事务控制:

实例:假设有一个age的key,我们开两个session来对age进行赋值操作,我们下面来看一下结果如何

(1)、session1

redis 127.0.0.1:6379> get age

"10"

redis 127.0.0.1:6379> watch age

OK

redis 127.0.0.1:6379> multi

OK

redis 127.0.0.1:6379>

(2)session2

redis 127.0.0.1:6379> set age 30

OK

redis 127.0.0.1:6379> get age

"30"

redis 127.0.0.1:6379>

(3)session1

redis 127.0.0.1:6379> set age 20

QUEUED

redis 127.0.0.1:6379> exec

(nil)

redis 127.0.0.1:6379> get age

"30"

redis 127.0.0.1:6379>

监视发现对age有更改,就不允许事务执行成功。这就是乐观锁的事务控制。

watch命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,整个事务会失败。也可以调用watch多次监视多个key。这样就可以对指定的key加乐观锁了。注意watch的key是对整个连接有效的,事务也是一样。如果连接断开,监视和事务都被自动清除。当然exec,discard,unwatch命令都会清除连接中的所有监视。

持久化机制

Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。

redis支持两种持久化方法:

snapshotting(快照)也是默认方式

Append-only file(缩写aof)的方式

snapshotting方式

快照是默认的持久化方式。这种方式时将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照。

save 900 1 #900秒内如果超过1个key被修改,则发起快照保存

save 300 10 #300秒内如果超过10个key被修改,则发起快照保存

save 60 10000

快照保存的是数据,二进制文件。

aof方式

由于快照方式是在一定间隔时间做一次的,所以如果redis以外down掉的话,就会丢失最后一次快照后的所有修改。

aof比快照方式有更好的持久化,是由于在使用aof时,redis会将每一个受到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保的写命令来重建整个数据库的内容。

当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化还是有可能会丢失部分修改。

可以通过配置文件高数redis我们想要通过fsync函数强制os写入磁盘的时机。

appendonlyfile yes #启用aof持久化方式

#appendfsnc always //受到写命令就立即写入磁盘,最慢,但是保证完全的持久化

#appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中

#appendfsync no //完全依赖os,性能最好,持久化没保证

aof持久化的是写操作,以字符串类型存储。

发布以及订阅消息

发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合。Redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和pubscribe命令向redis server订阅自己感兴趣的消息,redis将信息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到此消息。

session1:

127.0.0.1:6379> subscribe tv2

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "tv2"

3) (integer) 1

1) "message"

2) "tv2"

3) "welcome to shanghai"

session2:

127.0.0.1:6379> subscribe tv1 tv2

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "tv1"

3) (integer) 1

1) "subscribe"

2) "tv2"

3) (integer) 2

1) "message"

2) "tv1"

3) "nice to meet you"

1) "message"

2) "tv2"

3) "welcome to shanghai"

session3:

127.0.0.1:6379> publish tv1 "nice to meet you"

(integer) 1

127.0.0.1:6379> publish tv2 "welcome to shanghai"

(integer) 2

虚拟内存的使用

Redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redis server外。另外能够提高数据库容量的办法就是使用虚拟内存把哪些不经常访问的数据交换到磁盘上。

虚拟内存配置

下面是vm相关配置:

vm-enabled yes  #开启vm功能

vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径

vm-max-memory 1000000 #redis使用的最大内存上限

vm-page-size 32 #每个页面的大小32字节

vm-pages 134217728 #最多使用多少页面

vm-max-threads 4 #用于执行value对象换入工作线程数量

really-use-vm yes #再次确认使用vm

redis高级应用特征的更多相关文章

  1. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  2. NoSQL之Redis高级实用命令详解--安全和主从复制

    Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim ...

  3. 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  4. 3.Redis高级功能

    3.Redis高级功能3.1 慢查询分析3.1.1 慢查询的两个配置参数3.1.2 最佳实践3.1.3 单线程架构3.2 Redis Shell3.2.1 redis-cli 详解3.2.2 redi ...

  5. 分布式缓存技术redis系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  6. redis 高级特性 不要太好用

    Redis高级特性及应用场景 redis中键的生存时间(expire) redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它. 过期时间可以设置为秒或者毫秒精度. ...

  7. Redis学习第八课:Redis高级实用特性(二)

    Redis高级实用特性 4.持久化机制 Redis是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到硬盘来保证持久化.Redis支持两种持久化方式:(1).snapshott ...

  8. Redis学习第八课:Redis高级实用特性(一)

    Redis高级实用特性 注:我学习的环境是vmware7.1 + ubantu10.10+ redis 3.0.2 1.安全性 设置客户端连接后进行任何其他指定前需要的密码.因为redis速度相当快, ...

  9. redis高级应用(集群搭建、集群分区原理、集群操作)

    文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...

随机推荐

  1. Cisco 交换Vlan配置

    添加Vlan命令 #添加vlan100 config)#vlan 100 #重命名vlan100 config-vlan)#name vlan100 #返回上一层 config-vlan)#exit ...

  2. Oh My Fish! 让你的 Shell 漂亮起来

    安装 Oh My Fish 安装 omf 很简单.你要做的只是在你的 Fish shell 中运行下面的命令. curl -L https://get.oh-my.fish | fish 一旦安装完成 ...

  3. SaltStack高可用multi-master-第十三篇

    multi-master官方介绍 As of Salt 0.16.0, the ability to connect minions to multiple masters has been made ...

  4. LIS严格递增和非递减模板

    2017-09-10 16:51:03 writer:pprp 严格递增的LIS模板 #include<stdio.h> #include<string.h> #include ...

  5. codeforces 1A - math - ceil

    2017-08-24 15:42:30 writer: pprp 感觉自己好菜啊,这个题都没有做的很好 题意很简单,用a * a 的地砖,将 n * m 的地板铺满,问最少需要多少个地砖? 一开始打算 ...

  6. 安迪的第一本字典 - set--sstream

    #include <iostream> #include <string> #include <set> #include <sstream> usin ...

  7. HDU5324 cqd分治

    HDU5324 cqd分治 标签(空格分隔): 未分类 给你两个长度相同数列,求第一个不上升,第二个不下降的最长子序列长度. 这里要求的子序列对第一个和第二个来说是相同的.即如果你在第一个序列里选了第 ...

  8. sqlserver 遍历表

    use Research go ); ) NOT NULL, [mrs] date); DECLARE Table_Cursor CURSOR FOR--包含有列‘sigdate’的表 select ...

  9. TCP_DB_中间件_遗留问题

    1.一些经验 1.1.Delphi客户端中 Block的socket,使用 读取超时的话,会有大约1秒的时间等待...很影响使用体验...于是 放弃超时读取的方式,改为 在每次读取到TCP数据包时 都 ...

  10. 关于IIS权限问题(Selenium WebDriver调用出错记录)

    本地VS调试过程中用Selenium WebDriver打开FF浏览器可以正常工作,项目部署至IIS后请求调用浏览器一直提示超时,异常如下: 因为本地调试可以成功,首先排除组件版本问题和浏览器兼容问题 ...