Redis服务
[TOC]
简介
- 用
c语言
开发的一个开源的、高性能键值对
数据库
- 是
内存数据库
,即数据库的内容存储在内存
中 - 内存数据库的
读写效率
比传统数据库快的多、但易丢失 - 为解决丢失,Redis提供将内存数据库
持久化
到硬盘, 恢复时将数据直接直接写入磁盘
- 官方提供的测试数据
- 50个并发执行100000个请求
- 读的速度是110000次/s
- 写的速度是81000次/s
- 学习网站:
- 官网:https://redis.io
- 中文网:http://www.redis.net.cn/
Redis 与 MySQL
- 并非
对立
而是互补
- 通常情况下: 使用关系型数据库 + 适合时: 使用NoSQL数据库
数据存储
在关系型数据库中、缓存
在NoSQL数据库中
Redis 作 缓存服务器
- 原理
- 把表中经常访问的记录放在Redis中
- 在用户查询时先查询Redis、再去查询MySQL,实现了读写分离
- 过程:判断从Redis中查询的结果
- 如果非空,则证明Redis中有记录,直接查缓存
- 如果是空,则证明Redis中无记录,先从数据库中查、存Redis、再返回数据
- 缓存的数据
√
Redis常用来缓存一些数据不经常发生变化的数据
×
数据库的数据一旦发生改变,则需要更新缓存
- 数据库表执行增删改的相关操作时,需要将数据重新写入Redis;
- 在代码的对应的增删改方法中,将Redis数据删除
Redis持久化
模式
- RDB快照模式(snapshotting)——> 默认开启
- 优势:
- RDB是一个非常紧凑的文件,保存了在
某个时间点
上的数据 - Redis会创建
单独子线程
来处理保存工作、恢复速度快 - 劣势:
不能实时
持久化,因为bgsave每次运行时会创建子进程、重量级操作二进制文件
保存,Redis升级过程中RDB格式较多、不兼容- 在一定时间间隔备份,
意外宕机会丢失数据!!
- AOF模式(Append-Only-File)
- 优势:
- AOF提供了
多种同步频率
,默认是每秒同步一次 - AOF文件采用
Redis命令追加
形式来构造 - AOF文件的格式可读性强、cat可看
- 劣势:
- 相同数据时,AOF文件比RDB文件体积更大、现提供了重写功能
- 默认是每秒同步一次,负载较高时性能较差
选择
- 如果能忍受一小段时间内数据丢失时,采用RDB
- 一般不建议单独使用一种持久化机制、而是两种一起用
Redis主从
- 同步实现流程
- 从服务器向主服务器发出同步数据的请求
- 主服务器本地执行bgsave命令、将现有数据全部生成快照
- 主服务器把快照发送给从服务器
- 从服务器载入快照、恢复数据,即拥有了主服务现有数据
- 当主服务有新数据时,会发送缓存命令
- 从服务器执行该命令、获取新数据
相关参数
属性 | 参数 |
端口号 | 6379 |
配置文件模板 | 解压目录/redis.conf |
启动方式 | 安装目录/bin/redis-server 配置文件 |
登录方式 | 安装目录/bin/redis-cli 选项 |
数据存储结构 | 键值对 (key-value) |
支持的数据类型 | String、List、Set、Zset (Sorted Set)、hashes |
Redis命令
键命令
Redis 键命令用于管理 Redis 的键。
命令 | 描述 |
KEYS * | 查找所有符合给定模式的 key |
EXISTS key | 检查给定 key 是否存在 |
TYPE key | 返回 key 所储存的值的类型 |
DEL key | 用于删除 key |
String 命令
Strings(字符串)结构是 Redis 的基本数据类型,值value是字符串类型,常用命令:
命令 | 描述 |
SET key value | 设置指定 key 的值 |
GET key | 获取指定 key 的值 |
MSET key value [key value …] | 同时设置一个或多个 key-value 对 |
MGET key1 [key2..] | 获取所有(一个或多个)给定 key 的值 |
Hash 命令
Hash(哈希散列)是 Redis 基本数据类型,值value 中存储的是 hash 表。当中是一个 field(字段) 和 value(值) 的映射表。每个 hash 可以存储 232 - 1 键值对(40多亿)。
Hash 特别适合用于存储对象。常用的命令:
命令 | 说明 |
HSET key field value | 用于设置存储在 key 中的哈希表字段的值 |
HGET key field | 获取存储在哈希表中指定字段的值 |
HMSET key field1 value1 [field2 value2] | 同时将多个 field-value (域-值)对设置到哈希表 key 中 |
HMGET key field1 [field2] | 获取所有给定字段的值 |
HGETALL key | 获取在哈希表中指定 key 的所有字段和值 |
HDEL key field1 [field2] | 用于删除哈希表中一个或多个字段 |
List 命令
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的
头部(左边)
或者 尾部(右边)
命令 | 描述 |
LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
RPUSH key value1 [value2] | 在列表最后添加一个或多个值 |
LPOP key | 移出并获取列表的第一个元素 |
RPOP key | 移除并获取列表最后一个元素 |
LRANGE key start stop | 获取列表指定范围内的元素 (所有为0到-1) |
LLEN key | 获取列表长度 |
LREM key count value | 移除列表元素 |
LSET key index value | 通过索引设置列表元素的值 |
LINDEX key index | 通过索引获取列表中的元素 |
Set 命令
Redis 的 Set 是 String 类型的
无序集合
。集合成员是唯一的,这就意味着集合中 不能出现重复
的数据。命令 | 描述 |
SADD key member1 [member2] | 向集合添加一个或多个成员 |
SREM key member1 [member2] | 移除集合中一个或多个成员 |
SMEMBERS key | 返回集合中的所有成员 |
SPOP | 移除并返回集合中的一个随机元素 |
Zset 命令
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的
分数
。Redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
命令 | 描述 |
ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
ZREM key member1 [member2] | 移除有序集合中的一个或多个成员 |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合成指定区间内的成员 |
ZSCORE key member | 返回有序集中,成员的分数值 |