Redis
Redis和Memcached的区别
(1)持久化Redis可以做缓存,也可以做存储,支持ADF和RDB两种持久化方式;Memcached只能缓存数据
(2)数据结构Redis有丰富的数据类型:字符串、链表,Hash、集合,有序集合;Memcached一般就是字符串和对象
安装Redis
(1)下载并解压Redis压缩包
tar -xvzf redis-5.0.5.tar.gz
(2)编译和安装Redis
make
make prefix=/usr/local/redis install
(3)将redis-5.0.5下的redis.conf文件夹移到redis的conf文件夹下
mv redis.conf /usr/local/redis/conf/
(4)修改redis.conf文件的daemonize
daemonize yes
(5)启动redis的服务器
redis-server conf/redis.conf
(6)查看redis的服务器的进程
ps -ef | grep redis
Redis的操作
1、键值操作
keys pattern
randomkey
exists key
type key
expire key seconds
pexpire key milliseconds
persist key
2、数据类型
(1)字符串
set key value
get key
append key value
//设置多个key-value
mset key value
//获取多个值
mget key
//自增和自减
incr key
decr key
(2)链表
//左链表添加多个值
lpush key value
//列出左链表区间元素
lrange key start stop
//获取左链表头部的值
lpop key
//右链表添加多个值
rpush key value
//获取右链表头部的值
rpop key
(3)Hash
//添加单个信息
hset key field value
//添加多个字段信息
hmset key field value
//获取多个字段的值
hmget key field
//获取key的所有信息
hgetall key
(4)无序集合(不可重复)
//添加多个成员
sadd key member
//列出集合中的成员
smembers key
(6)有序集合(可以重复)
//根据score排序
zadd key score member
//获取集合区间的成员
zrange key start stop
//获取集合某个范围的成员
zrangebyscore key min max [WITHSCORES]
zrevrange key start stop [WITHSCORES]
zrangebyscore key min max [WITHSCORES]
Redis的事务
事务
要么全部都要执行,要么就都不执行
特性
原子性,一致性,隔离性、持久性
原子性
事务执行不可分割,要么全部完成,要么全部拉倒不干
一致性
事务使得系统从一个一致的状态转换到另一个一致状态
隔离性
并发访问数据库时,一个用户的事务不能被其他事务所干扰,各并发事务之间数据是独立的
持久性
一个事务被提交之后。它对数据库中数据的改变是持久的。即使数据库发生故障也不应该对其有任何影响
事务的命令
//开启事务
multi
//提交事务
exec
//事务回滚
discard
Redis的锁机制
执行事务操作的时候,如果监视的值发生了变化,则提交失败(watch命令)
Redis的消息机制
消息的类型
(1)Queue消息:队列,点对点(2)Topic消息:主题,群发:发布消息,订阅消息
Redis消息机制
只支持Topic消息
命令
发布消息:publish订阅:subscribe
订阅消息(可以用通配符来订阅消息):psubscribe
常用的消息系统
Redis,只支持TopicKacka,只支持Topic,需要Zookeeper支持
JMS,Java Messaging Service(Java消息服务标准),支持Queue Topic
Redis的持久化
RDB快照
一种快照,备份。每隔一段时间,将内存汇总的数据保存到硬盘上,产生RDB文件
RDB生成策略
save 900 1 //900秒内,如果有1个key发生变化,执行RDB
save 300 10 //300秒内,如果有10个key发生变化,执行RDB
save 60 10000 //60秒内,如果有10000个key发生变化,执行RDB
其他参数
stop-writes-on-bgsave-error yes //当后台写进程出错时,禁止写入新的数据
rdbcompression yes //是否压缩。压缩会节省空间,但会影响备份和恢复性能
RDB的优点和缺点
优点:快,恢复速度快缺点:在两次RDB之前,可能会造成数据的丢失。解决方法:AOF
AOF日志
客户端在操作Redis时,把操作记录到文件汇总,如果发生崩溃,读取日志,把操作完全执行一遍。默认是禁用(appendonly no)。AOF开启时,优先使用AOF
AOF记录策略
# appendfsync always //每个操作都记录日志:优点安全,缺点慢
appendfsync everysec
# appendfsync no //由操作系统来决定记录日志的方式(一般不会用)
AOF日志重写(overwrite)
//10000次请求
redis-benchmark -n 10000
参数设置
no-appendfsync-on-rewrite no //执行重写的时候,不写入新的日志
auto-aof-rewrite-min-size 64mb //执行重写的文件大小。到64mb触发重写
Redis的主从复制
作用:主从复制,主从备份,防止主节点宕机;读写分离,分担主节点的任务;任务分离
Redis集群方式
星型模型
优点:效率高,slave地位一样,直接从主节点取出信息缺点:HA比较麻烦
线型模型
优点:HA简单缺点:效率不如星型模型
Redis集群配置
Masterbind 192.168.138.130
//关闭RDB和AOF
appendonly no
#save 900 1
#save 300 10
#save 60 10000
Slave1
bind 192.168.138.130
//修改RDB和AOF文件名和端口
port 6380
pidfile /var/run/redis_6380.pid
dbfilename dump6380.rdb
appendfilename "appendonly6380.aof"
slaveof 192.168.138.130 6379
Slave2
bind 192.168.138.130
//修改RDB和AOF文件名和端口
port 6381
pidfile /var/run/redis_6381.pid
dbfilename dump6381.rdb
appendfilename "appendonly6381.aof"
slaveof 192.168.138.130 6379