标签:redis
11.redis常用命令
keys * 返回所有的键
keys my* 模糊匹配
exists key 确认key是否存在
del key
expire key time对现有的键设置过期时间[秒为单位]
ttl key 查看过期时间,-1代表已过期
move 将当期数据库中的key移到其它数据库当中
select database_name 选择数据库
move key database_name
persist key 取消过期时间,此时ttl key返回-1并不代表过期
randomkey 随机返回一个key
rename 重命名key
rename set2 set20
type key 返回key的类型
ping 测试连接是否正常
echo 在命令行打印一些内容
select database 选择数据库 ,redis数据库编号在0到15之间
quit/exit/ctrl+c退出
dbsize返回当前数据库的数目
info获取服务器的信息与统计
config get key 实时传储收到的请求
config get *
flushdb 删除当前选择数据库中的所有key
flushall 删除所有数据库当中的所有key
12.redis高级应用
12.1安全性
设置密码:
vi /usr/local/redis/etc/redis.conf
requirepass password
重启服务之后进行连接
/usr/local/redis/bin/redis-cli
auth password
或者/usr/local/redis/bin/redis-cli -a password
12.2主从复制
master可以有多个slave
多个slave可以连接到同一个master外,还可以连接到其它的slave
主从复制不会阻塞master,在同步数据的时候,master可以继续处理client请求
提高系统的伸缩性
redis主从复制的过程:
slave与master建立连接,发送sync同步指令
master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存
slave将此文件保存到硬盘上
配置主从服务器:
配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:
slaveof 192.168.1.1 6379#指定master的IP和端口
masterauth password #这是主机的密码
info可以查看主从机器信息
12.3事物处理
redis对事务的支持目前还比较简单,redis只能保证一个Client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令,当一个client在一个连接中发出multi命令时,这个
连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令
multi可以打开事务上下文
exec执行事务当中的命令
discard取消事务
乐观锁:大多数是基于数据版本version的记录机制实现的,即为数据增加一个版本标识
,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个version字段来实现读取数据时,
将此版本号一同读出,之后更新时,对比版本号加1.此时,将提交数据的版本号与数据表对应记录的当前版本号进行对比
,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据
redis乐观锁
get age
watch age
multi
watch命令会监视给定的key,当exec时如果监视的key从调用watch后发生过变化,则整个事务会失败。
也可以调用watch多次监视多个key,这样就可以对指定的key加乐观锁了,注意watch的key是对整个
连接有效的,事务也一样。如果断开连接,监视和事务都会被自动清除,当然了exec,discard,unwatch命令都会
清除连接中的所有监视。
12.4持久化机制
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化
1.snapshotting(快照)也是默认方式
2.append-only file(缩写aof)的方式
快照是默认的持久化方式。这种方式是将内存中数据以快照的方式写入到二进制文件当中,默认的文件名为
dump.rdb.可以通过配置设置自动做快照持久化的方式,我们可以配置redis在n秒内如果超过m个key被修改
就自动写快照
save 900 1#900秒内如果超过一个key被修改,则发起快照保存
save 300 10#300秒内如超过10个key被修改,则发起快照保存
save 60 10000
由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改
aof比快照方式有更好的持久性,是由于在使用aof时,redis会将没一个收到的写命令都通过write函数追加到文件中,
当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
当然由于os会在内核中缓存write做的修改,所以可能不是立即写到硬盘上,这样aof方式的持久化也还是有可能会丢失部分修改。
可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机
appendonly yes #启用aof持久化方式
#appendfsync always #收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
appendfsync everysec #每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
#appedfsync no #完全依赖os,性能最好,持久化没保证
12.5发布订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,redis作为一个pub/sub
的server,在订阅者和发布者之间起到了消息路由的功能,订阅者可以通过subscribe和
psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道
(cahnnel).当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client都会收到此消息
subscribe tv1 监听
subscribe tv1 tv2
publish tv1 zsjbroadcast 广播
12.6虚拟内存的使用
redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的
就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间
用于其他需要访问的数据,尤其是对于redis这样的内存数据库,内存总是不够用的,除了可以将数据分割到多个redis server外
另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上
vm-enabled yes#开启vm功能
vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径
vm-max-memory 1000000 #redis使用的最大内存上限
vm-page-size 32 #每个页面的大小32字节
vm-pages 1344217728 #最多使用多少页面
vm-max-threads 4#用于执行value对象换入缓存的工作线程数量
本文出自 “逆天” 博客,请务必保留此出处http://xxzjzsj.blog.51cto.com/3052058/1629164
标签:redis
原文地址:http://xxzjzsj.blog.51cto.com/3052058/1629164