Redis入门_redis菜鸟教程

大家好,又见面了,我是你们的朋友全栈君。

文章目录

一、Redis概述

  1. 概念

Redis是用C语言开发的一个开源的高性能基于内存运行的键值对NoSQL数据库

  1. 特征

(1) 支持数据的持久化,可以将数据保存在磁盘中,重启之后可以再次加载到内存中使用 (2) 支持多种数据类型,除了KV类型的数据,还支持list、set、hash等数据结构 (3) 支持master-slave模式的数据备份

二、Redis应用场景

  1. 热点数据加速查询(主要场景),如热点商品、热点信息等访问量较高的数据
  2. 即时信息查询,如公交到站信息、在线人数信息等
  3. 时效性信息控制,如验证码控制、投票控制等
  4. 分布式数据共享,如分布式集群架构中的session分离消息队列

三、Redis的下载和安装

  1. 去官网下载redis-3.0.4.tar.gz安装包,并放入Linux中的/opt目录
  2. 在/opt目录下,执行解压命令tar -zxvf redis-3.0.4.tar.gz
  3. 解压完成后出现文件夹redis-3.0.4
  4. 进入文件夹redis-3.0.4,在此目录下执行make && make install命令
  5. 进入默认安装目录cd /usr/local/bin,此目录中有如下文件

四、Redis服务的启动

  1. 修改redis配置文件,vim /opt/redis-3.0.4/redis.conf

  1. 启动redis服务,cd /usr/local/bin,执行redis-server /opt/redis-3.0.4/redis.conf
  2. 查看服务是否启动,ps aux | grep redis-server

五、Redis命令行工具

六、Redis基础知识

  1. Redis采用单线程机制进行工作
  2. Redis默认拥有16个数据库,数据库编号从0开始,默认使用0号数据库
  3. 使用select 数据库编号 可以切换使用的数据库
  4. dbsize 命令查看当前数据库key的数量
  5. keys * 命令查看当前数据库所有的key
  6. flushdb 命令清空当前数据库
  7. flushall 命令清空所有数据库
  8. Redis中所有数据库使用同一个密码,默认没有密码,Redis认为安全层面应该由Linux来保证
  9. Redis中所有索引都是从0开始
  10. 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>;是一个键值对集合;适合存储对象

  1. 单指令与多指令的选择

对于setmset两个指令,应该使用哪一个由具体的业务场景决定

(1) set指令的执行过程

set指令发送给Redis服务器需要一个网络时间;Redis服务器执行该指令需要一个处理时间; Redis服务器将结果返回需要一个网络时间;故需要2个网络时间 + 1个处理时间

(2) 使用set存储n个值

n个网络时间(发送) + n个处理时间(处理) + n个网络时间(返回)

(3) 使用mset存储n个值

1个网络时间(发送) + n个处理时间(处理) + 1个网络时间(返回)

注:每次携带的数据增多,网络时间会相应的延长

综上所述,当需要处理的数据较少时,使用单指令;当处理的数据较多时,使用多指令

八、Redis常用查询指令

九、Jedis的使用

  1. 首先需要在redis.conf配置文件中修改配置,需要重启Redis服务方可生效

  1. 修改之后,必须指定绑定的主机地址方可使用Redis

  1. 开放6379端口

  1. 创建Java项目并导入jar包

  1. src目录下创建redis.properties配置文件
#最大连接数
redis.maxTotal=50
#默认开启的活跃连接数
redis.maxIdel=10
#Linux的ip地址
redis.host=192.168.200.130
#redis的端口号
redis.port=6379
  1. 创建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();
}
}
  1. 创建测试类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();
}
}

  1. Linux中进行测试

十、Redis可视化工具

  1. 安装软件

  1. 运行软件

十一、持久化概念

  1. 意外断电或重启之后,内存中的数据将会丢失,故应当将内存中的数据保存在磁盘中
  2. 概念

利用磁盘等将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化

  1. 持久化的两种方式

(1) 快照

将某个时间点的工作状态保存下来,恢复时可直接恢复指定时间点的工作状态

Redis中这种方式称为RDB

(2) 日志

将对数据的所有操作过程记录下来,恢复数据时重新执行这些操作

Redis中这种方式称为AOF

十二、RDB

  1. 对redis.conf配置文件进行修改 (修改配置文件后需要重启Redis)

(1) 修改内存中数据保存的文件的名称,默认值为dump.rdb

(2) 修改rdb文件保存的目录

  1. 执行save指令即可将内存中的数据保存到/opt/redis-3.0.4/目录的dump.rdb文件中
  2. 再次启动redis服务即可自动读取rdb文件中的数据并加载到内存
  3. save指令工作原理

Redis是单线程的,故执行save指令会阻塞其之后的命令的执行(可能多人操作同一个Redis 服务器),如果要保存的数据较多时,会导致之后的命令长时间阻塞,故一般不使用save指令

  1. bgsave指令可以让保存操作在后台执行,让redis服务可以继续执行其之后的指令,使用较多
  2. bgsave指令工作原理

  1. 配置自动保存 (修改配置文件后需要重启Redis)

  1. 自动保存方式的注意点

(1) get操作没有导致key发生变化 (2) 对存在的key修改才算发生变化 (3) set k1 v1,set k1 v1认为key的值发生变化 (4) 配置方式执行的是bgsave指令

  1. RDB两种指令的对比

十三、AOF

  1. RDB缺点

(1) 基于快照思想,每次读写都是全部数据,当数据量较大时,效率非常低 (2) 基于fork创建子进程,内存产生额外的消耗 (3) 宕机带来数据丢失风险(可能某个时间点的数据未保存)

  1. AOF概念

以日志的方式记录每次操作的命令,重启之后执行AOF中保存的命令恢复数据,较为主流

  1. 对redis.conf配置文件进行修改 (修改配置文件后需要重启Redis)

  1. AOF执行策略

(1) everysec (每秒)

每秒将缓冲区的指令写入aof文件中,宕机会丢失0-1秒的数据,性能高,建议使用

(2) always (每次)

每次执行指令都将其写入aof文件中,数据零失误,性能较低,不建议使用

(3) no (系统控制)

由操作系统控制写入aof文件的时间,不建议使用

注意:i. 只有使得key变化的指令才记录 ii. 重启之后自动从aof文件中读取指令并执行 iii. select指令虽然没有对key进行修改,但仍需记录,以知道数据存储的位置

十四、AOF重写

  1. 概念

AOF文件中已经记录的对同一数据的若干条操作的记录转换为数据最终结果对应指令的记录

  1. AOF重写作用

  1. 为防止数据量过大导致缓冲区溢出,合并后的每条指令最多写入64个元素
  2. AOF重写方式

(1) 手动重写,执行bgrewriteaof指令

(2) 自动重写,修改配置文件

十五、RDB与AOF的选择

  1. 对比

  1. 选择策略

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

原文地址:https://cloud.tencent.com/developer/article/2134596

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340