后端开发应该掌握的Redis基础

栏目: 数据库 · 发布时间: 5年前

内容简介:在上一篇文章中,我们简单地讲了一下在这篇文章中,我们来讲一讲

在上一篇文章中,我们简单地讲了一下 Redis 的应用场景、安装、如何连接等比较基础的知识,那么在这篇文章,我们就再接再励,继续 Redis 基础知识的学习吧。

在这篇文章中,我们来讲一讲 Redis 的数据结构和通用命令。

Redis的数据结构

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

五种基础数据结构

String
Hash
List
Set
Sort Set

复杂的数据结构

Bitmaps
Hyperloglog
Geo
BloomFilter

不同数据结构的相同之处

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

后端开发应该掌握的 <a href='https://www.codercto.com/topics/18994.html'>Redis</a> 基础
Redis数据结构组成

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

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

后端开发应该掌握的Redis基础

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

后端开发应该掌握的Redis基础

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

Redis的通用命令

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

keys

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

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

示例

> mset hello_test1 one hello_test2 two helloa a hellob b
> 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 而已。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法技术手册(原书第2版)

算法技术手册(原书第2版)

George T. Heineman、Gary Pollice、Stanley Selkow / 杨晨、曹如进 / 机械工业出版社 / 2017-8-1 / 89.00元

本书使用实际代码而非伪代码来描述算法,并以经验主导支撑数学分析,侧重于应用且规范严谨。本书提供了用多种程序设计语言实现的文档化的实际代码解决方案,还介绍了近40种核心算法,其中包括用于计算点集的Voronoi图的Fortune算法、归并排序、多线程快速排序、AVL平衡二叉树实现以及空间算法。一起来看看 《算法技术手册(原书第2版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具