redis介绍

Redis
目录:
一,什么是redi
二,redis与Memcache的区别
三,安装和配置
四,操作redis
五,redis的事务和消息机制,锁机制
六,redis的持久化(RDB,AOF)
七,redis的集群:星形和线型
八,redis的哨兵(sentinel):Redis自带哨兵
九,redis的分片(nutcracker-0.3.0):redis的分片需要再装一个软件nutcracker-0.3.0来实现
一,什么是redis
redis是一种基于key-value的高性能存储nosql数据库,它的出现极大的补偿了Memcache这类key-value数据库的不足
二,redis与Memcache的区别
redis的特点:相比Memcache来说Redis具有持久化的特性(AOF和RDB),并提供丰富的数据类型(hash表,链表,set集合等)
Memcache特点:不支持持久化,严格来说只是缓存说句不能叫做数据库,并且缓存的内容一般来说只是字符串或者对象
三,安装和配置
解压:tar -zxvf redis-3.0.5
make
make PREFIX=/root/training/redis install
将redis-3.0.5目录下的redis.conf文件拷到redis目录下(redis.conf是redis的核心配置文件)

需要认识的redis/bin下的启动项: redis-benchmark:提供压力测试的一个工具 语法:redis-benchmark -n -1000 (模拟操作1000条数据)
redis-check-aof:检查AOF日志文件
redis-check-dump:检查dump日志文件(RDB)
redis-cli:启动redis的客户端 redis-cli -p 6379
redis-sentinel:启动redis的哨兵机制 bin/redis-sentinel -d -c sentinel.conf
redis-server:启动redis的服务器 bin/redis-server redis6379.conf

需要在redis.conf目录下配置的参数: port 6379 配置端口号

#save 900 1 在900秒内如果有一个key只发生了变化那么就将写入dump.conf文件
148 #save 300 10 在300秒内如果有10个key发生了变化,就写入日志dump.conf
149 #save 60 10000 在60秒内如果有10000个jey发生了变化,就写入日志dump.conf
stop-writes-on-bgsave-error yes 如果在写入RDB文件过程中发生了错误停止文件的写入
daemonize yes 是否以后台程序运行
rdbcompression yes 是否对RDB文件进行压缩(优点节省空间,缺点读操作性能差)
rdbchecksum yes 检查RDB文件是否完好
dbfilename dump.rdb 默认的RDB文件名

appendonly no 是否开启AOF文件
appendfilename "appendonly.aof" 默认的AOF文件名
538 # appendfsync always 每个操作都记录日志。最安全,性能最差
539 appendfsync everysec 默认:每秒
540 # appendfsync no 由系统自己选择记录AOF日志的方式
no-appendfsync-on-rewrite no当进行重写的时候是否写入AOF的新日志
580 auto-aof-rewrite-percentage 100 当这次AOF日志大小达到上一次重写后的一倍大
581 auto-aof-rewrite-min-size 64mb AOF日志达到64m进行重写

四,操作redis
操作redis有两种方式:命令行和Java api
命令行命令:
mget,mset(设置多个key-value)
mset key2 "lzk" key3 "lmhd"
mget key2 key3

incr,decr(自增自减)
set key4 10
incr key4
set key5 9
decr key5

llpush,lrange,lpop---->最右边为链表的第一个元素
lpush list1 1 2 3 4 5------>创建一个链表
lrange list1 0 2----->取出0,1,2三个元素--->5,4,3
lrange list 0 -1--->取出所有元素
lpop list1--->取出头元素

hmset,hmget,hgetall
hmset usr001 name lzk age 18 gender male
hmget usr001 name age gender
hgetall usr001

sadd,smembers (无序不重复集合)
sadd setkey1 11 22 44 33 11
sadd setkey2 33 44 55 66
sdiff setkey1 setkey2(差集)
sinter setkey1 setkey2(交集)
sunion setkey1 setkey2(并集)
smembers setkey1
五,redis的事务和消息机制,锁机制

redis的事务并不是真正的事务,Redis事物的本质将一组操作批量执行
使用multi进入事务
命令行进行操作
exec提交事务
discard回滚

redis的锁机制
不含锁:在执行到127.0.0.1:6379> DECRBY tom 100这句话时先不要提交,打开另一个会话窗口打开multi执行decr ticket
127.0.0.1:6379> set tom 100
OK
127.0.0.1:6379> set ticket 1
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decr ticket
QUEUED
127.0.0.1:6379> DECRBY tom 100
QUEUED
127.0.0.1:6379> exec
1) (integer) -1
2) (integer) 0


含锁:在执行到127.0.0.1:6379> DECRBY tom 100这句话时先不要提交,打开另一个会话窗口打开multi执行decr ticket
127.0.0.1:6379> set tom 100
OK
127.0.0.1:6379> set ticket 0
OK
127.0.0.1:6379> watch ticket
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decr ticket
QUEUED
127.0.0.1:6379> DECRBY tom 100
QUEUED
127.0.0.1:6379> exec
(nil)

redis的 消息机制:消息类型分为:topic(广播),queue(队列)
消息系统:同步消息系统,异步消息系统
redis,kafka只支持topic类型的消息
jms支持topic,queue 推荐weblogic

