Redis数据库详解

文章目录

  • Redis数据库
    • 1 Redis概述
      • 1.1 Redis介绍
      • 1.2 Redis特点
      • 1.3 应用场景
      • 1.4 Redis版本
      • 1.5 Redis附加功能
      • 1.6 Redis安装
        • 1.6.1 Rocky Linux操作系统
        • 1.6.2 Windows操作系统
        • 1.6.3 Mac操作系统
    • 2 配置文件详解
    • 3 数据类型
      • 3.1 字符串String
        • 3.1.1 字符串
        • 3.1.2 数值
      • 3.2 列表List
      • 3.3 Hash散列
      • 3.4 集合
      • 3.5 有序集合sortedset

Redis数据库

1 Redis概述

1.1 Redis介绍

​ Redis(Remote Dictionary Server)是一个开源的内存数据库,使用C语言编写,可基于内存亦可持久化,提供多种语言的API。它以其高性能、丰富的数据类型以及简单的单线程模型等特点而广受欢迎。

​ Redis提供了一个高性能的键值(key-value)存储系统,能够支持每秒数十万次的读写操作,因此特别适用于处理高并发请求和需要快速响应的场景,如缓存、会话管理、排行榜等。它支持多种数据结构,包括字符串、列表、哈希表、集合、有序集合等,为开发者提供了灵活的数据操作能力,可以适应各种不同的应用场景。

​ 此外,Redis还支持数据持久化,可以将内存中的数据异步地保存到硬盘上,防止数据在程序重启时丢失。

1.2 Redis特点

  • 开源的,使用C编写,基于内存且支持持久化
  • 高性能的Key-Value的NoSQL数据库
  • 支持数据类型丰富,字符串string,列表list,散列hash,集合set,有序集合sorted set
  • 支持多种编程语言(C C++ Python Java PHP … )

Redis数据库的诞生是为了解决磁盘IO带来的性能瓶颈

1.3 应用场景

  • 使用Redis来缓存一些经常被用到、或者需要耗费大量资源的内容,通过这些内容放到redis里面,程序可以快速读取这些内容
  • 一个网站,如果某个页面经常会被访问到,或者创建页面时消耗的资源比较多,比如需要多次访问数据库、生成时间比较长等,我们可以使用redis将这个页面缓存起来,减轻网站负担,降低网站的延迟,比如说网站首页等

1.4 Redis版本

  • 最新版本:6.0
  • 历史版本:2.4、2.6、2.8、3.0(里程碑)、3.2、3.4、4.0、5.0(教学环境版本)、6.0

1.5 Redis附加功能

  • 数据持久化

    将内存中数据保存到磁盘中,保证数据安全,方便进行数据备份和恢复

  • 过期键功能

    为键设置一个过期时间,让它在指定时间内自动删除

  • 主从同步

  • Sentinel哨兵

1.6 Redis安装

1.6.1 Rocky Linux操作系统
  • 安装命令

    • 第1步:更新系统,执行:dnf update -y
    • 第2步:安装Redis,执行:dnf -y install redis
  • Redis服务端操作

    • 启动数据库服务:systemctl start redis

    • 停止数据库服务:systemctl stop redis

    • 查看数据库状态:systemctl status redis

    • 重启数据库服务:systemctl restart redis

  • Redis客户端连接

    redis-cli -h IP地址 -p 端口号 -a 密码

    redis-cli -h 127.0.0.1 -p 6379 -a 密码# 如不指定IP地址和端口,默认连接本机的6379端口
    redis-cli
    
1.6.2 Windows操作系统
  • 下载安装包

    https://github.com/ServiceStack/redis-windows/blob/master/downloads/redis-64.3.0.503.zip

  • 将Redis服务添加到本地服务

    • 第1步:解压之后进入 redis-server.exe 文件所在的目录;
    • 第2步:地址栏输入cmd + 回车,进入到cmd命令行;
    • 第3步:执行命令 redis-server --service-install redis.windows.conf --loglevel verbose
    • 第4步:右键桌面的计算机 - 管理 - 服务 - 找到Redis并双击 - 点击启动,即可启动Redis服务
    • 第5步:打开cmd命令行,输入 redis-cli 命令,即可进入到redis的命令行模式
1.6.3 Mac操作系统

brew install redis

