Redis基础知识入门
Redis快速入门
博主关于Redis高级特性的一些讲解,传送地址如下:
删除策略与淘汰策略详解
主从复制详解
哨兵模式详解
集群详解
缓存预热 & 缓存雪崩 & 缓存击穿 & 缓存穿透
五大数据类型的应用场景
事务
布隆过滤器详解
文章目录
- 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 *
命令查看当前数据库所有的keyflushdb
命令清空当前数据库flushall
命令清空所有数据库Redis中所有数据库使用同一个密码,默认没有密码,Redis认为安全层面应该由Linux来保证
Redis中所有索引都是从0开始
Redis默认端口是6379
七、Redis数据类型
1. key (键)
Redis有五大数据类型:String、List、Set、Zset、Hash
注意: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的选择
- 对比
- 选择策略
Redis基础知识入门相关推荐
- swift5.x基础知识入门
swift5.x基础知识入门 源码在我的主页下,欢迎下载,我非常喜欢swift和oc的语法,两者相似,我坚信天下没有学不会的技术. 基本介绍 ///这里只介绍一些初学swift的基本概念,需要提前了解 ...
- 学习笔记:Java 并发编程①_基础知识入门
若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...
- GIS地图基础知识--入门教程
wenzhanhttp://www.gisbbs.net/viewthread.php?tid=106&extra=page%3D1 GIS地图基础知识--入门教程 GIS 地 图 知 识 1 ...
- C语言基础知识入门和C语言入门基础知识大全
一.C语言基础知识入门 C语言一出现,就以其丰富的功能.强大的表达能力.灵活性.方便性和广泛的应用,在世界范围内迅速普及和普及.C语言不仅高效而且可移植.它可以用来开发应用软件.驱动程序.操作系统等. ...
- JavaScript 基础知识 - 入门篇(二)
11. 函数 11.1 函数的基础知识 为什么会有函数? 在写代码的时候,有一些常用的代码需要书写很多次,如果直接复制粘贴的话,会造成大量的代码冗余: 函数可以封装一段重复的javascript代码, ...
- R语言基础知识入门学习(一)
目录 系列文章目录 一.软件下载 二.基本知识 1. 对象 2. 向量 3. 向量化 4. 因子 总结 系列文章目录 R语言基础知识入门学习(一) 一.软件下载 我们可以通过这个网址对R语言软件进行下 ...
- 网络安全基础知识入门!网络安全学习教程
当我们学习网络安全的时候,需要对它的基础知识做一个简单的了解,这样对以后的学习和工作都会有很大的帮助.本篇文章为大家总结了网络安全基础知识入门的内容,快跟着小编来学习吧. 计算机网络 计算机网络是利用 ...
- 技术实践|Redis基础知识及集群搭建(上)
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.本篇文章围绕Redis基础知识及集群搭建相关内容进行了分享,希 ...
- 计算机网络建设中涉及到哪些硬件,网络基础知识入门
网络基础知识入门 导语:随着计算机的广泛应用和网络的流行,我们应该要知道一些网络基础知识,下面是小编收集整理的网络基础入门知识,欢迎参考! 计算机网络是什么 这是首先必须解决的一个问题,绝对是核心概念 ...
最新文章
- 股市币市:数据分析与交易所公告(20190225)
- Mysql性能优化方案
- Java中是否可以继承String类,为什么
- hdu 4417(树状数组+离线算法)
- c语言中open函数r,C语言中open函数
- 思岚科技受邀2018高交会 携多项“黑科技”亮相
- 理解 .NET 2015
- Centos之常用命令
- Computer Hardware ID(CHID)及驱动推送
- 魔方怎么更改计算机名,软媒魔方怎么通过设置向导进行设置
- 初级计算机硬件试题,初级计算机考试题库
- HDU - 4960 Another OCD Patient 记忆化
- Java的API(Scanner\Object\Date区\Math\Random\Arrays\String区\regex\包装类...)一般是parse(String)
- sql语句进阶教程(学习sql这一篇就够了)
- iOS 9-iPhone6s-iPadmini4企业证书信任
- 软件测试怎么学?如何系统学习软件测试?
- 手眼标定算法---Navy算法(Robot sensor calibration: solving AX=XB on the Euclidean group)
- png 微软ppt 透明度,教你一招永久搞定PPT导出高清图片的小技巧
- 旧版本Microsoft Office正在配置解决方法
- 60分钟快速掌握RabbitMQ,java面试技巧和注意事项
热门文章
- 三代i5 CPU、H61主板使用傲腾记录
- 链路聚合以及生成树(STP)
- 为什么光标停在表格中间_excel中单元格中的光标为什么总在中间位置_word光标怎么设置...
- 叉乘计算公式几何推导
- 中国人民银行和公安部的联网核查公民身份信息系统存在bug
- FireFox浏览器缓存路径设置
- 计算机开机白屏怎么处理,电脑开机白屏怎么办,请各位大虾帮帮忙
- slam、planning、localization等相关的机器人博客、网站、github等资源汇总(持续更新)
- brook协议_SilverbrookResearch与Memjet的协议
- 被指同组抄袭!南大计算机这篇GAN论文引争议