• 初识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
    
    • 1

    修改配置文件

    # vim /etc/redis.conf
    #设置访问ip
    bind 0.0.0.0
    #关闭保护模式
    protected-mode no
    # 启动守护进程
    daemonize yes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    守护进程也就是后台进程,避免Redis退出客户端导致进程退出。

    Redis中常用目录

    # 日志目录
    logfile /var/log/redis/redis.log
    # 功能目录
    dir /var/lib/redis
    
    • 1
    • 2
    • 3
    • 4

    启动redis

    # systemctl start redis
    
    • 1

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    全局命令

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

    keys

    通过一些特殊符号(通配符)来匹配key并查询到对应的key。

    KEYS pattern
    
    • 1

    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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    ?:匹配任意一个字符

    127.0.0.1:6379> keys str?
    1) "str4"
    2) "str2"
    3) "str3"
    4) "str1"
    5) "str5"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    [13]只是配1和3,其它不匹配

    127.0.0.1:6379> keys str[13]
    1) "str1"
    2) "str3"
    
    • 1
    • 2
    • 3

    [1-3]匹配1到3这个范围内的字符

    127.0.0.1:6379> keys str[1-3]
    1) "str2"
    2) "str3"
    3) "str1"
    
    • 1
    • 2
    • 3
    • 4

    不匹配s这个字符[^s]

    127.0.0.1:6379> keys [^s]*
    1) "redis"
    2) "hello"
    
    • 1
    • 2
    • 3

    或者是不匹配1到3[^1-3]

    127.0.0.1:6379> keys str[^1-3]
    1) "str4"
    2) "str5"
    
    • 1
    • 2
    • 3

    需要注意的是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
    
    • 1
    • 2

    在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
    
    • 1
    • 2
    • 3
    • 4

    该命令时间复杂度为 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
    
    • 1
    • 2
    • 3
    • 4

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

    pexpire

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

    127.0.0.1:6379> pexpire test 5000
    
    • 1

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

    TTL

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

    ttl key
    
    • 1

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

    PTTL

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

    pttl key
    
    • 1

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

    type

    返回key对应的数据类型

    type key
    
    • 1

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


  • 相关阅读:
    那么我们应该如何优化Youtube的视频呢?
    网络I/o编程模型11 netty常用的3种线程模型
    Echarts图表跟随父容器的变化自适应
    TS中interface接口的使用
    【Dotnet 工具箱】JIEJIE.NET - 强大的 .NET 代码混淆工具
    小巧有劲的按摩好手,能装兜里的护理工具,小鸟斗士筋膜枪体验
    Java开发二面被疯狂问JVM相关,被整懵了!!
    人大金仓助力国家电网调度中心培养国产数据库专家人才
    国产猫罐头的真实水准怎么样?真实水准好的猫罐头推荐
    从聚水潭到金蝶云星空通过接口配置打通数据
  • 原文地址:https://blog.csdn.net/weixin_53946852/article/details/132650431