Redis_3_Redis介绍+常见命令

Redis介绍

和MySQL一样,redis也是一个客户端-服务器结构的程序!!

redis客户端和服务器可以在同一个主机上,也可以在不同的主机上(当前学习阶段,一般只有一台机器,此时客户端和服务器在同一主机上)。

Redis客户端也有很多种形态:

1、自带的命令行客户端(文章中主要使用这个客户端)

redis-cli

2、图形化界面客户端(桌面程序,web程序)

像这样的图形化程序,依赖windows系统。而未来在实际工作种,你用来办公的windows系统,链接服务器可能会有诸多限制(之间可能会经过很多的跳板机,堡垒机,权限校验),你的windows上的图形化界面客户端能不能连上你们的服务器里的redis是个未知数。

3、基于redis的api自行开发客户端(工作中最主要的形态)

非常类似于mysql的C语言API和JDBC

补充:

上篇文章我们谈及到了redis的快,这里的快是相对于mysql这样的1关系型数据库而言的~~

但是如果是直接和内存中操作变量相比,就没有优势了,甚至更慢了!!

比如:应用程序需要存储用户点赞数,此时就需要以键值对存储视频id、点赞个数,那么此时是使用redis来存,还是直接在内存中搞个hash map来存呢?

此时就要对症下药,具体问题具体分析了。使用hash map是直接操作内存的,使用redis是先通过网络,再操作内存!很显然,hash map会比redis更快!但是,上述场景中是否要使用redis?也要结合实际需求来确定!引入redis确实会比hash map更慢,但是有了redis之后就可以把数据单独存储,后续应用服务器重启,不会影响到数据内容。如果未来要扩展成分布式服务器,使用redis也是更佳的。

Redis实战

如何去学习redis命令呢?

1、掌握常用命令。

2、学会使用redis文档。

阅读文档,是程序员的基操!任何一个工具软件,去找相关资料,一定是去看官方网站:Redis - The Real-time Data Platform

首先在学习redis命令之前,我们需要通过redis-cli来完成客户端和redis服务器交互:

核心命令:set 和 get

get:根据key来取value

set:把key和value存储进去(这里的key和value都是字符串)。

set key value

对于这里的key、value都是不需要加上引号的,就是表示字符串类型,当然如果加上单/双引号也是可以的。

这里还要补充一点:redis和mysql一样都是不区分大小写的

get key

如果当前键不存在就会返回nil

全局命令

Redis支持很多种数据结构,整体上来说Redis是键值对结构,key固定就是字符串,而value实际上会有很多种类型,如:字符串、哈希表、列表等,操作不同的数据结构就会有不同的命令。

全局命令,就是能够搭配任意一个数据结构来使用的命令~

keys

用来查询当前服务器上匹配的key,可以通过一些特殊符号(通配符)来描述key的模样,匹配上述摸样的key就能被查询出来。这些由通配符组成的包含特殊符号的字符串也被称为pattern~

那pattern是咋写的呢,又支持哪些通配符呢?

为了测试,我们先创建一下key-value

?匹配任意一个字符。
* 匹配0个或者多个任意字符
[abcd] 只能匹配到abcd,相当于给出固定选项
[^e] 排除e,只有e匹配不了,去其他都能匹配
[a-b] 匹配a-b这个范围内的字符,包括两侧边界

注意事项:keys命令的时间复杂度是O(N),因为他需要去遍历整个redis。

所以,在生产环境上都会禁止使用keys命令,尤其是keys *(查询redis中所有的key)

注意:这里是我们自己搭建的环境,key比较少,所以可以进行演示,但在生产环境下是一定一定不能使用keys *的!生产环境上的key可能会非常多,而redis是一个单线程的服务器,执行keys *的时间非常长,就使redis服务器被阻塞了,无法给其他客户端提供服务!!

我们之前说过,redis经常被用于做缓存,挡在MySQL面前,替MySQL负重前行~~ 万一redis被阻塞住了,此时其他的查询redis操作就超时了,这些请求就会直接查数据库~~

突然一大波请求过来了,MySQL措手不及,就容易挂了~~

什么是生产环境?

未来我们再工作中会涉及到的几个环境:

1、办公环境(入职公司之后,公司给你发个电脑)

笔记本(windows,mac)/台式机。一般8C16G512G

2、开发环境

