1 Centos7环境下redis的安装
单机
- 在linux环境下,安装gcc和gcc-c++
yum -y install gcc gcc-c++
- 解压缩源文件包到/opt目录下
- 进入redis目录,输入
make
命令编译当前文件夹 - 进入src目录,输入
make install
命令,完成安装 - 输入
redis-server
命令,前台启动redis(即当前窗口作为守护进程,不可关闭) - 克隆会话新窗口下输入
redis-cli -p 6379
命令,通过端口6379连接到redis服务 - 修改配置文件redis.conf
daemonize no
修改为yes,表示以后台守护进程方式开启redis服务
需要以命令加配置文件路径的方式启动redis-server ./redis.conf
databases 16
,表示当前redis中的数据库共有16个数据库,dbid为0~15bind 127.0.0.1
,#注释掉该行,允许远程登录redis服务protected-mode yes
,修改为no,关闭保护模式
- linux下输入
redis-server ./redis.conf
命令,以配置文件中的配置启动redis服务 - 关闭redis,退出命令模式输入quit,停止redis服务输入redis-cli shutdown
集群
- 修改各节点上的配置文件redis.conf
cluster-enabled yes
放开注释port 6379
各节点修改为不同的端口如7001,7002…bind 127.0.0.1
修改为bind 本机IP地址
- 启动所有节点上的redis-server
- 检查redis端口是否正确
ps -ef|grep redis
- 进入redis目录下src目录中执行以下命令
./redis-trib.rb create --replicas 1 10.25.34.65:7001 10.25.34.66:7002 10.25.34.67:7003
- 通过客户端访问某节点
redis-cli -c -h 10.25.34.65 -p 7001
- 需要安装的环境
- ruby环境: yum install -y ruby
- ruby与redis连接: gem install redis
2 No-SQL简介
- 什么是no-sql?
非关系型数据库,Not Only SQL的缩写,用于超大规模数据的存储,不需要固定模式,无需多余操作即可横向扩展 - 为什么使用no-sql?
- 支持大量用户在线高并发访问
- 分布式服务架构下的低延迟访问响应
- 系统可用性高
- 存储非结构化数据
- 可扩展属性
- CAP定理是什么?
对于一个分布式的计算系统来说,不可能同时满足CAD三点
- 一致性(Consistency) (所有节点在同一时间具有相同的数据)
- 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
- 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
- 分布式系统不可能同时满足很好的一致性,可用性和分区容错性,而是满足其中两点
- CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
- CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
- AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。
- 什么是BASE原则?
NoSQL数据库通常对可用性及一致性的弱要求原则,同时也是反ACID模型,牺牲了高一致性获得可用性或可靠性
- Basically Available基本可用。支持分区失败(e.g. sharding碎片划分数据库)
- Soft state软状态 状态可以有一段时间不同步,异步。
- Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时高一致。
- BASE和ACID的特点?
ACID | BASE |
---|---|
原子性(Atomicity) | 基本可用(Basically Available) |
一致性(Consistency) | 软状态/柔性事务(Soft state) |
隔离性(Isolation) | 最终一致性 (Eventual consistency) |
持久性 (Durable) |
7. no-sql数据库有哪些分类?
存储方式 | 数据库 | 特点 |
---|---|---|
列存储 | Hbase | 按列存储数据,方便存储结构化和半结构化数据,方便做数据压缩,具有IO优势 |
文档存储 | MongoDB | 文档以类json格式存储,可对字段建立索引,实现关系数据库功能 |
key-value存储 | Redis | 通过key快速查询信息,value无格式限制全部存入一个key下 |
图存储 | FlockDB | 提高传统数据库存储性能 |
对象存储 | db4o | 以对象方式读取数据,类似面向对象语言的语法操作数据库 |
xml数据库 | BaseX | 支持XML查询语法 |
3 redis特点
- redis是什么?
- Remote Dictionary Server(Redis),key-value存储系统
- 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
- 单进程,默认16个数据库,默认端口6379
- redis有什么优势?
- 支持数据的持久化
- 支持数据的备份
- 读写性能高,读的速度是110000次/s,写的速度是81000次/s
- 支持多种数据类型
- 原子性的操作
- Redis还支持publish/subscribe,通知,key过期等等特性
- redis支持的数据类型有哪些?
数据类型 | 特点 |
---|---|
字符串(String) | 最多可以是512M,二进制安全(图片或序列化对象) |
哈希(Hash) | 是String类型的field和value的映射表,适合存储对象 |
列表(list) | 底层实际是字符串链表 |
集合(sets) | 无序、无重复集合 |
有序集合(sorted sets) | 每个元素都会关联double类型的分数,从小到大的排序 |
4 redis常用的命令
命令 | 语法 | 特点 |
---|---|---|
select | select 0~15 | 按dbid选择数据库 |
set | set key value | 在当前数据库下存储键值对 |
get | get key | 按key获取value |
keys | keys k* | 获取以k开头的key |
flushall | flushall | 清空全部数据库所有键值对 |
flushdb | flushdb | 清空当前数据库所有键值对 |
String类型
命令 | 特点 |
---|---|
del | 删除 |
append | 追加 |
setex | 设置数据过期时间 |
setnx | 仅当目标key不存在时才创建key,避免覆盖数据 |
mset/mget/msetnx | m表示合并,即一个key插入多个value |
list类型
命令 | 特点 |
---|---|
lpush key value value… | 左侧压栈多个值 |
rpush | 右侧压栈 |
lrange key start end | 按key从左侧开始获取list值,如果end写-1表示最后一个元素,正数越界不会报错 |
lindex key index | 按索引从左侧开始获取第几个元素 |
lrem key count value | 删除key中count个value值 |
ltrim key start end | 从左侧开始连续删除几个元素 |
rpoplpush key1 key2 | 将key1的值右侧弹出,压入key2的左侧 |
linsert key before/after value1 value2 | 从左侧开始在value1的前面/后面插入value2 |
set类型
命令 | 特点 |
---|---|
sadd | 插入数据 |
smembers | 获取数据 |
sismenber | 查看数据是否存在 |
srem | 删除数据 |
spop | 随机出栈 |
hash类型
命令 | 特点 |
---|---|
hget | 获取指定字段的值 |
hgetall | 获取指定key所有字段和值 |
hkeys | 获取所有哈希表的字段 |
hlen | 获取指定Key的字段数量 |
hmget | 获取多个 |
hset/hsetnx/hmset | 插入数据 |
Zset类型
命令 | 特点 |
---|---|
zadd key score1 member1… | 向有序集合添加成员和分数,同分数内成员排序 |
zcard | 获取成员数 |
zcount | 计算指定区间分数的成员数 |
zrem key member… | 移除有序集合的成员 |
5 redis持久化
- rdb(save)
- Redis database,在指定的时间间隔内将内存中的数据集快照写入磁盘(()snapshot快照),它恢复时将快照文件直接读到内存里
- 通过rdb的持久化文件dump.rdb保存当前数据库数据,该文件自动生成在当前linux用户的家目录中
- 当关闭redis服务的时候会自动完成一次持久化写入dump.rdb文件
- 配置文件redis.conf中默认设置为,900s改变1个key,300s改变10个key,60s改变10000个key时,会执行一次save命令提交持久化保存命令
- 常规设置: 一分钟1万次,5分钟10次,15分钟1次时,提交save命令
- 如何触发备份
- save命令是原子性,执行时会生成fork阻塞前台主进程操作,可能会丢失前台最后一次的修改
- bgsave命令是后台异步备份
- flush命令会生成备份文件,但不会备份当前数据,相当于回到初始状态并保存
- 如何恢复备份
将备份文件(dump.rdb)移动到redis安装目录并启动服务 - aof(rewrite)
append on file,以日志形式保存历史所有的操作过程,需要恢复时,直接replay日志文件即可还原所有操作,将“操作 + 数据”以格式化指令的方式追加到操作日志文件的尾部
- 优点: 更高的数据完整性,如设置追加file时间为1s,则故障时最多丢失1s的操作数据
- 缺点: 文件比rdb要大,恢复速度要慢,磁盘IO开支更高
- 默认关闭AOF功能,通过修改redis.conf配置文件appendonly yes生效
- 配置文件中指定aof日志名称appendfilename appendonly.aof
- 配置文件中指定触发rewrite的最小文件尺寸auto-aof-rewrite-min-size 64mb(建议512mb)