后端开发应该掌握的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 而已。


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

查看所有标签

猜你喜欢:

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

Visual Thinking

Visual Thinking

Colin Ware / Morgan Kaufmann / 2008-4-18 / USD 49.95

Increasingly, designers need to present information in ways that aid their audiences thinking process. Fortunately, results from the relatively new science of human visual perception provide valuable ......一起来看看 《Visual Thinking》 这本书的介绍吧!

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

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具