2 配置文件详解

  • 配置文件所在路径

    /etc/redis.conf

    修改配置文件之前首先备份,执行命令:cp -p /etc/redis.conf /etc/redis.conf.bak

  • 设置连接密码

    # 1.配置文件中对应的配置requirepass 123456 #其中123456为设置的密码# 2.修改完成侯重启Reids服务systemctl restart redis# 3.客户端连接测试redis-cli -h 127.0.0.1 -p 6379 -a 123456127.0.0.1:6379>PING
    
  • 设置允许远程连接

    # 1.注释掉配置文件中的本地IP地址绑定bind 127.0.0.1# 2.关闭保护模式(把yes改为no)protected-mode no# 3.重启Redis服务systemctl restart redis
    

    Windows连接Rocky Linux的Redis服务

    Linux查看IP地址的命令:ifconfig

    # 其中:x.x.x.x 是Rocky Linux的IP地址
    redis-cli -h x.x.x.x -a 123456
    

3 数据类型

全局命令:适用于所有数据类型

命令作用
SELECT number选择所在库(number在db0~db15之间)
KEYS *查看KEY
TYPE key查看KEY数据类型
DEL key删除KEY
FULSHDB清空当前库
FLUSHALL清除所有库数据

3.1 字符串String

字符串、数值 都会转为字符串来存储

3.1.1 字符串
  • 必须掌握

    // 1. 设置一个key-value
    set key value
    // 2. 获取key的值
    get key
    // 3. key不存在时再进行设置(nx)
    set key value nx  # not exists
    // 4. 设置过期时间(ex)
    set key value ex seconds
  • 了解即可

    // 同时设置多个key-value
    mset key1 value1 key2 value2 key3 value3
    // 同时获取多个key-value
    mget key1 key2 key3 
    // 获取长度
    strlen key
    
3.1.2 数值
  • 必须掌握

    // 整数操作
    INCRBY key 步长
    DECRBY key 步长
    INCR key : +1操作
    DECR key : -1操作// 应用场景: 抖音上有人关注你了,是不是可以用INCR呢,如果取消关注了是不是可以用DECR
    // 浮点数操作: 自动先转为数字类型,然后再进行相加减,不能使用append
    incrbyfloat key step
    

3.2 列表List

  • 特性

    • 元素是字符串类型
    • 列表头尾增删快,中间增删慢,增删元素是常态
    • 元素可重复
    • 最多可包含2^32 -1个元素
  • 列表常用命令

    # 增
    1、从列表头部压入元素LPUSH key value1 value2 
    2、从列表尾部压入元素RPUSH key value1 value2
    3、从列表src尾部弹出1个元素,压入到列表dst的头部RPOPLPUSH src dst
    4、在列表指定元素后/前插入元素LINSERT key after|before value newvalue# 查
    5、查看列表中元素LRANGE key start stop# 查看列表中所有元素: LRANGE key 0 -1
    6、获取列表长度LLEN key# 删
    7、从列表头部弹出1个元素LPOP key
    8、从列表尾部弹出1个元素RPOP key
    9、列表头部,阻塞弹出,列表为空时阻塞BLPOP key timeout
    10、列表尾部,阻塞弹出,列表为空时阻塞BRPOP key timeout# 关于BLPOP 和 BRPOP1、如果弹出的列表不存在或者为空,就会阻塞2、超时时间设置为0,就是永久阻塞,直到有数据可以弹出3、如果多个客户端阻塞再同一个列表上,使用First In First Service原则,先到先服务
    11、删除指定元素LREM key count valuecount>0:表示从头部开始向表尾搜索,移除与value相等的元素,数量为countcount<0:表示从尾部开始向表头搜索,移除与value相等的元素,数量为countcount=0:移除表中所有与value相等的值
    12、保留指定范围内的元素LTRIM key start stopLRTIM mylist1 0 2 # 只保留前3条# 应用场景: 保存微博评论最后500条LTRIM weibo:comments 0 499# 改
    13、LSET key index newvalue
    
  • 练习

    1、查看所有的键
    2、向列表 spider:urls 中以RPUSH放入如下几个元素:01_baidu.com、02_taobao.com、03_sina.com、04_jd.com、05_xxx.com
    3、查看列表中所有元素
    4、查看列表长度
    5、将列表中01_baidu.com 改为 01_tmall.com
    6、在列表中04_jd.com之后再加1个元素 02_taobao.com
    7、弹出列表中的最后一个元素
    8、删除列表中所有的 02_taobao.com
    9、剔除列表中的其他元素,只剩前3

