1. Redis介绍

Redis是一种非关系型数据库
Redis是使用c语言开发的一个高性能键值数据库,它可以通过一些键值类型来存储数据
键值类型:
String 字符类型 商品编号,订单号(主键,自增)
hash 散列类型 用户信息,商品信息(易修改)
list 列表类型 评论信息(不修改,查询块)
set 集合类型 求并集,交集,差集(无序,不重复)
sortedset 有序集合类型 分值(排名,销量)

2.Redis应用场景

缓存(数据查询、短连接、新闻内容、商品内容)
分布式集群中的session分离
聊天室的在线好友列表
任务队列(秒杀,抢购,12306)
应用排行榜
网站访问统计
数据过期处理(可以精确到毫秒)

3.Redis安装

wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar -xzf redis-5.0.3.tar.gz
cd redis-5.0.3
make 编译redis源码(C语言)
src/redis-server --daemonize yes
src/redis-cli
redis> set foo bar
OK
redis> get foo
“bar”

4.redis启动关闭

(1)将redis源码包下redis.conf 拷贝到src目录 cp redis.conf src/
(2)修改redis.conf 将daemonize=yes 将bind=0.0.0.0(redis-server默认开放的是127.0.0.1,改成0.0.0.0才可以被其他机器访问)
(3)启动redis:./redis-server redis.conf
(4)验证redis:ps -aux | grep redis
(5)防火墙开放端口:firewall-cmd --zone=public --add-port=6379/tcp --permanent 重启防火墙生效:service firewalld restart
(6)关闭redis:./redis-cli shutdown

redis es 是什么_键值对

5.Redis的五种数据结构

1)STRING(字符串、整数、浮点型)
set str-key 值;get str-key;del str-key
getset str-key 值:设置新值,返回旧值。
mset/gset:设置/获取多个键值
incr/decr str-key:递增/递减 ;incrby/decrby str-key 2:指定递增/递减
append str-key 字符串:在末尾追加字符串,键不存在则相当于set
strlen str-key :返回值的长度,键不存在返回0
2)LIST(列表里面的元素是可以重复的,有序)
LPUSH/RPUSH 将值推入左/右端,LPOP/RPOP 从列表左/右端弹出一个值(被弹出的值将不在存在于列表)
LRANGE list-key 0 -1取出范围的所有元素 ,LINDEX list-key 索引值 取出指定索引值 llen list-key:列表个数
LREM list-key count value:count>0 从左边删除count个等于value的值,count<0 从右边删除count个等于value的值,count=0删除全部等于value的值
lset list-key index value:设置指定索引值
3)SET(集合中的元素各不相同,无序)
SADD 将元素添加到集合,SMEMBERS 返回集合所有元素,SCARD获取元素个数,SISMEMBER 检查元素是否存在于集合,SREM 删除给定的元素,SPOP随机弹出一个元素
SDIFF s1 s2:属于s1不属于s2的元素集合
SINTER s1 s2:属于s1且属于s2的元素集合
SUNION s1 s2:属于s1或属于s2的元素集合
4)HASH(散列)
hset hash-key 键1 值1:在散列里面关联起给定的键值对
hget hash-key 键1:获取指定散列键的值
hgetall hash-key:获取散列包含的所有键值对
hdel hash-key 键1:移除指定的键值对
hmset/hmget:设置/获取多个值
hincrby:只有这一个数字操作方法
hexists hash-key 键1:0不存在,1存在
hkeys/hvals hash-key:获取所有键/值
hlen hash-key:获取字段数量
5)ZSET(有序集合的键被称为成员,值被称为分值,分值必须为浮点数,且唯一)
zadd zset-key 分值 成员名 添加有序集合元素
zrange/zrevrange zset-key 0 -1 withscores 获取所有元素,并按照分值从小到大/从大到小进行排序
zrangebyscore zset-key 0 800 withscores 按照分值获取一部分元素
zrem zset-key 成员名 移除指定成员名的元素
zrank zset-key 成员名:获取成员排名
zincrby z1 increment 成员名:增加指定成员分数

6.keys常用命令

keys *:返回所有key
exists key:确认key是否存在
del key:删除一个key
rename oldkeyname newkeyname:重命名一个key
type key:返回key的数据类型
expire key seconds: 设置key生存时间秒
ttl key:查看key剩余的生存时间
persist key:清除key的生存时间
pexpire key milliseconds:设置key生存时间毫秒

7.redis持久化方案

