Redis是一个非关系型的数据库,基于客服端服务端这种形式实现,数据是以键值对的形式进行存储,且数据是存储的在内存中的。由于数据是在内存中进行存储对比想MySQL这样的在磁盘中存储的数据,Redis的优势就是快,对比MySQL可能要快上上万被,但使用Redis的劣势就是存储空间大小是有限的。在分布式场景中,Redis和MySQL一般是配合起来使用,Redis存储一些比较热门的数据来缓解MySQL的压力。
Redis的一些特点(优点):
Redis为什么快?
Redis的使用场景
需要注意的是如果是单机服务器情况,存一些键值对数据时,redis是不如HashMap快的,因为redis是先从客户端通过网络再操作服务端操作内存,而HashMap是直接操作内存的。
一下是在Linux云服务器的Centos8中安装Redis。
# yum -y install redis
修改配置文件
# vim /etc/redis.conf
#设置访问ip
bind 0.0.0.0
#关闭保护模式
protected-mode no
# 启动守护进程
daemonize yes
守护进程也就是后台进程,避免Redis退出客户端导致进程退出。
Redis中常用目录
# 日志目录
logfile /var/log/redis/redis.log
# 功能目录
dir /var/lib/redis
启动redis
# systemctl start redis
Redis支持很多种数据结构,整体来说Redis是以键值对的形式存储的,key是固定的字符串,value会涉及到多种类型,比如常见的字符串、哈希表、列表、集合、有序集合。操作不同的数据结果就会有不同的命令。在Redis中命令是不区分大小写的。
对于一下的key和value不需要加上引号,就是表示的字符串类型,当然也是可以给key和value加上引用(单引号或双引号)。nil相当于null。
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> get str
"hello"
127.0.0.1:6379> get num
(nil)
全局命令就是能够搭配任意一个数据结构来进行使用。
通过一些特殊符号(通配符)来匹配key并查询到对应的key。
KEYS pattern
pattern 参数可以是包含特殊符号的字符串。
*
:匹配0个或者多个字符
127.0.0.1:6379> keys *
1) "str11"
2) "redis"
3) "str4"
4) "str2"
5) "str3"
6) "str1"
7) "hello"
8) "str222"
9) "str5"
127.0.0.1:6379> keys str*
1) "str11"
2) "str4"
3) "str2"
4) "str3"
5) "str1"
6) "str222"
7) "str5"
?
:匹配任意一个字符
127.0.0.1:6379> keys str?
1) "str4"
2) "str2"
3) "str3"
4) "str1"
5) "str5"
[13]
只是配1和3,其它不匹配
127.0.0.1:6379> keys str[13]
1) "str1"
2) "str3"
[1-3]
匹配1到3这个范围内的字符
127.0.0.1:6379> keys str[1-3]
1) "str2"
2) "str3"
3) "str1"
不匹配s这个字符[^s]
127.0.0.1:6379> keys [^s]*
1) "redis"
2) "hello"
或者是不匹配1到3[^1-3]
127.0.0.1:6379> keys str[^1-3]
1) "str4"
2) "str5"
需要注意的是keys
这个命令的时间复杂度为 O ( n ) O(n) O(n),特别是key *
效率是非常低的,由于Redis是单线程服务器使用key *
执行时间是非常长的,就可能导致服务阻塞无法为其它客户端提供服务。
判断指定的1个或多个key是否存在,返回其中key存在的个数
127.0.0.1:6379> exists str1 str2 str3
(integer) 3
在Redis中这些key是通过哈希表组织的。
该命令的时间复杂度为 O ( 1 ) O(1) O(1),返回值为存在的个数
删除指定的一个或者多个key
127.0.0.1:6379> del str1
(integer) 1
127.0.0.1:6379> del str2 str3
(integer) 2
该命令时间复杂度为 O ( 1 ) ) O(1)) O(1)),返回值为删除的个数
为指定的key设置过期时间,单位为秒。
127.0.0.1:6379> set times hello
OK
127.0.0.1:6379> expire times 10
(integer) 1
时间复杂度为 O ( 1 ) O(1) O(1),放回值1表示设置成功,0表示设置失败。
为指定的key设置过期时间,单位为秒毫秒。
127.0.0.1:6379> pexpire test 5000
时间复杂度为 O ( 1 ) O(1) O(1),放回值1表示设置成功,0表示设置失败。
获取指定key的过期时间,秒级
ttl key
时间复杂度: O ( 1 ) O(1) O(1)
返回值:剩余过期时间。-1表⽰没有关联过期时间,-2表⽰key不存在
获取指定key的过期时间,毫秒级
pttl key
时间复杂度: O ( 1 ) O(1) O(1)
返回值:剩余过期时间。-1表⽰没有关联过期时间,-2表⽰key不存在
返回key对应的数据类型
type key
时间复杂度: O ( 1 ) O(1) O(1)