3.3 Hash散列

  • 定义

    • 由field和关联的value组成的键值对
    • field和value是字符串类型
    • 一个hash中最多包含2^32-1个键值对
  • 优点

    • 每创建一个键,它都会为这个键储存一些附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等)
    • 键越多,redis数据库在储存附件管理信息方面耗费内存越多,花在管理数据库键上的CPU也会越多
  • 缺点(不适合hash情况)

    • 使用过期键功能:键过期功能只能对键进行过期操作,而不能对散列的字段进行过期操作
  • 基本命令操作

    # 1、设置单个字段
    HSET key field value
    HSETNX key field value
    # 2、设置多个字段
    HMSET key field value field value
    # 3、返回字段个数
    HLEN key
    # 4、判断字段是否存在(不存在返回0)
    HEXISTS key field
    # 5、返回字段值
    HGET key field
    # 6、返回多个字段值
    HMGET key field filed
    # 7、返回所有的键值对
    HGETALL key
    # 8、返回所有字段名
    HKEYS key
    # 9、返回所有值
    HVALS key
    # 10、删除指定字段
    HDEL key field 
    # 11、在字段对应值上进行整数增量运算
    HINCRBY key filed increment
    # 12、在字段对应值上进行浮点数增量运算
    HINCRBYFLOAT key field increment
    
  • 应用场景:微博好友关注

    1、用户ID为key,Field为好友ID,Value为关注时间user:10000 user:606 20190520user:10000 user:605 20190521
    2、用户维度统计统计数包括:关注数、粉丝数、喜欢商品数、发帖数用户为key,不同维度为field,value为统计数比如关注了5人HSET user:10000 fans 5HINCRBY user:10000 fans 1
    

3.4 集合

  • 特点

    • 无序、去重
    • 元素是字符串类型
    • 最多包含2^32-1个元素
  • 基本命令

    # 1、增加一个或者多个元素,自动去重
    SADD key member1 member2
    # 2、查看集合中所有元素
    SMEMBERS key
    # 3、删除一个或者多个元素,元素不存在自动忽略
    SREM key member1 member2
    # 4、元素是否存在
    SISMEMBER key member
    # 5、随机返回集合中指定个数的元素,默认为1个
    SRANDOMMEMBER key count
    # 6、返回集合中元素的个数,不会遍历整个集合,只是存储在键当中了
    SCARD key
    # 7、把元素从源集合移动到目标集合
    SMOVE source destination member
    # 8、差集(number1 1 2 3 number2 1 2 4)
    SDIFF key1 key2 
    # 9、差集保存到另一个集合中
    SDIFFSTORE destination key1 key2
    # 10、交集
    SINTER key1 key2
    SINTERSTORE destination key1 key2
    # 11、并集
    SUNION key1 key2
    SUNIONSTORE destination key1 key2
    
  • 应用场景

    案例: 新浪微博的共同关注

    需求: 当用户访问另一个用户的时候,会显示出两个用户共同关注过哪些相同的用户

    设计: 将每个用户关注的用户放在集合中,求交集即可

    实现:

    user001 = {'peiqi','qiaozhi','danni'}user002 = {'peiqi','qiaozhi','lingyang'}user001和user002的共同关注为:SINTER user001 user002 // 结果为: {'peiqi','qiaozhi'}
    

3.5 有序集合sortedset

  • 特点

    • 有序、去重
    • 元素是字符串类型
    • 每个元素都关联着一个浮点数分值(score),并按照分值从小到大的顺序排列集合中的元素(分值可以相同)
    • 最多包含2^32-1元素
  • 示例

    一个保存了水果价格的有序集合

分值2.04.06.08.010.0
元素西瓜葡萄芒果香蕉苹果

一个保存了员工薪水的有序集合

分值600080001000012000
元素lucytomjimjack

一个保存了正在阅读某些技术书的人数

