Redis基础知识入门

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

    在这里插入图片描述

  2. 开放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", "def");
        Long key1 = jedis.scard("key1");
        System.out.println("运行结果:" + key1);

        // 3.关闭连接
        jedis.close();
    }
}

在这里插入图片描述

  1. Linux中进行测试

    在这里插入图片描述

十、Redis可视化工具

  1. 安装软件

    在这里插入图片描述

  2. 运行软件

在这里插入图片描述

在这里插入图片描述

十一、持久化概念

  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指令工作原理

    在这里插入图片描述

  3. 配置自动保存 (修改配置文件后需要重启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://gaoqize.blog.csdn.net

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

相关推荐


文章浏览阅读752次。关系型数据库关系型数据库是一个结构化的数据库,创建在关系模型(二维表模型)基础上,一般面向于记录SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作主流的关系数据库包括Oracle、Mysql、SQL Server、Microsoft Access、DB2等非关系型数据库NoSQL(nOSQL=Not Only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型主流的NoSQ.._redis是非关系型数据库吗
文章浏览阅读687次,点赞2次,收藏5次。商城系统中,抢购和秒杀是很常见的营销场景,在一定时间内有大量的用户访问商场下单,主要需要解决的问题有两个:1. 高并发对数据库产生的压力;2. 竞争状态下如何解决商品库存超卖;高并发对数据库产生的压力对于第一个问题,使用缓存来处理,避免直接操作数据库,例如使用 Redis。竞争状态下如何解决商品库存超卖对于第二个问题,需要重点说明。常规写法:查询出对应商品的库存,判断库存数量否大于 0,然后执行生成订单等操作,但是在判断库存是否大于 0 处,如果在高并发下就会有问题,导致库存_php库存结余并发
文章浏览阅读1.4k次。MongoTemplate开发spring-data-mongodb提供了MongoTemplate和MongoRepository两种方式访问MongoDB,MongoRepository的方式访问较为简单,MongoTemplate方式较为灵活,这两种方式在Java对于MongoDB的运用中相辅相成。_springboot插入指定的mongodb数据库
文章浏览阅读887次,点赞10次,收藏19次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的特点是可以存储非结构化的数据,并且可以处理大量的数据。HBase是一个分布式、可扩展的列式存储系统,它是基于Google的Bigtable设计的。HBase是一个开源的NoSQL数据库,它的核心功能是提供高性能的随机读写访问。在本文中,我们将对比HBase与其他NoSQL数据库,例如Redis、MongoDB、Cass...
文章浏览阅读819次。MongoDB连接失败记录_edentialmechanisn-scram-sha-1
文章浏览阅读470次。mongodb抽取数据到ES,使用ELK内部插件无法获取数据,只能试试monstache抽取mongodb数据,但是monstache需要mongodb replica set 模式才能采集数据。############monstache-compose文件。#replicas set 启动服务。# 默认备份节点不能读写,可以设置。# mydb指的是需要同步的数据库。#登录主mongodb初始化rs。#primary 创建用户。# ip地址注意要修改。# ip地址注意要修改。_monstache csdn
文章浏览阅读913次,点赞4次,收藏5次。storage:fork: trueadmin登录切换数据库注意: use 代表创建并使用,当库中没有数据时默认不显示这个库删除数据库查看表清单> show tables # 或者 > show collections表创建db.createCollection('集合名称', [options])table1字段类型描述capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。_mongodb5
文章浏览阅读862次。Centos7.9设置MongoDB开机自启(超全教程,一条龙)_mongodb centos开机启动脚本
文章浏览阅读1.3k次,点赞6次,收藏21次。NoSQL数据库使用场景以及架构介绍
文章浏览阅读856次,点赞21次,收藏20次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的设计目标是为了解决传统关系型数据库(如MySQL、Oracle等)在处理大量不结构化数据方面的不足。NoSQL数据库可以处理大量数据,具有高性能、高可扩展性和高可用性。但是,与关系型数据库不同,NoSQL数据库没有固定的模式,数据结构也不一定是表格。在NoSQL数据库中,数据存储和查询都是基于键值对、列族、图形等不同的...
文章浏览阅读416次。NoSQL定义:非关系型、分布式、开放源码和具有横向扩展能力的下一代数据库。由c++编写的开源、高性能、无模式的基于分布式文件存储的文档型数据库特点:高性能、高可用性、高扩展性、丰富的查询支持、可替换已完场文档某个指定的数据字段应用场景:社交场景:使用mongodb存储用户信息游戏场景:用户信息,装备积分物流场景:订单信息,订单状态场景操作特点:数据量大;读写操作频繁;价值较低的数据,对事物性要求不高开源、c语言编写、默认端口号6379、key-value形式存在,存储非结构化数据。_nosql
文章浏览阅读1.5k次,点赞3次,收藏2次。Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket. at redis.clients.jedis.DefaultJedisSocketFactory.createSocket(DefaultJedisSocketFactory.java:110) at redis.clients.jedis.Connection.connect(Conne_redis.clients.jedis.exceptions.jedisconnectionexception: failed to create so
文章浏览阅读6.5k次,点赞3次,收藏12次。readAnyDatabase(在所有数据库上都有读取数据的权限)、readWriteAnyDatabase(在所有数据库上都有读写数据的权限)、userAdminAnyDatabase(在所有数据库上都有管理user的权限)、dbAdminAnyDatabase(管理所有数据库的权限);:clusterAdmin(管理机器的最高权限)、clusterManager(管理和监控集群的权限)、clusterMonitor(监控集群的权限)、hostManager( 管理Server);_mongodb创建用户密码并授权
文章浏览阅读593次。Redis是一个基于内存的键值型NoSQL数据库,在实际生产中有着非常广泛的用处_搭建本地redis
文章浏览阅读919次。Key 的最佳实践[业务名]:[数据名]:[id]足够简短:不超过 44 字节不包含特殊字符Value 的最佳实践:合理的拆分数据,拒绝 BigKey选择合适数据结构Hash 结构的 entry 数量不要超过 1000(默认是 500,如果达到上限则底层会使用哈希表而不是 ZipList,内存占用较多)设置合理的超时时间批量处理的方案:原生的 M 操作Pipeline 批处理注意事项:批处理时不建议一次携带太多命令。Pipeline 的多个命令之间不具备原子性。_redis高级实战
文章浏览阅读1.2k次。MongoDB 递归查询_mongodb数据库 递归
文章浏览阅读1.2k次。通过实际代码例子介绍:如何通过MongoTemplate和MongoRepository操作数据库数据_springboot操作mongodb
文章浏览阅读687次,点赞7次,收藏2次。首先欢迎大家阅读此文档,本文档主要分为三个模块分别是:Redis的介绍及安装、RedisDesktopManager可视化工具的安装、主从(哨兵)模式的配置。_redis 主从配置工具
文章浏览阅读764次。天下武功,无坚不摧,唯快不破!我的名字叫 Redis,全称是 Remote Dictionary Server。有人说,组 CP,除了要了解她外,还要给机会让她了解你。那么,作为开发工程师的你,是否愿意认真阅读此心法抓住机会来了解我,运用到你的系统中提升性能。我遵守 BSD 协议,由意大利人 Salvatore Sanfilippo 使用 C 语言编写的一个基于内存实现的键值型非关系(NoSQL)..._redis 7.2 源码
文章浏览阅读2k次。MongoDB 的增删改查【1】_mongodb $inc