Redis入门到实战-黑马程序员

news2024/11/19 22:40:26

文章目录

  • Redis安装与启动
    • Redis的安装
    • 启动Redis
    • Redis客户端
    • Redis通用命令
    • key的层级格式
  • Redis五种数据类型
    • String
    • Hash
    • List
    • Set
    • SortedSet

Redis安装与启动

Redis的安装

Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:

Linux安装Redis步骤:
  1.安装gcc依赖:yum install -y gcc tcl
  2.上传安装包并解压:tar -xzf redis-6.2.6.tar.gz
  3.编译安装,先进入到redis目录再编译安装
    3.1 cd redis-6.2.6
    3.2 make && make install
  4.默认的安装路径是在 `/usr/local/bin`目录下:
    该目录已经默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:
    - redis-cli:是redis提供的命令行客户端
    - redis-server:是redis的服务端启动脚本
    - redis-sentinel:是redis的哨兵启动脚本

在这里插入图片描述

启动Redis

前台启动Redis

前台启动Redis
  1.安装完成后,可以任意目录输入redis-server命令即可启动Redis
  2.这种启动属于`前台启动`,会阻塞整个会话窗口,窗口关闭或者按下`CTRL + C`则Redis停止。一般不推荐使用。

在这里插入图片描述
指定配置启动Redis

通过配置文件启动Redis也称`后台`方式启动
  1.`后台`方式启动则必须修改Redis配置文件,就在我们之前解压的redis安装包下(`/usr/local/src/redis-6.2.6`),名字叫redis.conf:
  2.修改bind
    bind 0.0.0.0
    # 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0
    
  3.修改守护进程
    daemonize yes 
    # 守护进程,修改为yes后即可后台运行
    
  4.修改密码
    requirepass 123321
    # 密码,设置后访问Redis必须输入密码
  
  5.指定配置文件启动
    # 进入redis安装目录 
    cd /usr/local/src/redis-6.2.6
    # 启动
    redis-server redis.conf
  
  6.停止redis
    redis-cli -u 123321 shutdown
    # 利用redis-cli来执行 shutdown 命令,即可停止 Redis 服务,
    # 因为之前配置了密码,因此需要通过 -u 来指定密码
    

在这里插入图片描述
在这里插入图片描述
通过systemd开启自启
开机自启脚本
vim /etc/systemd/system/redis.service

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

systemd启动命令

#以上开启自启脚本配置完后需要重载系统服务:
systemctl daemon-reload

# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态
systemctl status redis

#执行下面的命令,可以让redis开机自启:
systemctl enable redis

在这里插入图片描述
在这里插入图片描述

Redis客户端

安装完成Redis,我们就可以通过Redis客户端来操作Redis实现数据的CRUD了。

Redis客户端包括
- 命令行客户端
- 图形化桌面客户端
- 编程客户端

Redis安装完成后就自带了命令行客户端:redis-cli,使用方式如下:
  redis-cli -h 10.0.0.212 -p 6379 -a 123321
    - `-h 127.0.0.1`:指定要连接的redis节点的IP地址,默认是127.0.0.1
    - `-p 6379`:指定要连接的redis节点的端口,默认是6379
    - `-a 123321`:指定redis的访问密码 
    - `ping`:与redis服务端做心跳测试,服务端正常会返回`pong`

在这里插入图片描述

Redis通用命令

通用指令是部分数据类型的,都可以使用的指令,常见的有:
  KEYS:查看符合模板的所有key
  DEL:删除一个指定的key
  EXISTS:判断key是否存在
  EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
  TTL:查看一个KEY的剩余有效期
通过help [command] 可以查看一个命令的具体用法,例如:

在这里插入图片描述
在这里插入图片描述

key的层级格式

Redis的key允许有多个单词形成层级结构,多个单词之间用':'隔开,格式如下:
  项目名:业务名:类型:id
这个格式并非固定,也可以根据自己的需求来删除或添加词条。

例如我们的项目名称叫 heima,有user和product两种不同类型的数据,我们可以这样定义key:
  user相关的key:heima:user:1
  product相关的key:heima:product:1

  set heima:user:2 '{"id":2,"name":"Leilei","age":18}'

在这里插入图片描述
在这里插入图片描述
通过RESP图形化界面可以清楚的看见key的层级结构
在这里插入图片描述

Redis五种数据类型

Redis是一个key-value的数据库,key一般是String类型,value的类型有很多,一般常用的有五种

String

String类型,也就是字符串类型,是Redis中最简单的存储类型。

String类型的value是字符串,不过根据字符串的格式不同,又可以分为3类:
  1. string:普通字符串
  2. int:整数类型,可以做自增、自减操作
  3. float:浮点类型,可以做自增、自减操作
  
  不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。
  字符串类型的最大空间不能超过512m.
