初识Redis


初识Redis

1. 介绍

Redis是一个非关系型的数据库,基于客服端服务端这种形式实现,数据是以键值对的形式进行存储,且数据是存储的在内存中的。由于数据是在内存中进行存储对比想MySQL这样的在磁盘中存储的数据,Redis的优势就是快,对比MySQL可能要快上上万被,但使用Redis的劣势就是存储空间大小是有限的。在分布式场景中,Redis和MySQL一般是配合起来使用,Redis存储一些比较热门的数据来缓解MySQL的压力。

Redis的一些特点(优点):

  • 在内存中存储,速度快
  • 可以使用一些脚本语言对Redis执行一些批量操作
  • 提供了简单的TCP通讯,让绝大部分主流编程语言都可以操作Redis
  • 持久化,Redis把数据存储在内存上数据是容易丢失的,Redis会把数据存储在硬盘上,也就是内存为主硬盘为辅。相当于对内存中的数据进行了一个备份,如果Redis重启了,就会在重启的时候加载硬盘中的备份数据,使Redis的内存中的数据恢复到重启之前的状态。
  • 支持集群和主从复制的结构

Redis为什么快?

  1. Redis数据在内存中存储,访问内存比访问磁盘要快上万倍
  2. 从网络的角度上,Redis使用了IO多路复用(epoll)的方式,使用一个线程管理很多个socket
  3. Redis使用的是单线程模型(高版本中引入了多线程),单线程模型减少了不必要的线程之间相互竞争的开销
  4. Redis核心功能都是在操作作内存中的一些高效的数据结构

Redis的使用场景

  • 作为缓存和MySQL这样的数据库配置使用,储存热点数据缓解MySQL的压力
  • 在排行榜中使用,Redis提供了有序集合和列表,合理使用这些数据结果可以实现排行榜
  • 计数器,对于像视频浏览量这种频繁增加的场景使用向MySQL关系型数据库显然是不合适的。
  • 存储session,在分布式场景中使用Redis记录用户的登录状态,在其它机器上都能访问,即便其它主机服务重启也并不影响。

需要注意的是如果是单机服务器情况,存一些键值对数据时,redis是不如HashMap快的,因为redis是先从客户端通过网络再操作服务端操作内存,而HashMap是直接操作内存的。

2. 安装Redis

一下是在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

3. Redis命令

Redis支持很多种数据结构,整体来说Redis是以键值对的形式存储的,key是固定的字符串,value会涉及到多种类型,比如常见的字符串、哈希表、列表、集合、有序集合。操作不同的数据结果就会有不同的命令。在Redis中命令是不区分大小写的。

最常用命令

set&get

对于一下的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)

全局命令

全局命令就是能够搭配任意一个数据结构来进行使用。

keys

通过一些特殊符号(通配符)来匹配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 *执行时间是非常长的,就可能导致服务阻塞无法为其它客户端提供服务。

exists

判断指定的1个或多个key是否存在,返回其中key存在的个数

127.0.0.1:6379> exists str1 str2 str3
(integer) 3

在Redis中这些key是通过哈希表组织的。

该命令的时间复杂度为 O ( 1 ) O(1) O(1),返回值为存在的个数

del

删除指定的一个或者多个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)),返回值为删除的个数

expire

为指定的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表示设置失败。

pexpire

为指定的key设置过期时间,单位为秒毫秒。

127.0.0.1:6379> pexpire test 5000

时间复杂度为 O ( 1 ) O(1) O(1),放回值1表示设置成功,0表示设置失败。

TTL

获取指定key的过期时间,秒级

ttl key

时间复杂度: O ( 1 ) O(1) O(1)
返回值:剩余过期时间。-1表⽰没有关联过期时间,-2表⽰key不存在

PTTL

获取指定key的过期时间,毫秒级

pttl key

时间复杂度: O ( 1 ) O(1) O(1)
返回值:剩余过期时间。-1表⽰没有关联过期时间,-2表⽰key不存在

type

返回key对应的数据类型

type key

时间复杂度: O ( 1 ) O(1) O(1)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲代码的三毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值