操作: publish ch1 “HelloWord”(发布消息 频道 内容)
subscribe channel ch1(接受消息 channel 频道)
psubscribe channel ch*(可接收多个publish发布的消息,支持通配符)


六,redis的持久化(RDB,AOF)
RDB(redis的默认持久化方式):每过一段时间将内存中的数据写到RDB文件中去
优点:恢复数据速度快
缺点:当系统发生掉电或者其他故障时,会丢掉某一时段的数据
#save 900 1 在900秒内如果有一个key只发生了变化那么就将写入dump.conf文件
148 #save 300 10 在300秒内如果有10个key发生了变化,就写入日志dump.conf
149 #save 60 10000 在60秒内如果有10000个jey发生了变化,就写入日志dump.conf
stop-writes-on-bgsave-error yes 如果在写入RDB文件过程中发生了错误停止文件的写入
daemonize yes 是否以后台程序运行
rdbcompression yes 是否对RDB文件进行压缩(优点节省空间,缺点读操作性能差)
rdbchecksum yes 检查RDB文件是否完好
dbfilename dump.rdb 默认的RDB文件名

AOF(默认不开启,但在实际生产中结合RDB和AOF以保证数据的完整性):通过重做日志(将于来做过的操作再做一遍)来达到恢复数据的目的
缺点:恢复数据速度相对RDB来说较慢
优点:最多只丢失一秒的数据
appendonly no 是否开启AOF文件
appendfilename "appendonly.aof" 默认的AOF文件名
538 # appendfsync always 每个操作都记录日志。最安全,性能最差
539 appendfsync everysec 默认:每秒
540 # appendfsync no 由系统自己选择记录AOF日志的方式
no-appendfsync-on-rewrite no当进行重写的时候是否写入AOF的新日志
580 auto-aof-rewrite-percentage 100 当这次AOF日志大小达到上一次重写后的一倍大
581 auto-aof-rewrite-min-size 64mb AOF日志达到64m进行重写

AOF的重写:什么是AOF的重写?
在.aof文件达到64M时,.aof文件会猛的变小,这便是发生了重写,.aof放弃记录繁琐的过程,直接记录结果
set i 0
incr i
incr i
incr i
incr i:增到100 总共101份日志,但是在aof重写时只记录set i 100



对比Oracle的完全备份和增量备份(RDB和AOF):在实际生产中比如说每周日做一次RDB,每天做一次AOF以保证数据的完整性


七,redis的集群:星形和线型

配置
主节点:6379
修改端口号
关闭RDB
关闭AOF
从节点:6380
修改端口号
修改RDB文件名dump6380.rdb
修改AOF文件名appendonly6380.aof
slaveof 192.168.17.11 6379
从节点:6381
修改端口号
修改RDB文件名dump6381.rdb
修改AOF文件名appendonly6381.aof
slaveof 192.168.17.11 6379
主从复制:防止主节点宕机导致的数据的丢失
过程:主 从
1,从节点发送请求
2,主节点收到请求
3,将RDB文件复制到从结点上
4,将AOF日志拷贝到从结点上
说明:所以在启动redis从节点的时候不要一次性启动太多,太多的话主节点会收到巨量的请求导致负载过大


任务分离:从节点分担主节点的的备份和计算工作
读写分离:
从节点上是read only


八,redis的哨兵(sentinel):Redis自带哨兵
什么是redis哨兵:
类比hdfs的HA:即在redis的主节点发生宕机时,哨兵机制会在slave中选出另一个master保证集群宕机

怎样使用哨兵:
哨兵的核心配置文件: sentinel.conf

参数: sentinel monitor mymaster 127.0.0.1 6379 2:监听master心跳信息(ip 端口号 几个哨兵)
sentinel down-after-milliseconds mymaster 30000 30s监听不到master的心跳信息视为宕机
sentinel parallel-syncs mymaster 1 选举出新的master时,连接到从节点的个数
sentinel failover-timeout mymaster 180000 切换时超过180秒没切换成功,视为失败
sentinel auth-pass <master-name> <password>哨兵连接到master配置的密码
启动: bin/redis-sentinel sentinel.conf
查看启动日志和kill -9 6379 的日志

九,redis的分片(nutcracker-0.3.0):redis的分片需要再装一个软件nutcracker-0.3.0来实现

什么是Redis的分片:类比负载均衡:不过Redis分片是从从节点的角度去考虑当一个从节点宕机后,可以在另一个从节点读出信息

怎样使用Redis的分片:
安装:nutcracker-0.3.0.tar.gz
解压
./configure --prefix=/root/training/proxy
make
make install

核心文件:nutcracker.yml

参数:alpha:
listen: 127.0.0.1:22121
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 2000
server_failure_limit: 1
servers:
- 192.168.17.11:6380:1 ip地址:端口:权重(轮询)
- 192.168.17.11:6381:1

启动: 查看nutcracker.yml文件是否配置好sbin/nutcracker -t nutcracker.yml
启动: sbin/nutcracker -d -c nutcracker.yml
尝试kill -9 从节点 是否能从另一个上读出来信息

posted @ 2018-03-13 23:16  毅一  阅读(141)  评论(1)    收藏  举报