Redis使用 ~第一弹

前言

Redis我们前期谈到 其实Redis本质上是使用键值对来存储数据的(key-value)的非关系型数据库

其中key 是String 类型的 而value根据Redis官方 可以是以下类型

针对Redis 的操作 可以直接通过简单的交互命令来进行操作 也可以通过一些脚本比如 (lua)的方式,批量执行一些操作(可以带有一定逻辑)

Redis应用场景

1.把Redis当做数据库来使用

大多数情况下考虑到数据存储我们一般要考虑的是"大",但仍然有一些场景考虑的是快

把所有需要检索的数据存储在内存中,就使用的Redis这样的内存数据库来完成

使用这样的内存数据库存储大量的数据,需要不少的硬件资源

2.缓存

数据是 存储在mysql数据库中的 但会根据二八原则(数据大部分需要读取 少部分需要修改)

因此就将数据分为冷热数据,将热点数据 存储在Redis 中

3.消息队列

实现一个网络版本的生产者消费者模型

如果当前 场景中对于消息队列的功能依赖的不是很多 并且又不想引入额外的依赖 Redis可以作为一个选择

其他的应用场景可通过阅读官方文档此处不过多讲述

Redis 客户端

Redis是客户端 服务器结构的程序

我们要清楚所有redis的命令都是要在Redis客户端上使用的

我们此篇博客介绍的 就根据xshell 云服务器上 的客户端进行操作

除此之外 基于redis 的api自行开发客户端(这是工作中最主要的形态)后续提及

Redis通用命令

官方命令 文档链接

https://redis.io/docs/latest/commands/

小编在此处主要介绍一些核心经常使用的命令(在使用命令时一定要进入Redis的客户端)

通用命令

1.get 和set

key value本质上是字符串 用法呢 类似与hashMap

2.Redis全局命令

Redis支持很多种数据结构 整体上来说 Redis是键值对 结构 key固定就是字符串,value实际上会由多种类型

1)keys 用来查询当前服务器上匹配的key

通过一些特殊符号(通配符)来描述key的模样 匹配上述模样的key就能被查询出来

keys pattern 返回所有满足pattern样式的key

h?llo 匹配hello ?表示匹配一个任意字符

h*llo 匹配hllo 或者 heeeeello *表示匹配0个或多个任意字符

其他的如下图所示 官方文档 上给出了详细的介绍

基于命令 对我们之前设定的key1 key2进行匹配效果如下 而其他的pattern我们就不过多演示了大家多多练习多多体会就行了

注意事项

keys命令的时间复杂度是O(N)

所以在生产环境上 一般会禁止使用keys命令 尤其是keys * 会查询redis中所以的key

生产环境上的key是非常多的 而redis是一个单线程的服务器,执行keys*的时间长就会使redis服务器被阻塞 无法给其他客户端提供服务

3.exists

判断 key'是否存在 返回存在的个数

redis组织这些key就是按照哈希表的方式来组织的 时间复杂度是O(1)

redis支持很多数据结构是指一个value可以是一些复杂的数据结构

redis自身的这些键值对 是通过哈希表的方式来组织的

redis 的某个值,又可以是一些数据结构

4.del(delete)

删除key

返回删除成功 的个数

时间复杂度O(1)

redis删除操作危险程度不及MySQL等,因为redis存放缓存数据 ,只是删除可能是热点数据,还可通过数据库中数据恢复

5.expire

给指定的key设置过期时间 返回1设置成功 返回0设置失败(必须针对已存在的key

时间复杂度是O(1)

key超过这个指定的值,就会自动删除

expire key seconds 以秒为计时单位 但有时场景对于秒 来说 太长

pexpire key 毫秒 就可以毫秒为计时单位

6.ttl

ttl key 会得出key的过期时间 秒

pttl key 会得出key的过期时间 毫秒

如果返回-2表示这个key已经到期不存在

如果返回-1表示这个key存在并且没有设置过期时间

在此处涉及一个

面试题 Redis 的key的过期策略

1.定期删除 每次抽取一部分进行验证过期时间保证这个抽取检查的过程足够快(因为redis是单线程的,这个扫描抽查的过程不能太耗时,不然会阻塞其他命令的执行)

2.惰性删除 假设这个key已经到过期时间了,但是暂时还没删它 key还存在

紧接着 后面又一次访问,正好用到这个key了,于是这次访问就会让redis 服务器触发删除key的操作,同时返回一个nil

采用的就是定期和惰性删除相结合

虽然有了上述两种策略结合但整体效果一般仍然有很多过期的key残留,没有即使删除掉 因此redis 还提供了一系列的内存淘汰策略见于Redis缓存内存淘汰策略章节部分。

7.type

返回key中所存放的value类型

时间 复杂度O(1) 因为value类型 的 不同操作的命令也是 差别很大的 所以在操作key时 查看key中存储value类型是很有必要的

当然除此之外还有更多的通用命令 可通过查阅官方文档 多多 使用 redis的操作对你而言就不是难事

相关推荐
heartbeat..4 小时前
Redis 中的锁:核心实现、类型与最佳实践
java·数据库·redis·缓存·并发
Prince-Peng4 小时前
技术架构系列 - 详解Redis
数据结构·数据库·redis·分布式·缓存·中间件·架构
虾说羊4 小时前
redis中的哨兵机制
数据库·redis·缓存
_F_y4 小时前
MySQL视图
数据库·mysql
2301_790300964 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
九章-5 小时前
一库平替,融合致胜:国产数据库的“统型”范式革命
数据库·融合数据库
2401_838472515 小时前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python
u0109272715 小时前
使用Python进行网络设备自动配置
jvm·数据库·python
wengqidaifeng5 小时前
数据结构---顺序表的奥秘(下)
c语言·数据结构·数据库
what丶k5 小时前
SpringBoot3 配置文件使用全解析:从基础到实战,解锁灵活配置新姿势
java·数据库·spring boot·spring·spring cloud