news 2026/4/17 15:50:37

认识Redis

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
认识Redis

Redis诞生于2009,全程是Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL(not only sql)数据库.

Redis特征


1.键值型,value支持多种不同的数据结构,功能丰富

2.单线程,每个命令具备原子性

3.低延迟(因为是基于内存存储的,读写操作效率高)

4.支持数据持久化

5.支持主从集群,分片集群

6。支持多语言客户端(c,java,python...)

Redis通用命令

keys:查看复合模版的所有key(*为通配符,”_为占位符“,例如查找包含name的key:keys *name*),不建议在生产环境设备上使用,因为模糊匹配带来的查询压力以及redis单线程的特性,会造成堵塞。

del:删除一个指定的key (例如 del key1 key2)

exists:判断key是否存在 (exists key1)

expire:为key设置一个有效期(单位为秒),例如 expire name 20。对于没有给设置有效期的key返回值则为-1(即为永久)。

ttl:查看一个key的剩余有效期。

String类型

String类型,字符串类型,是redis中最简单的存储类型

其value是字符串,根据字符串格式的不同,可以分为三类:

string:普通字符串

int:整数类型,可以做自增,自减操作

float:浮点类型,可以做自增,自减操作

string常见命令:


set:添加或修改一个已经存在的string类型的键值对,如set key1 value1

get:根据set的key来获取value,如get key1

mset:批量添加,如set key1 value1 key2 value2

mget:批量获取,如get key1 ke2

incr:自增1,incr key1,则value++;

incrby:自增并指定步长,incrby key2 5,则value+=5

setex:添加一个string类型的键值对,并且指定有效期,例如setex key1 10 value1,则有效十秒

setnx:添加一个string类型的键值对,前提是这个key不存在,否则不执行,例如setnx key1 value1

Redis的key的格式:

为防止id冲突,redis的key允许有多个单词形成层级结构,多个单词之间用‘:’隔开,格式如下:

[项目名]:[业务名];[类型]:[id]

并非固定,可以根据实际的业务需求来删除或添加词条。

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

◆ user 相关的 key: heima:user:1

◆ product 相关的 key: heima:product:1

即set heima:user:1 '{"id":1, "name": "Jack", "age": 21}'

其会在可视化软件中自动设置层级。

Hash 类型

Hash 类型,也叫散列,其 value 是一个无序字典,类似于 Java 中的 HashMap 结构。

String 结构是将对象序列化为 JSON 字符串后存储,当需要修改对象某个字段时很不方便:

KEYVALUE
heima:user:1{name:"Jack", age:21}
heima:user:2{name:"Rose", age:18}

Hash 结构可以将对象中的每个字段独立存储,可以针对单个字段做 CRUD:

KEYfieldvalue
heima:user:1nameJack
age21
heima:user:2nameRose
age18

Hash 类型的常见命令

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类型的常见命令

List 类型

List类似java中的的双向链表,可对两边进行push和pop操作

List 的常见命令
  • LPUSHkey element [...]:向列表左侧插入一个或多个元素
  • LPOPkey:移除并返回列表左侧的第一个元素,没有则返回 nil
  • RPUSHkey element [...]:向列表右侧插入一个或多个元素
  • RPOPkey:移除并返回列表右侧的第一个元素
  • LRANGEkey start end:返回一段角标范围内的所有元素
  • BLPOPBRPOP:与 LPOP 和 RPOP 类似,只不过在没有元素时等待指定时间,而不是直接返回 null

思考


1.如何利用list结构模拟一个栈?

入口和出口在同一边,即对一边进行操作即可。

2.如何利用list结构模拟一个队列?
入口出口不在同一边,即对两边分别进行push和pop操作。

3.如何利用list结构模拟一个阻塞队列?

入口出口在不同边,并在出队时采用BLPOP或者BRPOP。

Set类型

Redis 的 Set 结构与 Java 中的 HashSet 类似,可以看做是一个 value 为 null 的 HashMap。因为也是一个 hash 表,因此具备与 HashSet 类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