分值300400555666777
元素核心编程阿凡提本拉登阿姆斯特朗比尔盖茨
  • 常用命令

    # 在有序集合中添加一个成员
    zadd key score member
    # 查看指定区间元素(升序)
    zrange key start stop [withscores]
    # 查看指定区间元素(降序)
    ZREVRANGE key start stop [withscores]
    # 删除成员
    zrem key member
    # 增加或者减少分值
    zincrby key increment member
    # 返回元素排名
    zrank key member
    # 返回元素逆序排名
    zrevrank key member
    # 返回集合中元素个数
    zcard key
    # 并集
    zunionstore destination numkeys key [weights 权重值] [AGGREGATE SUM|MIN|MAX]
    # 交集:和并集类似,只取相同的元素
    ZINTERSTORE destination numkeys key1 key2 WEIGHTS weight AGGREGATE SUM|MIN|MAX

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/61601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg 4.3 音视频-多路H265监控录放C++开发十八,ffmpeg解封装

为啥要封装和解封装呢&#xff1f; 1.封装就相当于将 h264 和aac 包裹在一起。既能播放声音&#xff0c;也能播放视频 2.在封装的时候没指定编码格式&#xff0c;帧率&#xff0c;时长&#xff0c;等参数&#xff1b;特别是视频&#xff0c;可以将视频帧索引存储&#xff0c;…

JAVA |日常开发中常见问题归纳讲解

JAVA &#xff5c;日常开发中常见问题归纳讲解 前言一、语法错误相关问题1.1 分号缺失或多余1.2 括号不匹配1.3 变量未定义或重复定义 二、数据类型相关问题2.1 数据类型不匹配2.2 整数溢出和浮点数精度问题 三、面向对象编程相关问题3.1 空指针异常&#xff08;NullPointerExc…

Git常用命令参考手册

Git常用命令参考手册 整理了一篇git常用的命令参考手册&#xff0c;命令顺序按照一个项目从头到尾的常用命令顺序做了排序&#xff0c;后续会继续完善内容示例并补全其他命令使用说明&#xff0c;希望对不熟悉的小伙伴有所帮助。 git config # 配置列表 git config --list #…

翰高4.5.7安装测试手册centos

翰高4.5.7centos版本安装 1 环境准备 产品包&#xff1a;hgdb4.5.7-see-centos7-x86-64-20210804.rpm 环境&#xff1a;10.1.5.172 root/sh88861158 操作系统安装完成后&#xff0c;执行常规操作&#xff1a;修改hosts、关闭防火墙、关闭senliunx 2 安装步骤 2.1 安装前准…

港科夜闻 |香港科大推出 InvestLM生成式人工智能平台,支持金融中小企应用AI技术潜力...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大推出 InvestLM生成式人工智能平台&#xff0c;支持金融中小企应用AI技术潜力。香港科大商学院继去年研究团队成功开发本港首个专为金融界而设、应用于生成式人工智能(生成式AI)的开源大语言模型InvestLM后&#…

【计算机网络】实验6:IPV4地址的构造超网及IP数据报

实验 6&#xff1a;IPV4地址的构造超网及IP数据报 一、 实验目的 加深对IPV4地址的构造超网&#xff08;无分类编制&#xff09;的了解。 加深对IP数据包的发送和转发流程的了解。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、了解IPV4地址的构造超网…

全面解析 C++ STL 中的 set 和 map

C 标准模板库&#xff08;STL&#xff09;中的关联式容器以其强大的功能和高效性成为开发者解决复杂数据组织问题的重要工具。其中&#xff0c;set 和 map 是最常用的两类关联容器。本篇博客将从基本特性、底层实现、用法详解、高级案例以及性能优化等多个角度&#xff0c;详细…

FreeRtos开发之计数信号量

前面介绍过了计数信号量的定义取值只有0与1两种状态的信号量称之为二值信号量 取值大于1的信号量称之为计数信号量 计数信号量的取值也可以为1&#xff0c;但通常大于1&#xff0c;如果取值为1&#xff0c;相当于只有0与1两种状态&#xff0c;用二值信号量即可。 计数信号量应用…

Profinet转EtherNet/IP网关是如何解决西门子S7-1500PLC与AB PLC的通讯问题的

一、 案例背景 在一个工业现场&#xff0c;一端是AB的PLC&#xff0c;IP地址192.168.1.20;另一端西门子是S7-1500系列&#xff0c;IP地址192.168.2.248。AB的PLC内有 B3、N7、F8 三个寄存器文件涉及到通讯&#xff0c;分别对应西门子PLC的M、DB1、DB2三个存储区域。通过捷米特…

