Redis学习(6)-Redis高级实用特性

Redis高级实用特性:

1.安全性
2.主从复制
3.事务处理
4.持久化机制
5.发布订阅消息
6.虚拟内存的使用

安全性:

设置客户端连接后进行任何其他指定前需要使用的密码警告:因为Redis速度相当快,所以一台比较好的服务器下一个外部的用户可以在一秒钟进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解
配置方法:
  requirepass beijing(在配置文件中配置密码)
  auth beijing(授权方式1)
  redis-cli -a beijing(授权方式2)

主从复制:

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

Redis主从复制特点:
1.Master可以拥有多个slave
2.多个slave可以连接同一个master外,还可以连接到其他slave
3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
4.提高系统的伸缩性

Redis主从复制过程:
1.Slave与master建立连接,发送sync同步命令
2.Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。
3.后台完成保存后,就将此文件发送给slave
4.slave将文件保存到硬盘上

配置主从服务器:
  配置slave服务器很简单,只需在slave的配置文件中加入一下配置:
  slaveof 192.168.1.1 6379 #指定master的IP和端口
  masterauth lamp #这是主机的密码

事务处理:

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

添加一个事务
  命令:
  multi
  OK
  incr a
  QUEUED
  incr b QUEUED
  exec
  1)1
  2)1

如何取消一个事务(回滚)
  dicard
  如果有一条不成功,并不影响上面的操作
  incr age
  incr name    #不成功
  exec

乐观锁复杂事务控制
乐观锁:大多数是基于数据版本(version)的记录机制实现的,即为数据加一个版本的标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个“version”字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1,此时,将提交数据的版本号与数据表对应记录的当前版本号进行对比,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据。watch命令会监视给定的key,当exec时候如果监视的key从调用watch后发生过变化,则整个事务会失败,也可以调用watch多次监视多个key,这样就可以对指定的key加乐观锁了,注意watch的key是对整个连接有效的,事务也一样,如果连接断开,监视和事务会被自动清除,当然了exec,discard,unwatch命令都会清楚连接中的所有监视

持久化机制:

Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化
Redis支持两种持久化方式:
1.snapshotting(快照)也就是默认方式
2.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写入到磁盘的时机。

配置方式:
  appendonly yes //启用aof持久化方式
  #appendfsync always //收到写命令就立即写入磁盘最慢,但是保证完全的持久化
  appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
  #appendfync no //完全依赖os,性能最好持久化没保证

发布及订阅消息:

  发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。redis作为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个 channel,也可以向多个channel发送消息。

虚拟内存:

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

配置:
  vm-enabled yes #开启vm功能
  vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径
  vm-max-memory 1000000 #redis使用的最大内存上限
  vm-page-size 32 #每个页面的大小32字节
  vm-pages 13417728 #最多使用多少页面
  vm-max-threads 4 #用于执行value对象换入患处的工作线程数量

启动后提示,还要配置:
  really-use-vm yes

注:Redis系列博客均是结合兄弟连Redis学习视频的笔记!

时间: 2024-08-03 03:04:52

Redis学习(6)-Redis高级实用特性的相关文章

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

Redis高级实用特性 4.持久化机制 Redis是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到硬盘来保证持久化.Redis支持两种持久化方式:(1).snapshotting(快照) 也是默认方式.  快照是默认的持久化方式,这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.可以通过配置设置自动做快照持久化的方式.我们可以配置redis在n秒内如果超过m个key的修改就自动做快照. 修改配置文件redis.conf:save 9

redis学习之redis的安装,类库及demo

一.redis的安装 a.系统环境和说明 Linux操作系统选用Ubuntu, Redis的版本选取目前的最新稳定版本2.8.9.客户端选用了Redis的Java版本jedis b.安装步骤 wgethttp://download.redis.io/releases/redis-2.8.9.tar.gz c. 在目录下,解压按照包,生成新的目录redis-2.8.9 tar xvfz redis-2.8.9.tar.gz d.  进入解压之后的目录,进行编译 cd  redis-2.8.9 su

