专栏首页CSDN搜“看,未来”【redis学习】高级键管理

【redis学习】高级键管理

写在前面:本系列是我学习《深入理解Redis》的学习笔记。

文章目录
  • redis键
    • redis键模式
    • 键过期
    • 键的注意事项
  • 时间复杂度
  • redis数据结构
    • 字符串
    • 哈希
  • 文末总结

redis键

为了更有效地在应用程序中使用 Redis ,我们需要理解 Redis 是如何存储键的,并了解用于操作 Redis 实例中键空间的命令。

Redis 的灵活性允许各种不同的键构造和存储方案。 Redis 性能和可维护性的优劣取决于Redis 数据库键的设计与构造。 一种良好而又通用的实践是在设计 Redis 键时至少起草一份粗略概要,用于描述存入 Redis中的信息及采用何种 Redis 结构的初步想法

redis键模式

Redis 本身并没有模式检测或者验证的功能,不过我们仍然可以通过使用 EXISTS和 TYPE 这些 Redis命令实现一些基本的验证。如果应用需要明确特定类型的 Redis 键是否存在于实例中,可以通过使用 EXISTS 命令,随后使用 TYPE 命令确认该键是否是期望的 Redis 数据结构。

如果 Redis 应用会在不同的系统和组织中共享 ,那么为应用程序添加额外的验证逻辑层将十分有用。

另一种验证 Redis 键模式的方法是为 Redis 应用引人具体的单元测试,用来测试边界条件、模式键语法和结构,还有每个验证过的键所期望的数据结构。

我个人比较喜欢在测试的时候敲定这些环境变量,写在代码里边感觉有点肥。

Redis 键的命名不应当有任何神秘色彩: 对于一个简单的图书应用来说,基于文本的 Redis 模式示例如下所示:

强烈建议不要在生产环境的应用中使用 Redis KEYS 命令,这是因为 Redis 需要遍历数据库中每一个键。采用一致的命名约定及诸如集合、哈希或者有序集合这样的数据结构。

将所有体裁的键存储在 books:genres 集合中才是明智之举,这样应用程序就可以像使用索引一样,使用 SMEMBERS 命令快速获取所有图书体裁的键:

127.0.0.1 : 6379> SMEMBERS books:genres 
1 ) ” books:format:ebook ” 
2 ) ” books:genre:popular-fiction ” 
3 ) ” books:format:paperback” 
4 ) ” books:genre:sci-fiction ” 
5 ) ” books:sales-rank"

键过期

Redis的一个极其重要的特性是能够为键设置过期时间。 通过自动化删除过期键, Redis应用程序能够更好地管理数据库所使用的内存大小和使用情况,同时减少用于追踪数据中每个键的客户端代码量。

本部分后面再详谈,保留点神秘感。

键的注意事项

1)Redis 键的大小应该受到限制,自己把控。 2)Redis KEYS 命令应当在万不得已时使用,因为它会对 Redis 实例造成长时间的阻塞,甚至会导致 Redis 存耗尽。 3)在使用 SCAN 和相关的迭代器命令时需要注意的是,如果一个元素在从头到尾的迭代中不是始终存在,那么SCAN 令并不保证该元素能够返回。

时间复杂度

Salvatore Sanfilippo 有意将每个 Redis 命令的最坏算法性能整理成文放在 Redis 网站上。 传送门 找不到不要紧,过两天在我的博客里就找得到了。不过各位还得关注着点嘿嘿。

redis数据结构

字符串

Redis 值中最基本的数据结构为字符串,也就是和 Redis 键相同的数据类型。使用 Redis 最简单的方式就是字符串对字符串的键值存储。

Redis 字符串中最基础的 GET 和 SET 命令是 O(1)操作。这使得 Redis 作为简单的键值存储极其快速。

对于大多数 Redis 字符串操作来说,访问和采集命令的时间复杂度要么是 O(1),要么是O(n)。其中 O(n)字符串命令大多是块命令,例如 GETRANGE 和 MSET。