【C语言】扫雷游戏(一)

我们先设计一个简单的9*9棋盘并有10个雷的扫雷游戏。 1&#xff0c;可以用数组存放&#xff0c;如果有雷就用1表示&#xff0c;没雷就用0表示。 2&#xff0c;排查(2,5)这个坐标时&#xff0c;我们访问周围的⼀圈8个位置黄色统计周围雷的个数是1。排查(8,6)这个坐标时&#xf…

360笔试题之LINUX和UNIX篇

写出完成以下任务的命令&#xff1a; 1.查看当前所在目录。如若当前在&#xff0c;/home/usr1目录下&#xff0c;查看此目录大小。列出此目录下的所有文件&#xff08;包括隐藏文件&#xff09;。 参考答案&#xff1a; 您可以使用以下命令查看当前所在目录和目录大小&#x…

Unity开发FPS游戏之完结篇

这个系列的前几篇文章介绍了如何从头开始用Unity开发一个FPS游戏&#xff0c;感兴趣的朋友可以回顾一下。这个系列的文章如下&#xff1a; Unity开发一个FPS游戏_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个FPS游戏之二_unity 模仿开发fps 游戏-CSDN博客 Unity开发一个F…

浅析RPC—基础知识

该文章会简单介绍一下 RPC 相关的基础概念。 什么是RPC&#xff1f; RPC&#xff08;Remote Procedure Call&#xff09; 即远程过程调用&#xff0c;通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。 为什么要 RPC &#xff1f; 因为&#xff0c;两个不同的服务器…

mysql数据库varchar截断问题

用了这么多年mysql数据库&#xff0c;才发现varchar是可以截断的&#xff0c;而且是在我们线上数据库。个人觉得dba的这个设置是非常有问题的&#xff0c;用户往数据库里存东西&#xff0c;就是为了以后用的&#xff0c;截断了存放&#xff0c;数据不完整&#xff0c;就用不了了…

数据处理与统计分析——07-Pandas的concat连接、merge()合并、多表查询、内/外/自连接查询操作

pandas数据拼接 (1) DataFrame数据组合-concat连接 概述 连接是指把某行或某列追加到数据中, 数据被分成了多份可以使用连接把数据拼接起来把计算的结果追加到现有数据集&#xff0c;也可以使用连接 df对象与df对象拼接 行拼接参考: 列名, 列拼接参考: 行号 # todo 记忆: con…

EwoMail邮箱服务器软件安装教程

EwoMail是基于Linux的开源邮件服务器软件,集成了众多优秀稳定的组件,是一个快速部署、简单高效、多语言、安全稳定的邮件解决方案,帮助你提升运维效率,降低 IT 成本,兼容主流的邮件客户端,同时支持电脑和手机邮件客户端。 一、系统版本 二、关闭selinux vi /etc/sysconf…

【机器学习】机器学习的基本分类-监督学习-支持向量机(Support Vector Machine, SVM)

支持向量机是一种强大的监督学习算法&#xff0c;主要用于分类问题&#xff0c;但也可以用于回归和异常检测。SVM 的核心思想是通过最大化分类边界的方式找到数据的最佳分离超平面。 1. 核心思想 目标 给定训练数据 &#xff0c;其中 是特征向量&#xff0c; 是标签&#xf…

Linux命令进阶·如何切换root以及回退、sudo命令、用户/用户组管理,以及解决创建用户不显示问题和Ubuntu不显示用户名只显示“$“符号问题

目录 1. root用户&#xff08;超级管理员&#xff09; 1.1 用于账户切换的系统命令——su 1.2 退回上一个用户命令——exit 1.3 普通命令临时授权root身份执行——sudo 1.3.1 为普通用户配置sudo认证 2. 用户/用户组管理 2.1 用户组管理 2.2 用户管理 2.2.1 …

Zero to JupyterHub with Kubernetes中篇 - Kubernetes 常规使用记录

前言&#xff1a;纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 参考&…

《Python基础》之Python中可以转换成json数据类型的数据

目录 一、JSON简介 JSON有两种基本结构 1、对象&#xff08;Object&#xff09; 2、数组&#xff08;Array&#xff09; 二、将数据装换成json数据类型方法 三、在Python中&#xff0c;以下数据类型可以直接转换为JSON数据类型 1、字典&#xff08;Dictionary&#xff09…