有的时候,开发环境和办公环境使同一个;有的时候,开发环境是一个单独的服务器(28 C128G4T)。

做前端/客户端,一般来说,开发环境就是办公环境了,后端来说,很可能使单独的服务器。

因为有的后端程序可能会比较复杂~~

1、编译一次的时间特别久,需要使用高性能服务器,进行编译。

2、有的程序一启动要消耗更多的CPU和内存资源,办公电脑难以支撑。

3、有的程序比较依赖linux,在Windows环境下搭不起来.

3、测试环境

测试工程师使用的

4、线上环境/生产环境

办公环境、开发环境、测试环境,也统称为线下环境,外界用户无法访问到。

线上环境则是外界用户能够访问到的。一旦生产环境上出问题,一定会对于用户的使用产生影响!!

那生产环境这么危险,我以后不操作生产环境行不行?==》不行

程序员把一个程序上线才算是把或干完了~~上线也是程序员的一个重要考核指标。

衡量一个实习生能不能转正留用~~就看上线次数~~如果一周能上线两三次,基本就稳了~~

exists

判定当前key是否存在。

返回值:key存在的个数。

时间复杂度:O(1)。

键值对存储的体系中(类似于哈希表),key得是唯一的。

redis支持很多数据结构,这里指的是value可以是一些复杂的数据结构。redis自身的这些键值对,是通过哈希表的方式来组织的。redis的某个值,又可以是一些数据结构。

那么一次查询两个键和分开查询有什么区别呢?

答案:分开的写法会产生更多轮次的网络通信,效率比较低,成本比较高(和直接操作内存比)。当前我们的客户端和服务器在同一台机器上,如果是在不同的机器上就需要涉及到网络的封装和分用,耗费更长的时间。

del(key)

可以一次删除一个或者多个

时间复杂度O(1)

返回值:返回删除掉的key的个数。

之前我们在学习mysql的时候,强调像drop database、drop table、delete from......都是非常危险的操作!!一旦删除之后,数据就没了~~

但是redis的主要应用场景是作为缓存,此时redis里存储的只是一个热点数据,全量数据仍然在MySQL中。此时,如果把redis中的key删除了几个,一般来说,问题不大~~

但是如果是MySQL这样的数据,哪怕误删了一个数据,影响都能使很大的。如果是把redis作为数据库,此时误删数据的影响就很大了;如果把redis作为mq,此时误删数据影响大不大就需要具体情况具体分析了。

expire

作用是给指定的key设置过期时间,当key存活时间超出这个指定的值,就会被自动删除。一般被用在有时间限制的业务场景,如:手机验证码、外卖优惠券、基于redis实现的分布式锁,为了避免出现不能正常解锁的情况,统称都会在加锁的时候设置过期时间(所谓的使用redis作为分布式锁,就是给redis重写一个特殊的key value)......

时间复杂度:O(1)

返回值:设置成功返回1,失败返回0.

10秒后,我们get一下hello:

显示为nil。

补充:pexpire能够设置毫秒级的时间

ttl

查看当前键的过期时间。

我们先设置hllo过期时间为100秒:

此时我们就可以通过ttl来查看过期时间了

与pexpire相对应还有一个ettl来查看毫秒级的过期时间

相关推荐
落落1213几秒前
MySQL事务四大特性(ACID)
数据库
阿维的博客日记6 分钟前
Redis的旁路缓存策略和先删除缓存后更新数据库,先更新数据库后删除缓存,这三种策略之间有什么关系??
数据库·redis·缓存
ictI CABL23 分钟前
redis连接服务
数据库·redis·bootstrap
苍煜30 分钟前
SpringBoot单体应用到分布式下的数据库锁、事务、Redis事务、分布式锁、分布式事务协调
数据库·spring boot·分布式
Resistance丶未来1 小时前
Coding-Interview-University 学习路径实战评测
人工智能·gpt·学习·github·claude·gemini·kimi
xmjd msup1 小时前
mysql的分区表
数据库·mysql
Lyyaoo.1 小时前
【JAVA Spring面经】Spring 事务失效情况
java·数据库·spring
MeAT ITEM1 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dovens1 小时前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
IOT.FIVE.NO.11 小时前
claude code desktop cowork报错解决和记录Workspace..The isolated Linux environment ...
linux·服务器·数据库