哈希

在Redis 中,所有的哈希值必须是 Redis 字符串,并且有唯一的字段名。字段的值是简单的 Redis 字符串,通过调用 Redis的 HGET或 HMGET 令, 同时传入合适的 Redis 键和一到多个字段参数,就能返回字段的值。对于大多数使用场景来说,Redis 哈希为 HSET、HGET 命令提供了很棒的 O(1)性能。与字符串块命令类似,哈希的HGETALL、HMSET、HMGET 、HKEYS、HVALS 命令均为O(n)。 如果哈希非常小,那么返回所有哈希键和值的 HGETALL和HMGET 命令之间没有十分明显差异。当哈希中键和值不断增长时,两者之间的差异可以让应用程序大不相同。

列表、集合、有序集合等数据结构都将在“Redis复杂度分析”中详谈。

文末总结

1)任何 Redis 应用程序都有两个关键部分,即键和这些键上存储的值。对大多数 Redis 解决方案来说,键的命名设计至关重要。

2)所有 Redis 数据结构的性能,以及对应的写和访问命令,都以大O号的形式进行了评估。

好像讲的不多,但是我觉得挺丰富哈哈哈。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【redis入门】redis安装后相关知识串讲

    redis默认情况下是不在后台运行的,如果要修改,还是打开那个配置文件。 找到:daemonize no,把no改成yes。

    看、未来
  • 【redis】闲得无聊,来聊聊当下爆火的 redis集群,顺便搭一个玩玩呗

    上一篇讲到了redis的主从复制与哨兵模式,不过最后也留下了个话茬:弊端:中心化。

    看、未来
  • 学以致用C++设计模式 之 “命令模式”

    前面说到我当程序员中介的经历,后来我就有点烦了,这客户有什么需求,都直接指名道姓找这个程序员那个程序员谈需求,我这会儿得给程序员A聊需求,过会儿得给程序员B聊需...

    看、未来
  • 我们为什么使用 Redis?

    如果你从来没使用过 Redis 数据库,那你肯定会问,为什么我们要用 Redis 数据库,我只使用 MySQL 或 Oracle 就够了。其实 Redis 虽叫...

    CSDN技术头条
  • Redis学习系列一Linux环境搭建

    Redis是互联网技术架构中在存储系统中用的最广泛的中间件,是中高级后端工程师技术面试中面试官最喜欢问的工程技能之一.所以Redis是.Net技术开发必须掌握的...

    郑小超.
  • 如何在云开发Cloudbase中使用Redis?

    云开发 Cloudbase 是腾讯云为移动开发者提供的云原生一体化应用开发平台,可用于开发多种客户端,它帮助开发者统一构建和管理资源,免去了应用开发过程中繁琐的...

    腾讯云开发TCB
  • Gavin老师:分布式缓存Redis高级应用实战(艾编程精品视频)

    【学完本节课你将掌握如下知识】 1、分布式缓存中间件选型 2、Redis作为单线程模式为什么效能还这么高? 3、Redis服务安装机常用命令解析 4、如...

    艾编程
  • 有了它,Redis不再是你技术面试中的阻碍

    Redis在互联网技术存储方面使用非常广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对求职小伙伴们进行各种刁难,特别是那些优秀的、竞争激烈的大型...

    博文视点Broadview
  • 大厂和初创公司都在用!Redis好在哪?终于有人讲明白了

    Redis从一个不为人熟知、只有少量应用的崭新数据库,逐渐变成了内存数据库领域的事实标准。时至今日,经过大量的实践应用,Redis简洁高效、安全稳定的特性已经深...

    华章科技
  • 大厂和初创公司都在用!Redis好在哪?终于有人讲明白了

    Redis从一个不为人熟知、只有少量应用的崭新数据库,逐渐变成了内存数据库领域的事实标准。时至今日,经过大量的实践应用,Redis简洁高效、安全稳定的特性已经深...

    用户5548425

扫码关注云+社区

领取腾讯云代金券