Redis的数据结构

Redis支持多种不同的数据结构,包括5种基础数据结构和几种比较复杂的数据,这些数据结构可以满足不同的应用场景。

五种基础数据结构

String:字符串,是构建其他数据结构的基础

Hash:哈希列表

List:列表

Set:集合,在哈希列表的基础上实现

Sort Set:有序集合

复杂的数据结构

Bitmaps:位图,在string的基础上进行位操作,可以实现节省空间的数据结构。

Hyperloglog:用于估计一个 set 中元素数量的概率性的数据结构。

Geo:geospatial,地理空间索引半径查询。

BloomFilter:布隆过滤器。

不同数据结构的相同之处

从上面的介绍,我们看到支持的数据结构的不同,但其实,Redis的每一种数据结构都由一个key和value组成,可以抽象为:

Redis数据结构组成

而所有数据结构的key的值都是任意合法的字符串,不同的数据结构的区别就在于value存储的值的不同而不同。

比如,最简简单的String数据结构,其value为String,所以String可以表示为:

而Hash数据结构,其value为一个哈希列表,所以Hash可以表示为:

这里就列出String和Hash来讲解说明,关于更多数据结构的内部结构及详细操作,我们在之后的文章在再谈谈吧。

Redis的通用命令

Redis官网将Redis的命令按照功能划分为15个主题分组,其中,Kyes主题的命令对所有的数据结构都通用,因此,有必要在了解其他数据结构命令前好好学习一下。

keys

keys命令的作用是列出Redis所有的key,该命令的时间复杂度为O(N),N随着Redis中key的数量增加而增加,因此Redis有大量的key,keys命令会执行很长时间,而由于Redis是单线程,某个命令耗费过长时间,则会导致后面的的所有请求无法得到响应,因此,千万不要在生产服务器上使用keys命令。

# key命令,时间复杂度为O(n)
keys pattern #pattern可为一个包含匹配模式的字符串,可以包含*,+,?,[a-z]等模式。

示例

> mset hello_test1>> keys hello*
1) "hello_test1"
2) "hello_test2"
3) "helloa"
4) "hellob"
> keys heelo?
1) "helloa"
2) "hellob"
> keys hello[a-z]
1) "helloa"
2) "hellob"

exists

exists命令用于判断一个或多个key是否存在,判断多个key时,key之间用空格分隔,exists的返回值为整数,表示当前判断有多少个key是存在的。

# exists命令,时间复杂度O(1)
exists key [key ...]

示例

> set test1 t1
> exists test1 test2
(integer) 1 #只有一个key存在
> exists test3 test3
(integer) 0 #key都不存在

del

del命令用于删除一个或多个key,多个key之间用空格分隔,其返回值为整数,表示成功删除了多少个存在的key,因此,如果只删除一个key,则可以从返回值中判断是否成功,如果删除多个key,则只能得到删除成功的数量。

# del命令,时间复杂度O(n)
del key [key ...]

示例

> set test t
> del test
(integer) 1
> mset test1 2 test2 1
> del test1 test2 test3
(integer) 2 # 返回2,表示成功删除两个
#再次删除,返回0,因为删除成功个数为0
> del test1 test2 test3
(integer) 0

expire,pexpire

expire设置key在多少秒之后过期,pexpire设置key在多少毫秒之后过期,成功返回1,失败返回0。

# expire命令,时间复杂度为O(1)
expire key seconds# pexpire命令,时间复杂度为O(1)
pexpire key milliseconds

示例

> mset test test_value test1 test1_value
> expire test 10 #设置10秒后过期
(integer) 1
> pexpire test1_value 10000 #设置10000毫秒(10s)后过期
(integer) 1
> expire ttt 100
(integer) 0 # 不存在的key,设置失败,返回0

ttl,pttl

ttl和pttl命令用于获取key的过期时间,其返回值为整型,代表的意义分为几种情况:

  1. 当key不存在或过期时间,返回-2。

  2. 当key存在且永久有效时,返回-1。

  3. 当key有设置过期时间时,返回为剩下的秒数(pttl为毫秒数)

# ttl命令,时间复杂度O(1)
ttl key# pttl命令,时间复杂度O(1)
pttl key

示例(ttl的演示,pttl类似)

> set test test
> expire test 100
> ttl test
(integer) 98#返回剩下的秒数
> set test1 #永久有效
> ttl test1
(integer) -1
> ttl test2
(integer) -2#不存在或过期
#100秒后
> ttl test # test已过期
(integer) -2

expireat,pexpireat

设置key在某个时间戳过期,expreat参数时间戳用秒表示,而pexpireat则用毫秒表示,与expire和pexpire功能类似,返回1表示成功,0表示失败。

#expireat命令,时间复杂度为O(1)
expireat key timestamp#pexpireat命令,时间复杂度为O(1)
pexpireat key milliseconds-timestamp

示例

> set test test
> expireat test 1560873600 # 2019-06-19 00:00:00
(integer) 1
> set test1 test1
> pexpireat test1 156087360000 # 2019-06-19 00:00:00的毫秒表示
(integer) 1

persist

移除key的过期时间,将key设置为永久有效,当key设置了过期时间,使用persist命令移除后返回1,如果key不存在或本身就是永久有效的,则返回0。

# persist命令,时间复杂度O(1)
persist key

示例

> set test test
> ttl test
(integer) -1 # 表示永久有效
> persist test
(integer) 0 # 对永久有效或不存在的key使用persist命令,返回
> expire test 10
(integer) 1
> persist test
(integer) 1

type

判断key是什么类型的数据结构,返回值为string,list,set,hash,zset,分别表示我们前面介绍的Redis的5种基础数据结构。

