Redis 基础教程

redis教程


redis 是非关系型的kv型数据库

  • 特点:
    1. 开源的, 使用C编写, 基于内存且支持之就花
    2. 支持数据类型丰富, 字符串strings, 散列hashes, 列表lists, 集合sets, 有序集合sorted sets等等
    3. 支持多种编程语言(C C++ python Javs PHP…)
    4. 单进程单线程

rediis 亮点功能

一. 字符串

  • 命令操作:

    • get key
      • 说明: 获取key的值
      • 返回值: key的值 或者 ‘nil’
    • set key value nx ex
      • 说明: 设置一个字符串的key
      • 特殊参数:
        nx -> not exist 代表key不存在时, 才储存这个值
        ex -> expire 过期时间, 单位s
    • strlen key
      • 说明: 获取key存储值得长度
    • getrange key start stop
      • 说明: 获取指定范围切片的内容 [包含start stop]
    • setrange key index value
      • 说明: 从索引开始, 用value替换原内容, 返回最新长度
    • mset key1 value1 key2 value2 key3 value3
      • 说明: 批量添加key和value
    • mget key1 key2 key3
      • 说明: 批量获取key的值
    • exists key
      • 说明: 查看key是否存在
  • 数值操作

    • incrby key 步长 将key增加指定的步长
    • decrby key 步长 将key减少指定的步长
    • incr key +1 操作
    • decr key -1 操作
    • incrbyfloat key strp
  • 应用场景

    1. 缓存
    • 说明 : 将mysql中的数据存储到redis字符串类型中
    1. 并发计数 = 点赞/秒杀
    • 说明: 通过redis单进程单线程的特点, 由redis负责计数, 并发问题转为串行问题
    1. 带有效期的验证码
    • 说明: 借助过期时间, 存放验证码, 到期后,
  • 删除机制

    每个redis数据库中, 都会有一个特殊的容器负责储存带有过期时间的key以及它对应的过期时间, 这个容器称之为"过期字典"

    针对过期字典中的key, redis结合 惰性删除和定期删除 两大机制, 有效删除过期数据

    • 惰性删除
      • 当调用key时, 检查是否过期, 如果过期则删除
    • 定期删除
      • 主动定期扫描过期字典中的数据, 检查是否过期

二. 列表

  • 基本概念
    1. 元素是字符串类型
    2. 列表头尾增删快, 中间增删慢, 增删元素是常态
    3. 元素可重复
    4. 最多可包含2^32-1个元素
    5. 索引同列表
  • 常用命令
    • 增加数据
      1. LPUSH key value1 value2

        • 说明: 从列表头部压入元素
        • 返回: list最新的长度
      2. RPUSH key value1 value2

        • 说明: 从列表尾部压入元素
        • 返回: list最新的长度
      3. RPOPLPUSH src dst

        • 说明: 从列表src尾部弹出1个元素, 压入到列表dst的头部
        • 返回: 被弹出的元素
      4. LINSERT key after|before value newvalue

        • 说明: 在列表指定元素后/前插入元素
        • 返回:
          1. 如果命令执行成功, 返回列表元素
            2, 如果没有找到pivot, 返回 -1
          2. 如果key不存在或为空列表, 返回0
      5. 查看列表元素

        LRANGE kwy start stop
        
      6. 获取列表长度

        LLEN key
        
      7. 从列表头部弹出1个元素

        LPOP key
        
      8. 从列表尾部弹出1个元素

        RPOP key
        
      9. 列表头部, 阻塞弹出, 列表为空时阻塞

        BLPOP key timeout
        
      10. 列表尾部, 阻塞弹出, 列表为空时阻塞

        BRPOP key timeout
        
        • 关于BLPOP 和 BRPOP 说明

          1. 如果弹出的列表不存在或者为空, 就会阻塞
          2. 超时时间设置为0, 就是永久阻塞, 知道有数据可以弹出
          3. 如果多个客服端阻塞再同一个列表上, 使用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
        • 场景:
          保存微博评论最后500条
          LTRIM weibo:comments 0 499
      13. LSET key index newvalue

        • 说明: 设置list指定索引的值
  • 应用场景:
    1. 存储微博评论, 做切割, 只保留最新的xx个
    2. 生产者消费者模型, 做中间层, 存放生产者的任务