String的常见命令有:
  SET:添加或者修改已经存在的一个String类型的键值对
  GET:根据key获取String类型的value
  MSET:批量添加多个String类型的键值对
  MGET:根据多个key获取多个String类型的value
  INCR:让一个整型的key自增1
  INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
  INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
  SETEX:添加一个String类型的键值对,并且指定有效期

在这里插入图片描述

Hash

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:
在这里插入图片描述
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:
在这里插入图片描述

Hash的常见命令有:
  HSET key field value:添加或者修改hash类型key的field的值
  HGET key field:获取一个hash类型key的field的值
  HMSET:批量添加多个hash类型key的field的值
  HMGET:批量获取多个hash类型key的field的值
  HGETALL:获取一个hash类型的key中的所有的field和value
  HKEYS:获取一个hash类型的key中的所有的field
  HVALS:获取一个hash类型的key中的所有的value
  HINCRBY:让一个hash类型key的字段值自增并指定步长
  HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

在这里插入图片描述
在这里插入图片描述
图形化界面表示为
在这里插入图片描述

List

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。
既可以支持正向检索和也可以支持反向检索。特征也与LinkedList类似:
  1.有序
  2.元素可以重复
  3.插入和删除快
  4.查询速度一般
常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。
List的常见命令有:
  LPUSH key  element ... :向列表左侧插入一个或多个元素
  LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
  RPUSH key  element ... :向列表右侧插入一个或多个元素
  RPOP key:移除并返回列表右侧的第一个元素
  LRANGE key star end:返回一段角标范围内的所有元素
  BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

在这里插入图片描述
我LPUSH的是123;redi存储的却是321
在这里插入图片描述
lpop和rpop
在这里插入图片描述
在这里插入图片描述

Set

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。
因为也是一个hash表,因此具备与HashSet类似的特征:
  1.无序
  2.元素不可重复
  3.查找快
  4.支持交集、并集、差集等功能
String的常见命令有:
  SADD key member ... :向set中添加一个或多个元素
  SREM key member ... : 移除set中的指定元素
  SCARD key: 返回set中元素的个数
  SISMEMBER key member:判断一个元素是否存在于set中
  SMEMBERS:获取set中的所有元素
  SINTER key1 key2 ... :求key1与key2的交集
  SDIFF key1 key2 ... :求key1与key2的差集
  SUNION key1 key2 ..:求key1和key2的并集
10.0.0.212:6379> sadd s1 a b c
(integer) 3
10.0.0.212:6379> smembers s1
1) "a"
2) "c"
3) "b"
10.0.0.212:6379> scard s1
(integer) 3
10.0.0.212:6379> srem s1 a
(integer) 1
10.0.0.212:6379> sismember s1 a
(integer) 0
10.0.0.212:6379> sismember s1 b
(integer) 1
10.0.0.212:6379> 

Set命令的练习

将下列数据用Redis的Set集合来存储:
  张三的好友有:李四、王五、赵六
  李四的好友有:王五、麻子、二狗
  10.0.0.212:6379> sadd zs lisi wangwu zhaoliu
  (integer) 3
  10.0.0.212:6379> sadd ls wangwu mazi ergou
  (integer) 3
  
利用Set的命令实现下列功能:
  计算张三的好友有几人
   10.0.0.212:6379> scard zs
   (integer) 3
   
  计算张三和李四有哪些共同好友
  10.0.0.212:6379> sinter zs ls
  1) "wangwu"
  
  查询哪些人是张三的好友却不是李四的好友
  10.0.0.212:6379> sdiff zs ls
  1) "lisi"
  2) "zhaoliu"
  
  查询张三和李四的好友总共有哪些人
  10.0.0.212:6379> sunion zs ls
  1) "wangwu"
  2) "ergou"
  3) "lisi"
  4) "zhaoliu"
  5) "mazi"
  
  判断李四是否是张三的好友
  10.0.0.212:6379> sismember zs lisi
  (integer) 1
  
  判断张三是否是李四的好友
  10.0.0.212:6379> sismember lisi zs
  (integer) 0
  
  将李四从张三的好友列表中移除
  10.0.0.212:6379> srem zs lisi
  (integer) 1

SortedSet

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。
SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。
SortedSet具备下列特性:
  1.可排序
  2.元素不重复
  3.查询速度快
因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。
SortedSet的常见命令有:
  ZADD key score member:            添加一个或多个元素到sorted set ,如果已经存在则更新其score值
  ZREM key member:                  删除sorted set中的一个指定元素
  ZSCORE key member:                 获取sorted set中的指定元素的score值
  ZRANK key member:                 获取sorted set 中的指定元素的排名
  ZCARD key:                        获取sorted set中的元素个数
  ZCOUNT key min max:               统计score值在给定范围内的所有元素的个数
  ZINCRBY key increment member:     让sorted set中的指定元素自增,步长为指定的increment值
  ZRANGE key min max:               按照score排序后,获取指定排名范围内的元素
  ZRANGEBYSCORE key min max:        按照score排序后,获取指定score范围内的元素
  ZDIFF、ZINTER、ZUNION:             求差集、交集、并集