geo,hyperloglog,bitmaps等复杂的数据结构,都是在这五种基础数据结构上实现,比如geo是zset类型,hyperloglog和bitmaps都为string。

# type命令,时间复杂度O(1)
type key

示例

> set test test
> type test
string
> hset htest test test
> type htest
hash

小结

上面介绍的是Redis中最常用的通用命令,虽然简单,但还是非常有必要掌握其用法和使用方面要注意的事项,其实,对于普通开发人员来说,很多时候,也只是使用这些基础通用的命令来操作Redis而已。

来源:juejin.im/post/5d078cd6f265da1b8466e62c

后端开发应该掌握的 Redis 基础相关推荐

  1. python后端开发学什么_零基础学Python,这是阿里Python8年开发经验写给你的学习路线图...

    今天给大家分享一位前辈整理的一个Python web学习路线.这位前辈由于有编程基础,所以采用了自学Python的方式.学完后主要做后端开发.希望对你有所启发. 整理的一个 python web 学习 ...

  2. 【直通BAT】BAT后端开发36题:Redis、Nosql、Mysql、秒杀题目!含面试经验总结!(优知学院公众号)

    BAT一面:java高级和算法 java高级内容: 你对集合那么熟悉,看过哪些源码?HashMap,HashTable,ConcurrentHashMap等等 讲到ArrayList,讲一下初始长度, ...

  3. IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略

    IT:后端进阶技术路线图(初级→中级→高级).后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介.技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略 目录 后端 ...

  4. 后端开发必须要懂的Redis,Redis的数据结构

    认识Redis与Redis的数据结构 本文作为Redis的通识教程,旨在让大家对Redis有一个概念性和整体性的认识,并且可以快速上手,为深入Redis打下基础. 文章概要: Redis的介绍 Red ...

  5. 后端开发基础能力以及就Java的主流开发框架介绍

    前言:java语言开发转后端,必须了解后端主流的一些东西,共勉. 后端开发需要具备以下基础能力: 1.编程语言:熟练掌握至少一门编程语言,如Java.Python.Ruby.PHP.C#等. 2.数据 ...

  6. php 监听redis,php监听redis key失效触发回调事件_后端开发

    php中使用fsockopen实现异步请求(代码示例)_后端开发 php执行一段程序,有可能几毫秒就执行完毕,也有可能耗时较长.例如,用户下单这个事件,如果调用了些第三方服务进行发邮件.短信.推送等通 ...

  7. php redis 关闭,php redis如何关闭_后端开发

    php如何替换中文字符_后端开发 php替换中文字符的方法:首先打开"mb_string"扩展:然后用双字节可靠的"mb_ereg_replace"函数实现替换 ...

  8. 揭开后端开发-中间组件、内存数据库Redis的迷雾,听完瞬间豁然开朗丨C/C++Linux服务器开发丨中间件

    揭开后端开发-中间组件.内存数据库Redis的迷雾,听完瞬间豁然开朗 视频讲解如下: 揭开后端开发-中间组件.内存数据库Redis的迷雾,听完瞬间豁然开朗丨C/C++Linux服务器开发丨中间件丨组件 ...

  9. redis,memcached到nginx,底层网络io中剥离精髓丨C/C++Linux丨C++后端开发丨Linux服务器开发丨底层原理

    redis,memcached到nginx,底层网络io中剥离精髓 1. redis单线程网络的优缺点 2. memcached多线程网络的并发优势 3. nginx多进程网络的优势 视频讲解如下,点 ...

最新文章

  1. 教你如何反编译Android安装文件apk来偷窥源代码
  2. C++ 在线编译器(支持 C++11)
  3. 巧用DOS命令合并多个文本文件的内容
  4. 产品问答 | 作为项目负责人,怎么提升成员工作斗志?
  5. boost::geometry模块model::polygon相关的测试程序
  6. C++入门经典-例4.1-声明、定义和使用函数
  7. arduino编译失败_Arduino编译时失败
  8. 地址池命令 思科理由_论CCNA基础之常用命令
  9. Golang 交叉编译
  10. 编程:休息片刻的好处
  11. mysql利用tgz恢复_Mysql备份与恢复方法_MySQL
  12. r语言legend_R语言画热图时图例(legend)过多超出画图边界
  13. Java Web应用小案例:猜数小游戏
  14. 五道口服装市场关闭前 职业“甩货人”赚一笔
  15. 自食其力!ASP.NET 4打造HTML5视频控件
  16. spring生命周期七个过程_想要学会Spring源码,你必知必会的BeanDefinition原理!
  17. 大数据Hadoop原理介绍+安装+实战操作(HDFS+YARN+MapReduce)
  18. php虚线_实现css虚线样式的两种方式:dotted和dashed(实例)
  19. 2021年G3锅炉水处理考试内容及G3锅炉水处理模拟试题
  20. Excel表格文本/数字/科学计数法的格式转换问题

热门文章

  1. halcon hough_lines 霍夫直线变换
  2. js变量提升_一道JS变量提升题
  3. matlab 读取excel一列,读取excel中的数据把第一列相同的所有行数据输出成一个excel...
  4. php生成图片验证码代码,PHP生成图片验证码以及点击切换的代码
  5. wordpress漏洞上传php文件夹,WordPress Asset-Manager PHP文件上传漏洞
  6. 计算整数中各位数字之和
  7. 史蒂夫乔布斯6月斯坦佛大学演讲: 必须找到你所钟爱的东西
  8. RH124-3 目录结构_转
  9. Android之PhotoView使用(原创)
  10. vl_sift函数用法