Redis学习一Redis的介绍与安装部署

NoSql 介绍 NoSql 是key-value形式存储,和传统的数据库不一样,不一定遵循传统数据库的一些基本要求,比如遵循SQL标准(insert\update\delete\select).ACID属性(原子性 一致性 隔离性 持久性).表结构等等,这些数据库有具有以下特点:非关系型的.分布式的.开源的.水平可扩展的. redis 的介绍 redis 是一个开源的,先进的key-value存储.它通常被称为数据结构服务器,因为键可以包含字符串(string).哈希(hash).链表(lis

Redis学习-4-2 Redis持久化

1.持久化: 数据保存到一个不会丢失的地方就是持久化,可认为是永久存储的: 2.Redis持久化: Redis的数据存储在内存中,是不安全的,所以Redis有自己的持久化方案,将内存数据定期保存到磁盘文件中,当Redis崩溃了或者计算机意外关机了,重启Redis服务的时候,将磁盘中文件恢复到内存中来: 3.Redis持久化方案: 1.RDB: Redis Data Base,就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存. RDB保存了在某个时间点的数据集

redis高级实用特性

1. 安全性 2. 主从复制 3. 事务处理 4. 持久化机制 5. 发布订阅消息 : 可以做一个消息系统 6. 虚拟内存的使用 一 . 安全性 设置客户端连接后进行任何其他指定前需要使用的密码 . 警告 : 因为redis 速度相当快 , 所以在一台比较好的服务器下 , 一个外部的用户可以在一秒钟进行150k次的密码尝试 , 这意味着你需要指定非常非常强大的密码来防止暴力破解 . > requirepass passwordStr  // 在redis.conf 中添加这句话即可. 设置完成后

redis高级实用特性(1)

1.安全性 2.主从复制 3.事务处理 4.持久化机制 5.发布订阅消息 6.虚拟内存的使用 安全性:设置客户端连接后进行任何其他指定前需要使用的密码 警告:因为redis速度相当快,所以在一台比较好的服务器下,一个 外部用户可在一秒钟进行150K次的密码尝试,这就意味着你需要指定 非常非常强大的密码来防止暴力破解. 在配置文件中修改# requirepass foobared选项 去掉注释,后面跟着的就是密码 设置了密码,登录时 可以授权auth password 也可以登录时授权 redis

自学总结redis第二部分(redis常用命令、高级命令特性以及与java代码的结合)

六.redis多数据类型介绍(常用命令) 6.1前提操作 #如果前面的redis环境没搭好,那么可以先暂时在 "http://try.redis.io/"中实践redis命令部分.   #为了测试方便,把redis登录密码暂时撤销   #redis一共分为五种基本数据类型:String,Hash,List,Set,ZSet #所有命令都可以到"http://www.redis.cn/commands.html"  去搜索到. #首先由于redis是一个基于key-v

redis学习 java redis应用

学习redis的总结 :  http://www.runoob.com/redis/redis-tutorial.html     http://www.redis.cn/   一个是菜鸟网站,一个是redis中文网可以进行学习 下面是关于学过redis之后的总结,只是浅显的入门用于对只是的记录 : window :    下载redis  ,,通过cmd 命令行进入 :   执行 redis-server  启动服务端,   然后才能执行redis-cli 启动客户端进行操作   具体的命令可

Redis学习笔记-----Redis数据过期策略详解

本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为缓存,有很多数据都是临时缓存一下,可能用过之后很久都不会再用到了(比如暂存session,又或者只存放日行情股票数据)那么就会出现一下几个问题了 Redis会自己回收清理不用的数据吗? 如果能,那如何配置? 如果不能,如何防止数据累加后大量占用存储空间的问题? 之前一直接触Redis不是很深入,最近项目当中遇到一个需求场景,需要清空一些存放在Redis的数据,主要是通过一些时间进行