注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可

SortedSet命令练习

将班级的下列学生得分存入Redis的SortedSet中:
Jack 85, Lucy 89, Rose 82, Tom 95, Jerry 78, Amy 92, Miles 76

10.0.0.212:6379> zadd stus 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles
(integer) 7


并实现下列功能:
  1.删除Tom同学
    10.0.0.212:6379> zrem stus Tom
    (integer) 1

  2.获取Amy同学的分数
    10.0.0.212:6379> zscore stus Amy
    "92"
    
  3.获取Rose同学的排名
    10.0.0.212:6379> zrank stus Rose
    (integer) 2   # zset排序从0开始

  4.查询80分以下有几个学生
    10.0.0.212:6379> zcount stus 0 80
    (integer) 2

  5.给Amy同学加2分
    10.0.0.212:6379> zincrby stus 2 Amy
    "94"

  6.查出成绩前3名的同学
    10.0.0.212:6379> zrange stus 0 2
    1) "Miles"
    2) "Jerry"
    3) "Rose"
    
    10.0.0.212:6379> zrevrange stus 0 2
    1) "Amy"
    2) "Lucy"
    3) "Jack"

  7.查出成绩80分以下的所有同学
    10.0.0.212:6379> ZRANGEBYSCORE stus 0 80
    1) "Miles"
    2) "Jerry"

在这里插入图片描述

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

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

相关文章

能源管理系统是怎么实现节能减排的?

在这个环保意识日益增强的时代,我们都在寻找更智能、更绿色的生活方式。你是否想过,家里的电表、空调、照明系统其实可以协同工作,帮助我们节约能源,减少碳足迹呢?这就是神奇的能源管理系统在发挥作用! 能…

线程安全——使用线程安全函数,多线程中执行fork引发的问题及如何解决

目录 一、引例 二、线程安全 三、多线程中执行fork 3.1 多线程中某个线程调用 fork()&#xff0c;子进程会有和父进程相同数量的线程吗? 3.2 父进程被加锁的互斥锁 fork 后在子进程中是否已经加锁 一、引例 在主线程和函数线程中进行语句分割并输出。 #include <stdi…

vite+ts+vue3 项目搭建和基础配置

官网: 文件夹cdm进入小黑窗, 按步骤安装项目即可, 用到的都选 "是" 快速上手 | Vue.jsVue.js - 渐进式的 JavaScript 框架https://cn.vuejs.org/guide/quick-start.html安装成功后目录如下: index.html 尾部报错: cleareslint(vue/comment-directive), 已知 是eslin…

新书速览|FFmpeg开发实战:从零基础到短视频上线

资深音视频开发专家、畅销书作者重磅新作&#xff0c;从基础知识到高级应用&#xff0c;从桌面开发到移动开发&#xff0c;9大实际音视频项目完整再现 本书内容 《FFmpeg开发实战&#xff1a;从零基础到短视频上线》是一本FFmpeg开发的实战教程&#xff0c;由浅入深&#xff0…

vite+vue3门户网站菜单栏动态路由控制

门户网站用户端需要分板块展示&#xff0c;板块内容由管理端配置&#xff0c;包括板块名称&#xff0c;访问路径&#xff0c;路由组件&#xff0c;展示顺序&#xff0c;是否展示。如下图所示&#xff1a; 用户访问门户网站时&#xff0c;展示菜单跳转通过板块配置&#xff0c;动…

Leetcode : 1137. 高度检查器

学校打算为全体学生拍一张年度纪念照。根据要求&#xff0c;学生需要按照 非递减 的高度顺序排成一行。 排序后的高度情况用整数数组 expected 表示&#xff0c;其中 expected[i] 是预计排在这一行中第 i 位的学生的高度&#xff08;下标从 0 开始&#xff09;。 给你一个整数…

Web3 Summit 2024 柏林重启:与全球 Buidler 共赴创新盛事

时隔五年&#xff0c;Web3 Summit 将于 8 月 19 日至 21 日回归柏林举办。 2019 年&#xff0c;1000 多名开发人员、研究人员和 buidler 齐聚一堂&#xff0c;参加了上一届为期三天的 Web3 Summit&#xff0c;这是一个所有致力于促进在去中心化网络上深耕团队相聚的盛事。 与…

RDB 和 AOF 的实现原理以及优缺点

