Redis基础操作学习笔记

/ 0评 / 0

一、Redis介绍

  1. 特点及优点
    • 开源、C语言编写,基于内存存且支持持久化
    • 高性能的Key-Value的NoSQL数据库
    • 支持数据类型丰富,字符串strings,散列hashes,列表lists,集合sets,有序集合sorted sets等等
    • 支持多种编程语言(C C++ Python Java PHP ...)
    • 单进程单纯种
  2. 与其他数据库对比
    • MySQL: 关系型数据库,表格,基于磁盘,慢
    • MongoDB:键值对文档类型数据库,值为类似JSON文档,数据结构相对单一
    • Redis的诞生是为了解决磁盘IO带来的性能瓶颈
  3. 应用场景
    • 缓存
    • 并发计数
    • 排行榜
    • 生产者消费者模型
  4. 附加功能
    • 持久化: 将内在中数据保存到磁盘中,保证数据安全,方便进行数据备份和恢复
    • 过期键功能: 为键设置一个过期时间,让它在指定时间内自动删除,节省内存空间
    • 事务功能: 原子执行多个操作
    • 主从复制 (集群codis)
    • Sentinel哨兵

二、安装

  1. linux安装

    # 安装
    sudo apt-get install redis-server
    # 服务端启动
    sudo /etc/init.d/redis-server status | start | stop |   restart
    # 客户端连接
    redis-cli -h IP地址 -p 6379 -a 密码
    
  2. 配置文件解析

    #配置文件所在路径 /etc/redis/redis.conf
    #设置连接密码
    1、requirepass 密码
    2、重启服务
        sudo /etc/init.d/redis-server restart
    3、客户端连接
        redis-cli -h 127.0.0.1 -p 6379 -a 123456
        127.0.0.1:6379>ping
    
    #允许远程连接
    1、注释掉本地IP地址绑定
        69行: # bind 127.0.0.1 ::1
    2、关闭保护模式(把yes改为no)
        88行: protected-mode no
    3、重启服务
        sudo /etc/init.d/redis-server restart
    
    #通用命令(适用所有数据类型)
        # 切换库(number的值在0-15之间,db0 ~ db15)
        select number
        # 查看键
        keys 表达式  # keys *
        # 数据类型
        type key
        # 键是否存在
        exists key
        # 删除键
        del key
        # 键重命名
        rename key newkey
        # 清除当前库中所有数据(慎用)
        flushdb
        # 清除所有库中所有数据(慎用)
        flushall
    

三、数据类型

  1. 字符串类型(string)

    • 特点
      • 字符串、数字都会转为字符串存储
      • 以二进制方式存储在内存中
    • 常用字符串(须掌握)

      # 1. 设置一个key-value
      set key value
      # 2. 获取key的值
      get key
      # 3. key不存在时再进行设置(nx)
      set key value nx  # not exists
      # 4. 设置过期时间(ex)
      set key value ex seconds
      ​
      # 5. 同时设置多个key-value
      mset key1 value1 key2 value2 key3 value3
      # 6. 同时获取多个key-value
      mget key1 key2 key3 
      # 7. 获取有效期(-1:无期限,-2:有效期已过期)
      get ttl
      
    • 字符串常用命令

      # 1.获取长度
      strlen key
      # 2.获取指定范围切片内容 [包含start stop]
      getrange key start stop
      # 3.从索引值开始,value替换原内容
      setrange key index value
      
    • 数值操作(字符串类型数字)

      #整数步长
      incrby key 步长
      decrby key 步长
      incr key :+1操作
      decr key :-1操作
      #浮点操作:自动先转为数字类型,然后再进行相加减,不能使用append
      incrbyfloat key step
      
    • string命令汇总

      # 字符串操作
      1、set key value
      2、set key value nx
      3、get key
      4、mset key1 value1 key2 value2
      5、mget key1 key2 key3
      6、strlen key
      #返回旧值并设置新值(如果键不存在,就创建并赋值)
      7、getset key value
      
      # 数字操作
      8、incrby key 步长
      9、incrby key 步长
      10、incr key
      11、decr key
      12、incrbyfloat key number  #(number可为正或负)
      
      # 设置过期时间两种方式
      # 方式1
      1、set key value ex 3
      # 方式2
      1、set key value
      2、expire key 5 #秒
      3、pexpire key 5 #毫秒
      # 查看存活时间
      ttl key
      # 删除过期
      persist key
      
      # string数据类型注意
      # key命令规范
      可采用 - wang:email
      # key命名原则
      1、key值不宜过长,消耗内存,且在数据中查找这类键值的计算成本高
      2、不宜过短,可主动性较差
      # 值
      1、一个字符串类开的值最多能存储512M内容
      
    • 业务场景

      • 缓存
        • 将mysql中的数据存储到redis字符串类型中
      • 并发计数 - 点赞/秒杀
        • 说明:通过redis单进程单线程的特点,由regid负责计数,并发问题转为串行问题
      • 带有效期的难码 - 短信验证码
        • 借助过期时间,存储验证码;到期后,自动消亡
  2. 列表数据类型

    • 特点

      1、元素是字符串类型
      2、列表头尾增删快,中间增删慢,增删元素是常态
      3、元素可重复
      4、最多可包含2^32 -1个元素
      5、索引同python列表
      
    • 列表常用命令

      # 增
      1、从列表头部压入元素
          LPUSH key value1 value2
          返回:list长度
      2、从列表尾部压入元素
          RPUSH key value1 value2
          返回:list长度
      3、从列表src尾部弹出1个元素,压入到列表dst的头部
          RPOPLUSH src dst
          返回:被弹出的元素
      4、在列表指定元素后/前插入元素
          LINSERT key after|before value newvalue
          返回:
              1、如果命令执行成功,返回列表的长度
              2、如果没有找到pivot,返回-1
              3、如果key不存在或为空列表,返回0
      
      # 查
      5、查看列表中元素
          LRANGE key start stop
          # 查看列表中所有元素: LRANGE key 0 -1
      6、获取列表长度
          LLEN key
      
      # 删
      7、从列表头弹出1个元素
          LPOP key
      8、从列表尾部弹出一个元素
          RPOP key
      9、列表头部,阻塞弹出,列表为空时阻塞
          BLPOP key timeout
      10、列表尾部,阻塞弹出,列表为空时阻塞
          BRPOP key timeout
      #BLPOP和BRPOP
          * 如果弹出的列表不存在或为空,就会阻塞
          * 超时时间设置为0,就是永久阻塞,直到有数据可以弹出
          * 如果多个客户端阻塞再同一个列表上,使用First In First Service原则,先到先服务
      11、删除指定元素
          LREM key count value
          count>0: 表示从头部开始向表尾搜索,移除与value相等的元素,数量为count
          count<0: 表示从尾部开始向表头搜索,移除与value相等的元素,数量为count
          count=0: 移除表中所有与value相等的值
          返回: 被移除元素的数量
      12、保留指定范围内的元素
          LTRIM key start stop
          返回: ok
          例:LRTIM mylist1 0 2 #只保留前3条
      
      # 改
      13、将列表key下标为index 的元素值设置为value
          LSET key index newvalue    
      

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注