三. 位图操作

  • 常用命令
    • SETBIT 命令
      • 说明: 设置某位置上的二进制值
      • 语法: SETBIT key offset value
      • 参数: offset - 偏移量 从0开始 value - 0 或者1
      • 两种情况
        1. key不存在时: 初始化最小字节数的bit位, 默认补0
        2. key存在时:
          • 满足长度要求, 直接修改当前bit位
          • 在原有value上初始化最小字节数的bit位
    • GETBIT 命令
      • 说明: 获取某一位上的值
      • 语法: GETBIT key offset
    • BITCOUNT 命令
      • 说明: 统计键所对的值中有多少个1
      • 语法: BITCOUNT key start end
      • 参数: start/end代表的是字节索引
      • 示例:
        	127.0.0.1:6379> set mykey ad
        	OK
        	127.0.0.1:6379> bitcount mykey
        	(integer) 6
        	127.0.0.1:6379> bitcount mykey 0 0
        	(integer) 3
        
    • 应用场景
      • 假设现在我们希望记录自己网站上的用户的上线频率, 比如说, 计算用户a上线了多少天, 用户b上线了多少天, 诸如此类, 以此作为数据, 从而决定让那些用户参加重要活动 —这个模式可以使用SETBIT和BITCOUNT来实现.
      • 比如说, 每当用户在某一天上线的时候, 我们就使用SETBIT, 以用户名作为key, 将那天所代表的网站的上线日
        作为offset参数, 并将这个offset上的位设置为1
      	举个例子:
      		如果今天是网站上线的第100天, 而用户Peter在今天阅览过网站, 那么执行命令 SETBIT peter 100 1; 如果
      	明天Peter也继续阅览网站, 那么执行命令SETBIT peter 101 1, 以此类推
      		当要计算Peter总共以来的上线次数时, 就使用BITCOUNT命令: 执行BITCOUNT peter, 得出的结果就是peter上线的总天数
      
    • 性能测试

      网站运行10年, 占用的空间也只是每个用户10*365比特位(bit), 也即是每个用户456字节, 对于这种大小的数据来说, BITCOUNT的处理速度就像GET和INCR操作一样快

四. 数据类型 - 哈希-1

  • 定义 :
    • 由field和关联的value组成的键值对
    • field和value是字符串类型
    • 一个hash中最多包含2^32-1个键值对

五. 数据类型 - 集合

  • 概念 :

    1. 无序, 去重
    2. 元素是字符串类型
    3. 最多包含2^32-1个元素
    4. 类似于python中所学的集合
  • 常用命令

    1. 增加一个或者多个元素, 自动去重; 返回值为成功插入到集合的元素合数
      SADD key member1 member2 
      
    2. 查看集合中所有元素
      SMEMBERS key
      
    3. 删除一个或者多个元素, 元素不存在自动忽略
      SREM key member1 member2
      
    4. 元素是否存在
      SISMEMBER key member
      
    5. 随机返回集合中指定个数的元素, 默认为1个
      SRANDMEMBER key [count]
      
    6. 弹出成员
      SPOP key [count]
      
    7. 返回元素的个数
      SCARD key
      
    8. 把元素从源集合移动到目标集合
      SMOVE source destination member
      
    9. 差集(number1 1 2 3 number2 1 2 4 结果为3)
      SDIFF key1 key2
      
    10. 差集保存到另一个集合中
      SDIFFSTOPRE destination key1 key2 
      ``
      
    11. 交集
      SINTER key1 key2
      SINTERSTORE destination key1 key2
      
    12. 并集
      SUNION key1 key2
      SUNIONSTORE destination key1 key2
      
  • 应用场景

    • 是社交类平台, 共同好友 - 交集
    • 纯随机类抽奖
    • 防止元素重复
    • 累/白名单

六. 数据类型 - 有序集合

  • 基础概念
    1. 有序, 去重
    2. 元素是字符串类型
    3. 每个元素都关联着一个浮点数分值(score), 并按照分值从小到大的顺序排列集合中的元素(分值可以相同)
    4. 最多包含2^32-1元素
  • 常用命令
    1. 在有序集合中添加一个成员, 返回值为 成功插入集合中的元素个数

      zadd key score member
      
    2. 查看指定区间元素(升序)

      zrange key start stop [withscores]
      
    3. 查看指定区间元素(降序)

      zrevrange key start stop [withscores]
      
    4. 查看指定元素的分值

      zscore key member
      
    5. 返回指定区间元素

      zrangebyscore key min max [withscores] [limit offset count]
      
      • 参数说明:
        • min/max:最小值/最大值区间, 默认闭区间(大于等于或小于等于); (min, 可开启开区间即(大于或小于)
        • offset: 跳过多少个元素
        • count: 返回几个
        • limit选项跟mysql一样
    6. 删除成员

      zrem key member
      
    7. 增加或减少分数

      zincrby key increment member
      
    8. 返回元素排名

      zrank key member
      
    9. 返回元素逆序排序

      zrevrank key member
      
    10. 删除指定区间的元素 (默认闭区间, 可做开区间)

      zremrangebyscore key min max
      
    11. 返回集合中元素个数

      zcard key
      
    12. 返回指定范围中元素的个数 (默认闭区间, 可做开区间)

      zcount key min max
      
    13. 并集

      zunionstore destination numkeys key [weights 权重值] [AGGREGATE SUM|MIN|MAX]
      

      zunionstore salary3 2 salary salary2 weights 1 0.5 AAREGATE MAX

      2代表集合数量, weights之后, 权重1给salary, 权重0.5给salary2集合, 算完权重之后执行聚合AGGREGATE

    14. 交集

      zinterscore destination numkeys key [weights 权重值] [AGGREGATE SUM|MIN|MAX]
      

      参数同并集

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值