大家好,又见面了,我是你们的朋友全栈君。
文章目录
- Redis快速入门
- 一、Redis概述
- 二、Redis应用场景
- 三、Redis的下载和安装
- 四、Redis服务的启动
- 五、Redis命令行工具
- 六、Redis基础知识
- 七、Redis数据类型
- 1. key (键)
- 2. String (字符串)
- 3. List (列表)
- 4. Set (集合)
- 5. Zset (有序集合)
- 6. Hash (哈希)
- 八、Redis常用查询指令
- 九、Jedis的使用
- 十、Redis可视化工具
- 十一、持久化概念
- 十二、RDB
- 十三、AOF
- 十四、AOF重写
- 十五、RDB与AOF的选择
一、Redis概述
- 概念
Redis是用C语言开发的一个开源的高性能基于内存运行的键值对NoSQL数据库
- 特征
(1) 支持数据的持久化,可以将数据保存在磁盘中,重启之后可以再次加载到内存中使用 (2) 支持多种数据类型,除了KV类型的数据,还支持list、set、hash等数据结构 (3) 支持master-slave模式的数据备份
二、Redis应用场景
- 热点数据加速查询(主要场景),如热点商品、热点信息等访问量较高的数据
- 即时信息查询,如公交到站信息、在线人数信息等
- 时效性信息控制,如验证码控制、投票控制等
- 分布式数据共享,如分布式集群架构中的session分离消息队列
三、Redis的下载和安装
- 去官网下载redis-3.0.4.tar.gz安装包,并放入Linux中的/opt目录
- 在/opt目录下,执行解压命令tar -zxvf redis-3.0.4.tar.gz
- 解压完成后出现文件夹redis-3.0.4
- 进入文件夹redis-3.0.4,在此目录下执行make && make install命令
- 进入默认安装目录cd /usr/local/bin,此目录中有如下文件
四、Redis服务的启动
- 修改redis配置文件,
vim /opt/redis-3.0.4/redis.conf
- 启动redis服务,
cd /usr/local/bin
,执行redis-server /opt/redis-3.0.4/redis.conf
- 查看服务是否启动,
ps aux | grep redis-server
五、Redis命令行工具
六、Redis基础知识
- Redis采用单线程机制进行工作
- Redis默认拥有16个数据库,数据库编号从0开始,默认使用0号数据库
- 使用
select 数据库编号
可以切换使用的数据库 -
dbsize
命令查看当前数据库key的数量 -
keys *
命令查看当前数据库所有的key -
flushdb
命令清空当前数据库 -
flushall
命令清空所有数据库 - Redis中所有数据库使用同一个密码,默认没有密码,Redis认为安全层面应该由Linux来保证
- Redis中所有索引都是从0开始
- Redis默认端口是6379
七、Redis数据类型
1. key (键)
Redis有五大数据类型:String、List、Set、Zset、Hash
代码语言:javascript复制注意:Redis采用键值对存储数据,key永远是String类型,五大数据类型指的是value部分
2. String (字符串)
一个key对应一个value;String可以包含任何数据,比如jpg图片等;String是Redis最基本的 数据类型,一个String的value最大可支持512M
3. List (列表)
底层是一个字符串链表;可以从头或尾添加元素
注意:
(1) 添加元素时:
如果key不存在,创建新的链表 如果key已存在,添加内容 如果key的所有值全部删除,则对应的key也会随之消失
(2) 在链表的头尾操作时效率较高,但是对中间元素的操作效率较低
4. Set (集合)
底层通过HashTable实现;是String类型的无重复值的无序集合
5. Zset (有序集合)
类似Set;每个元素都会关联一个double类型的分数(score);Redis通过分数自动的为集合中的 成员进行从小到大的排序;成员不可重复,分数可以重复
6. Hash (哈希)
类似Java中的Map<String, Object>;是一个键值对集合;适合存储对象
- 单指令与多指令的选择
对于set
与mset
两个指令,应该使用哪一个由具体的业务场景决定
(1) set指令的执行过程
set指令发送给Redis服务器需要一个网络时间;Redis服务器执行该指令需要一个处理时间; Redis服务器将结果返回需要一个网络时间;故需要2个网络时间 1个处理时间
(2) 使用set存储n个值
n个网络时间(发送) n个处理时间(处理) n个网络时间(返回)
(3) 使用mset存储n个值
1个网络时间(发送) n个处理时间(处理) 1个网络时间(返回)
注:每次携带的数据增多,网络时间会相应的延长
综上所述,当需要处理的数据较少时,使用单指令;当处理的数据较多时,使用多指令
八、Redis常用查询指令
九、Jedis的使用
- 首先需要在redis.conf配置文件中修改配置,需要重启Redis服务方可生效
- 修改之后,必须指定绑定的主机地址方可使用Redis
- 开放6379端口
- 创建Java项目并导入jar包
- src目录下创建redis.properties配置文件
#最大连接数
redis.maxTotal=50
#默认开启的活跃连接数
redis.maxIdel=10
#Linux的ip地址
redis.host=192.168.200.130
#redis的端口号
redis.port=6379
- 创建Jedis的工具类JedisUtils
public class JedisUtils {
// 将从配置文件读取的配置信息赋予如下变量
private static int maxTotal;
private static int maxIdel;
private static String host;
private static int port; // 端口号为int类型
// Jedis的连接池配置
private static JedisPoolConfig jedisPoolConfig;
// Jedis连接池
private static JedisPool jedisPool;
static {
// 读取redis.properties配置文件
ResourceBundle bundle = ResourceBundle.getBundle("redis");
maxTotal = Integer.parseInt(bundle.getString("redis.maxTotal"));
maxIdel = Integer.parseInt(bundle.getString("redis.maxIdel"));
host = bundle.getString("redis.host");
port = Integer.parseInt(bundle.getString("redis.port"));
// Jedis连接池配置
jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal);
jedisPoolConfig.setMaxIdle(maxIdel);
jedisPool = new JedisPool(jedisPoolConfig, host, port);
}
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
- 创建测试类JedisTest
public class JedisTest {
public static void main(String[] args) {
// 1. 获取Jedis对象
Jedis jedis = JedisUtils.getJedis();
// 2. 执行操作,Jedis中操作的方法名与Linux中命令行工具中的指令同名
jedis.sadd("key1", "abc", "abc", "def");
Long key1 = jedis.scard("key1");
System.out.println("运行结果:" key1);
// 3.关闭连接
jedis.close();
}
}
- Linux中进行测试
十、Redis可视化工具
- 安装软件
- 运行软件
十一、持久化概念
- 意外断电或重启之后,内存中的数据将会丢失,故应当将内存中的数据保存在磁盘中
- 概念
利用磁盘等将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化
- 持久化的两种方式
(1) 快照
将某个时间点的工作状态保存下来,恢复时可直接恢复指定时间点的工作状态
Redis中这种方式称为RDB
(2) 日志
将对数据的所有操作过程记录下来,恢复数据时重新执行这些操作
Redis中这种方式称为AOF
十二、RDB
- 对redis.conf配置文件进行修改 (修改配置文件后需要重启Redis)
(1) 修改内存中数据保存的文件的名称,默认值为dump.rdb
(2) 修改rdb文件保存的目录
- 执行save指令即可将内存中的数据保存到/opt/redis-3.0.4/目录的dump.rdb文件中
- 再次启动redis服务即可自动读取rdb文件中的数据并加载到内存
- save指令工作原理
Redis是单线程的,故执行save指令会阻塞其之后的命令的执行(可能多人操作同一个Redis 服务器),如果要保存的数据较多时,会导致之后的命令长时间阻塞,故一般不使用save指令
- bgsave指令可以让保存操作在后台执行,让redis服务可以继续执行其之后的指令,使用较多
- bgsave指令工作原理
- 配置自动保存 (修改配置文件后需要重启Redis)
- 自动保存方式的注意点
(1) get操作没有导致key发生变化 (2) 对存在的key修改才算发生变化 (3) set k1 v1,set k1 v1认为key的值发生变化 (4) 配置方式执行的是bgsave指令
- RDB两种指令的对比
十三、AOF
- RDB缺点
(1) 基于快照思想,每次读写都是全部数据,当数据量较大时,效率非常低 (2) 基于fork创建子进程,内存产生额外的消耗 (3) 宕机带来数据丢失风险(可能某个时间点的数据未保存)
- AOF概念
以日志的方式记录每次操作的命令,重启之后执行AOF中保存的命令恢复数据,较为主流
- 对redis.conf配置文件进行修改 (修改配置文件后需要重启Redis)
- AOF执行策略
(1) everysec (每秒)
每秒将缓冲区的指令写入aof文件中,宕机会丢失0-1秒的数据,性能高,建议使用
(2) always (每次)
每次执行指令都将其写入aof文件中,数据零失误,性能较低,不建议使用
(3) no (系统控制)
由操作系统控制写入aof文件的时间,不建议使用
注意:i. 只有使得key变化的指令才记录 ii. 重启之后自动从aof文件中读取指令并执行 iii. select指令虽然没有对key进行修改,但仍需记录,以知道数据存储的位置
十四、AOF重写
- 概念
AOF文件中已经记录的对同一数据的若干条操作的记录转换为数据最终结果对应指令的记录
- AOF重写作用
- 为防止数据量过大导致缓冲区溢出,合并后的每条指令最多写入64个元素
- AOF重写方式
(1) 手动重写,执行bgrewriteaof指令
(2) 自动重写,修改配置文件
十五、RDB与AOF的选择
- 对比
- 选择策略
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。