内容简介:在上一篇文章中,我们简单地讲了一下在这篇文章中,我们来讲一讲
在上一篇文章中,我们简单地讲了一下 Redis
的应用场景、安装、如何连接等比较基础的知识,那么在这篇文章,我们就再接再励,继续 Redis
基础知识的学习吧。
在这篇文章中,我们来讲一讲 Redis
的数据结构和通用命令。
Redis的数据结构
Redis
支持多种不同的数据结构,包括5种基础数据结构和几种比较复杂的数据,这些数据结构可以满足不同的应用场景。
五种基础数据结构
String Hash List Set Sort Set
复杂的数据结构
Bitmaps Hyperloglog Geo BloomFilter
不同数据结构的相同之处
从上面的介绍,我们看到支持的数据结构的不同,但其实, Redis的
每一种数据结构都由一个 key
和 value
组成,可以抽象为:
而所有数据结构的 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 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的过期时间,其返回值为整型,代表的意义分为几种情况:
- 当key不存在或过期时间,返回-2。
- 当key存在且永久有效时,返回-1。
- 当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
而已。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 人人都应该掌握的9种数据分析思维
- 程序员应该掌握的常用网络问题定位工具
- 有关于Java Map,应该掌握的8个问题
- 【五星推荐】每个Java工程师,都应该掌握数据库事务!
- 每一个Java工程师都应该掌握的全文搜索引擎!
- 选Python还是选Java?2020年,优秀程序员最应该掌握的7种编程语言
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!