五种数据类型

Redis是一个基于内存的数据库。是一个key-value的数据库,key一般是String类型,value的类型多种多样。

字符串String

SET name zhangxiancheng
//redis中默认都是使用字符串来存储数据的
DEL key//删除
EXISTS key//是否存在
KEYS *//所有键

redis中的键和值都是以二进制的形式存储的。

TTL key//Time To Live查看键的过期时间,-1表示没有设置过期时间,-2表示过期
EXPIRE key 10//设置过期时间10秒
SETEX key 10 value//设置键值对并设置过期时间

列表List

有序(插入顺序)可重复,类似数组。可以使用LPUSH或RPUSH将元素添加到列表的头部或者尾部

使用LPOP或RPOP从列表的头部或者尾部删除元素。

//增加元素
LPUSH listname value...
LPUSH listname a b c d e
//获取列表内容
LRANGE listname start stop//start起始位置;stop结束位置,为-1时表示最后一个元素
//删除元素
LPOP listname num//num删除个数
//列表长度
LLEN listname
//修剪
LTRIM listname start stop//只保留start到stop之间的元素


上述命令可以用来实现一个简单的消息队列,LPUSH——RPOP就实现了一个最简单的先进先出队列

集合Set

无序不重复

//增加元素
SADD setname value...
//获取列表
SMEMBERS setname
//元素是否存在
SISMEMBER setname value
//删除元素
SREM setname value
//支持集合运算
//sinter交集
SINTER setname1 setname2
//sunion并集
SUNION setname1 setname2

有序集合ZSet

有序不重复,member必须唯一

//增加元素
ZADD setname [score member]...
ZADD setname 680 清华 660 北大
//获取有序列表
ZRANGE setname 0 -1
北大
清华
ZRANGE setname 0 -1 WITHSCORES
北大
660
清华
680
//查看某个元素的分数
ZSCORE setname member
//查看排名(索引)(从小到大)
ZRANK setname member
//查看排名(从大到小)
ZREVRANK setname member
//删除元素
ZREM setname member

哈希Hash

是一个key和value的映射表(或者说集合),适合存储对象。

//增加元素
HSET key [field value ]...
HSET person name xiancheng
HSET person age 18
//获取属性名对应的属性值
HGET key field
HGET person name
//获取所有键值对(成对)
HGETALL key
//删除某个键值对
HDEL key field
HDEL key name
//判断某个键值对是否存在
HEXISTS key field
//获取所有键
HKEYS key
//获取键值对数量
HLEN key

发布订阅功能

publish发布频道和subscribe订阅频道

publish 频道 消息

事务

在一次请求中执行多个命令。

持久化(重要)

没有持久化的话,一旦服务器重启或断电,之前所有数据就会丢失。分为RDB方式和AOF方式。

RDB(Redis Database)

指在指定时间间隔内将内存中的数据快照(某个时间点上数据的完整副本)写入磁盘文件dump.rdb中,redis.conf配置文件中有三种默认配置:


rdb文件适合作为备份。在备份过程中redis处于阻塞的状态,不能接受任何请求。虽然使用bgsave命令可以创建一个子进程负责将数据写入到硬盘中,让主进程继续处理请求,但是该过程存在一定的性能损耗,在创建子进程的时间内redis还是不能处理任何请求,无法做到秒级别的快照。

AOF(Append Only File)

Append Only File追加文件。解决RDB的缺点。

在执行写命令的时候,不仅会将命令写入内存中,还会将命令追加到一个追加的aof文件中。它会以日志的形式记录每一个写操作,当Redis重启的时候就会通过重新执行aof文件中的命令,在内存中重建整个数据库的内容。

配置文件中将appendonly no改为appendonly yes即可。

主从复制(读写分离)

是指将一台Redis服务器(主节点master)上的数据复制到其他Redis服务器(从节点slave)上,是一对多。

单向复制,一般主节点负责写操作,从节点负责读操作(读写分离)。

主节点会将自己的数据变化通过异步的方式发送给从节点,从节点接收数据之后更新自己的数据。

配置

复制redis.conf,命名redis-6380.conf

修改配置文件中端口号port为指定端口号(6380);把pidfile(进程ID)这个配置项也改成指定端口号(redis-6380.pid);dbfilename也加上端口号(dump-6380.rdb);找到replicaof配置项,复制注释,指定主节点(replicaof host port)。启动从节点,主节点的数据在从节点上也能看到。之后若要再增加从节点,则复制6380配置文件,将所有6380替换为6381即可。

哨兵模式

刚才搭建了一个一主两从的Redis集群,实现了一定程度上的高可用,但是这个集群存在一些问题。主节点宕机,需要手工将一台从节点提升为主节点。

因此需要一个自动的故障转移,Redis哨兵模式解决此问题。

哨兵以独立的进程运行在Redis集群中,监控Redis集群中的各个节点是否正常运行。

哨兵也可能存在故障的问题,所以生产中会使用三个哨兵节点保证高可用,哨兵集群会通过选举的方式选出一个领导者,由领导者监控其他节点。

功能:

1、监控:不断发送命令检查Redis节点是否正常。

2、通知:发现某节点出现问题,哨兵会通过发布订阅模式通知其他节点。

3、自动故障转移:主节点宕机,哨兵会将一个从结点升级为新的主节点,再讲其他从结点指向新的主节点。

配置:

在Redis集群中添加一个哨兵节点,新建sentinel.config文件

centinel monitor master host port 1//1表示只需要一个哨兵结点同意就可故障转移

启动哨兵结点:redis -sentinel sentinel.conf