Set 类型的常见命令

  • SADDkey member ...:向 set 中添加一个或多个元素
  • SREMkey member ...:移除 set 中的指定元素
  • SCARDkey:返回 set 中元素的个数
  • SISMEMBERkey member:判断一个元素是否存在于 set 中
  • SMEMBERS:获取 set 中的所有元素
  • SINTERkey1 key2 ...:求 key1 与 key2 的交集
  • SDIFFkey1 key2 ...:求 key1 与 key2 的差集
  • SUNIONkey1 key2 ...:求 key1 和 key2 的并集

SortedSet 类型

Redis 的 SortedSet 是一个可排序的 set 集合,与 Java 中的 TreeSet 有些类似,但底层数据结构却差别很大。SortedSet 中的每一个元素都带有一个 score 属性,可以基于 score 属性对元素排序,底层的实现是一个跳表(SkipList)加 hash 表。SortedSet 具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快因为 SortedSet 的可排序特性,经常被用来实现排行榜这样的功能。

SortedSet 类型的常见命令

SortedSet 的常见命令有:

  • ZADDkey score member:添加一个或多个元素到 sorted set,如果已经存在则更新其 score 值
  • ZREMkey member:删除 sorted set 中的一个指定元素
  • ZSCOREkey member:获取 sorted set 中的指定元素的 score 值
  • ZRANKkey member:获取 sorted set 中的指定元素的排名
  • ZCARDkey:获取 sorted set 中的元素个数
  • ZCOUNTkey min max:统计 score 值在给定范围内的所有元素的个数
  • ZINCRBYkey increment member:让 sorted set 中的指定元素自增,步长为指定的 increment 值
  • ZRANGEkey min max:按照 score 排序后,获取指定排名范围内的元素
  • ZRANGEBYSCOREkey min max:按照 score 排序后,获取指定 score 范围内的元素
  • ZDIFF、ZINTER、ZUNION:求差集、交集、并集

SpringDataRedis快速入门

其可以在get过程中将对象反序列化,其会在写入json的同时写入该对象的class的字节码名称。

但与此同时,会带来额外的内存空间。

因此为了节省内存空间,并不会使用json序列化器来处理value,而是统一使用string序列化器,要求只能存储string类型的key和value,当需要存储java对象时,手动完成对象的序列化和反序列化,如下图所示:

至此,关于redis的基础部分就先搞一段落,谢谢大家。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 15:49:11

拆解 Hermes Agent 的动态 Prompt 和 learning loop 架构

什么是 Hermes Agent Hermes Agent 是 Nous Research 开源的自托管 AI Agent 项目。官方定位为一个会“随着你一起成长”的自改进 Agent:它不只是执行一次性问答,而是内置 learning loop,会从任务经验中创建技能,在使用过程中改进…

作者头像 李华
网站建设 2026/4/17 15:49:13

GeekOS信号量实战:用P/V操作解决生产者-消费者问题,附semtest测试详解

GeekOS信号量实战:用P/V操作解决生产者-消费者问题,附semtest测试详解 在操作系统的核心机制中,进程同步始终是开发者必须跨越的一道门槛。当我们面对多个进程共享有限资源时,如何避免竞态条件、确保数据一致性?信号量…

作者头像 李华
网站建设 2026/4/17 15:48:57

手敲Linux命令

Linux常用命令需要掌握那些? 1、常见基础文件命令 2、日志的查询 3、进程的排查 4、权限的管理 5、资源的查看 6、基础网络命令 7、基础的服务管理 1、最基础的文件命令: 打印当前目录:pwd 查看当前目录内容:ls -a可以看到隐藏文件…

作者头像 李华
网站建设 2026/4/17 15:47:38

Topit:三步搞定macOS窗口置顶,让你的工作效率翻倍!

Topit:三步搞定macOS窗口置顶,让你的工作效率翻倍! 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是不是经常在Mac上同时…

作者头像 李华
网站建设 2026/4/17 15:43:58

从“精读”到“泛用”:构建个人专属的英语学习策略体系

1. 为什么传统英语学习方法总是失效? 我见过太多人抱着厚厚的单词书从A背到Z,结果三个月后连"abandon"都拼不全。也遇到过每天刷两小时语法题的同学,碰到外国同事打招呼却只能挤出"Fine, thank you"。问题出在哪&#xf…

作者头像 李华