一个工作了 5 年的粉丝私信我&#xff0c; 关于 RDB 和 AOF 的实现原理 这个问题在面试的时候&#xff0c;应该怎么回答&#xff1f;于是我把之前整理过的一个高手回答整理成文档发给了他&#xff0c;后来他参考这个回复在面试的时候顺利拿到了 offer 今天我把这个文档分享给大…

AI大模型,掀起新一波智能浪潮!

AI大模型的出现&#xff0c;标志着人工智能技术迈入了一个新的阶段。这些巨大的模型不仅在规模上超越了以往任何其他人工智能系统&#xff0c;而且在性能上也取得了巨大的突破。由于其庞大的参数量和复杂的结构&#xff0c;AI大模型在各个领域展现出了强大的学习能力和推理能力…

Haproxy 负载均衡集群

一. Haproxy 1. Haproxy 介绍 HAProxy 是法国开发者威利塔罗 (Willy Tarreau) 在2000年使用C语言开发的一个开源软件&#xff0c;是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器&#xff0c;支持基于cookie的持久性&#xff0c;自动故障切换&#xff0c;支持正则…

基于React低代码平台开发:直击最新应用构建

文章目录 前言一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践四、未来展望《低代码平台开发实践&#xff1a;基于React》编辑推荐内容简介作者简介目录前言为什么要写这本书读者对象如何阅读本书 前言 随着数字化转型的…

【免费资源】Unity真实广阔的沙漠场景等你来解锁!

Unity真实广阔的沙漠场景等你来解锁&#xff01; Unity 每周免费资源上新啦&#xff01;此次更新的是广阔的沙漠场景&#xff0c;其中包含 14 个预制体&#xff0c;每个预制体都包含 LOD、400-2000 顶点和 4K 纹理。现在&#xff0c;只需登录 Asset Store&#xff0c;即可免费领…

ThinkPHP6与支付宝支付集成指南:轻松实现在线收款!

随着移动支付的普及&#xff0c;支付宝成为了越来越多人的首选支付方式。而作为一款高性能、高效率、安全稳定的开源框架&#xff0c;thinkphp6也被众多开发人员所青睐。那么&#xff0c;如何在thinkphp6中快速简便地实现支付宝支付呢&#xff1f; 首先&#xff0c;我们需要在…

openGauss学习笔记-238 openGauss性能调优-SQL调优-SQL执行计划介绍-详解

文章目录 openGauss学习笔记-238 openGauss性能调优-SQL调优-SQL执行计划介绍-详解238.1 详解238.1.1 执行计划238.1.1.1 执行计划层级解读&#xff08;纵向&#xff09;238.1.1.2 执行计划中的关键字说明 238.1.2 执行信息 openGauss学习笔记-238 openGauss性能调优-SQL调优-S…

机器学习-可解释性机器学习:随机森林与fastshap的可视化模型解析

一、引言 机器学习在当今社会扮演着日益重要的角色&#xff0c;但黑盒模型的不可解释性限制了其应用范围。因此&#xff0c;可解释性机器学习成为研究热点&#xff0c;有助于提高模型的可信度和可接受性。本文旨在探讨随机森林和fastshap作为可视化模型解析工具的应用&#xff…

nodejs web服务器 -- 搭建开发环境

一、配置目录结构 1、使用npm生成package.json&#xff0c;我创建了一个nodejs_network 文件夹&#xff0c;cd到这个文件夹下&#xff0c;执行&#xff1a; npm init -y 其中-y的含义是yes的意思&#xff0c;在init的时候省去了敲回车的步骤&#xff0c;如此就生成了默认的pac…

Mysql学习笔记之事务详解(读未提交、读以提交、可重复读、串行化读)

在这个博主的基础上&#xff0c;增加两种情况的对比&#xff1a;https://blog.csdn.net/llllllkkkkkooooo/article/details/108068919 可重复读中幻读现象&#xff08;未使用MVCC&#xff09; 设置可重复读的隔离级别 set global transaction isolation level repeatable read…

Java --- springcloud初始项目创建

目录 一、cloud项目创建 1.1、项目编码规范 1.2、注解生效激活 1.3、导入父工程maven的pom依赖 二、创建子工程并导入相关pom依赖 2.1、相关配置文件 2.1.1、数据库配置文件内容 2.1.2、自动生成文件配置内容 三、创建微服务8001子工程 3.1、导入相关pom依赖 3.…

Orange3数据预处理(分组组件)

Group By是Orange3中一个非常有用的组件&#xff0c;它允许用户对数据集进行聚合操作&#xff0c;类似于SQL中的GROUP BY语句或Pandas库中的groupby方法。以下是Group By组件的一些核心功能介绍&#xff1a; 1. Mean (平均数): 数据值的总和除以数据项的数量&#xff0c;显示数…