非关系型数据库Redis学习(2)
Redis常用命令
1.键值相关命令
2.服务器相关命令
键值相关命令
1.keys 返回满足给定条件的所有的key keys * 取出所有的key
2.exists 确认一个key是否存在
3.del 删除一个key
4.expire 设置key的过期时间
5.move 将当前的数据库中的key转移到其他数据库中
6.select 选择数据库 从0-15
7.persist 移除过期时间
8.randomKey 随机返回key空间的一个key
9.rename 重命名
10 Type 返回值的类型
服务器相关命令
1.ping 测试连接是否存活
2.echo 在命令行打印一些内容
3.dbsize 返回数据库中的key的数目
4.Info 获取服务器的信息和统计
5.config get 实时转储收到的请求
6.flushdb 删除当前的数据库中的key
7.flushall 代表删除所有数据库中的可以key
Redis高级实用特性
1.安全性 2.主从复制 3.事务处理 4.持久化机制 5.发布订阅消息 6.虚拟内存使用
安全性
设置客户端连接后,进行任何其他指定前需要使用密码(警告:Redis数度相当快。所以一台比较好的服务器下 一个用户可以在一秒钟内进行150K次的密码尝试,所以需要设置强大的密码防止暴力破解)
指令:auth password
或者登录的时候 Redis-cli.exe -a password 授权登录
主从复制
Redis主从复制配置和使用都非常的简单,通过主从复制可以允许多个slave。salve拥有和master server一样的数据副本
Redis主从复制的特点
1.master可以拥有多个slave
2.多个salve可以连接同一个master 还可以连接其他的slave
3.主从复制不会阻塞master,在同步数据时,master可以继续处理client的请求
4.提高系统的伸缩性
配置主从服务器
配置slave服务器很简单,只需要在slave的配置中加以下配置:
slaveof 192.168.1.1 6379 #指定master的Ip地址和端口
masterauth lamp #这是主机的密码
输入Info命令可以得到主从信息
事务处理
Redis 对事务的支持,目前比较简单。Redis只能保证一个client发起的事务中的命令可以连续执行,而中间不会插入其他client的命令。当一个client在一个连接中发出mutil命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,Redis会顺序的执行队列中的命令
diacard 清空事务命令队列,并退出事务上下文,也就是我们所说的事务回滚。
事务队列中某个命令执行出现错误,整个事务不会回滚。
乐观锁复杂事务控制
乐观锁:
大多数是基于数据版本(version)的记录机制实现的。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过数据表添加一个"version"字段来实现读出数据时,将此版本号一同读出,之后更新时,对此版本号加1.此时,将提交的数据版本号与数据表对应记录的当前版本号进行对比,如果提交的数据版本号大于数据库当前的版本号,则予以更新,否则认为是过期数据。
watch 命令 watch age 对age键监控是否修改过。如果修改过,当前的事务是不允许执行成功的。
watch命令会监视给定的key,当exec的时候,如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key。这样就可以对指定的key加乐观锁了。注意watch的key是对整个连接有效,事务也一样。如果断开,监视和事务都会被自动清除。当然了exec,discard,unwatch命令都会清除连接中的所有监视。
持久化机制
Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。
Redis支持两种持久化方式:1.snapshoting(快照)也是默认方式 2.Append-only file(缩写aof)的方式
snapshoting方式
快照是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb.可以通过配置设置自动做快照持久化的方式。我们可以配置Redis在N秒内如果超过m个key键的修改就自动做快照。
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内如果超过10个key被修改,则发起快照保存
Append-only file(缩写aof)的方式
由于快照方式是在一定间隔时间做一次的,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。
aof比快照方式有更好的持久化性,是由于在使用aof时,Redis会将每一个收到的写命令都通过write函数追加到文件中,当Redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
当然由于os会在内核中缓存write做的修改,所以可能不会立即写到磁盘上。这样aof方式的持久化也还是有可能丢失部分的修改。可以通过配置文件告诉Redis我们想要通过fsync函数强制os写入到磁盘的时机
appendonly yes #启用aof持久化方式
#appendfsyncalways //收到写命令就写入磁盘,最慢,但是保证完全的持久化
appendfsynceverysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
#appendfsyncno //完全依赖os,性能最好,持久化没保证
发布与订阅信息
发布与订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,Redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型,Redis将消息类型称为通道(channel)。当发布者通过publish命令向Redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到次消息
虚拟内存的使用
Redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于Redis这样的内存数据库,内存总是不够用的。除了可以将数据分割多个Redis server外,另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据计划到磁盘上。