RDB快照(snapshotting)
save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存
save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存
save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存
RDB的优势:
●RDB保存redis在某个时间点上的数据集,这种文件非常适合用于进行备份和灾难恢复
●生成RDB文件时,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘操作
●RDB在恢复大数据集时的速度比AOF的恢复速度要快
RDB的劣势:
●RDB方式没法做到实时持久化/秒级持久化。bgsave每次运行都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高
●RDB文件使用特定二进制格式保存,存在与老版本Redis服务无法兼容问题
●在一定间隔时间做一次备份,redis异常关闭,会丢失最后一次快照后的所有修改,数据有丢失。
AOF(append-only-file)
appendonly yes 开启AOF持久化方式
appendfsync no:不执行fsync,由操作系统保证数据同步到磁盘,速度最快,但是不安全
always:表示每次写入都执行fsync,以保证数据同步到磁盘,效率很低
everysec:表示每秒执行一次fsync,可能会导致丢失这1s数据。通常选择everysec,兼顾安全性和效率
no-appendfsync-on-rewrite yes:表示rewrite期间对新写操作不fsync,暂存在内存中,等rewrite完成后再写入,建议yes。Linux默认fsync策略是30秒,可能丢失30秒数据
auto-aof-rewrite-percentage:默认100.当目前aof文件超过上一次重写的aof文件大小的百分之多少进行重写100就是2倍。
auto-aof-rewrite-min-size:64mb。设置允许重写的最小aof文件大小
AOF文件重写不是对原文件进行重新整理,而是直接读取服务器现有的键值对,然后用一条命令去代替之前记录这个键值对的多条命令,生生一个新的文件替换原来的AOF文件
AOF优点:
●aof持久化的方法提供了多种同步频率,即使使用默认同步频率最多也就丢失1秒数据
●aof文件使用redis命令追加的形式构造,即使redis只能向aof文件写入命令的片段,使用redis-check-aof工具也很容易修正aof文件
异常修复命令:redis-check-aof --fix
●aof文件格式具有可读性,在重写没进行之前我们可以将错误命令去掉。
aof缺点:
●具有相同数据的Redis,aof文件通常比rdf文件体积更大
●在redis负载较高时,rdb比aof具有更好的性能保证
●rdb比aof方式更健壮,存在一些未知bug
建议:一般情况下两种一起用,当redis重启的时候会优先载入aof文件来恢复原始数据。通常aof文件保存的数据集比rdb文件保存的数据集更完整。

8.redis主从复制

bind : 配置可以进行访问的ip,为了方便使用,直接使用0.0.0.0(但是可能存在安全问题).
port :配置当前配置启动的Redis的端口.
daemonize <yes/no>:配置是否启用后台进程.
pidfile </var/run/redis_6379.pid>:使用后台进程配置后会生成一个pid文件.一般值修改端口名.
logfile “6379.log”:日志文件,用于记录日志,一般也为端口名.
replicaof :配置从库的主从关系(5.0之前为slaveof),主库不需要此配置.
replica-read-only <yes/no>:配置从库是否为只读.
主机:不需要配置
从机:1.复制一份src目录
2.修改配置文件redis.conf。 port、 replicaof(5.0之前为slaveof)
3.删除复制主机的持久化文件,dump.rdb,appendonly.aof,开放防火墙端口,重启防火墙,开启redis从机服务
4.主机发生增删改操作,数据会自动同步到从机,从机只能读不能写
在主机客户端输入info replication查看主从库信息

Nosql数据库扩展知识:

1.什么是NoSQL(Not Only SQL 非关系型数据库)
为了解决高并发,高可用,高可扩展,大数据存储等一系列问题而产生的数据库解决方法,就是NoSQL,
它不能代替关系型数据库,只能作为关系型数据库的一个良好补充。
2.NoSql的分类
1> 键值(key-value)存储数据库
相关产品:Redis,Tokyo Cabinet/Tyrant ,Voldemort, Berkeley DB
典型应用:内容缓存,主要用于处理大量数据的高访问负载
数据模型:一系列键值对
优势:快速查询
劣势:存储的数据缺少结构化
2> 列存储数据库
相关产品:Cassandra,Hbase,Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快、可扩展性强、更容易进行分布式扩展
功能相对局限
3> 文档型数据库
相关产品:CouchDB,MongoDB
典型应用:Web应用(与key-value类似,Value是结构化的)
数据模型:一系列键值对
优势:数据结构要求不严格
劣势:查询性能不高,而且缺乏统一的查询语法
4> 图形数据库
相关数据库:Neo4J,InfoGrid,Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案