redis学习记录留存 - 基础知识入门

3.1 热身
  • 通配符

    ?    匹配一个字符
    *    匹配任意个(包括0)个字符
    []   匹配括号内任意一个字符,可用"-"表示范围。
    \x   匹配字符x,用于转义符号,如要匹配"?"需要使用"\?"
    
  • 判断一个键是否存在

    exists key
    
  • 删除键

    DEL key[key ...]
    

    删除一个或多个键,返回删除个数

  • 获得键值的数据类型

    TYPE key
    
  • 清除数据库的所有证据

    FLUSHALL  -- 清空所有数据库数据
    
3.2 string类型

一个字符串类型键允许存储的数据的最大容量是512MB

b. 介绍
a. 命令
  • 赋值与取值
    SET key value
    GET key
    
  • 递增数字
    INCR key            // int  +1
    INCRby key num      // int  +num
    INCRbyfloat key num // float  + num
    
    DECR key            // int  -1
    
c. 实践
  • 计数功能

  • 各类场景下(单机或分布式)的识别号

  • 集群环境下的session共享

d. 命令拾遗
  • 向尾部增加值 append key value
  • 获取字符串长度 STRLEN key
  • 同时获取多个值 MGET key [key...]
  • 位操作
3.3 hash类型
a. 介绍

Hash的字段值只能是字符串,不支持其它数据类型
一个Hash类型键可以包含至多 2^32-1个字段
其它数据类型同样不支持数据类型嵌套

b. 命令
  • 单个赋值、取值

    HSET key field value
    HGET key field
    
  • 批量赋值、取值

    HMSET key field value [field value]
    HMGET key field [field...]
    
    HGETALL key 获取所有的字段和值
    

    Redis中每个键都属于一个明确的数据类型

  • 判断字段是否存在

    HEXISTS key field
    
  • 判断字段是否存在,不存在则赋值

    HSETNX key field value
    
  • 增加数字

    HINCRBY key field increment
    
  • 删除字段

    HDEL key field [field ...]
    
c. 实践
  • 存储文章数据
    表头、作者、日期、内容等按字段存储
    无论获取还是修改,都可以只对某一个属性操作;同时比string更加节约空间

  • 存储文章缩略名
    文章缩略名为构建该文章网址的一部分

d. 命令拾遗
  • 只获取字段名或字段值
    HKEYS key
    HVALS key
    
  • 获取字段数量
    HLEN key
    
3.4 list类型
a. 介绍

LIST可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表
某一片段。

列表类型内部是使用双向链表实现的,所以向列表两端添加元素的时间复杂度为O(1)

链表的代价是索引元素比较慢

b. 命令
  • 向列表两端增加元素
    LPUSH key value [value ...]
    RPUSH key value [value ...]
    
  • 从两端读取元素
    LPOP key
    RPOP key
    
  • 队列长度
    LLEN key
    
  • 获得列表片段
    LRANGE key start stop //负数表示右边计数 -1指右边第一个
    
  • 删除列表中指定的值
    LREM key count value  //删除前count个值为value的元素
    
    count为负指从右遍删,为0贼是删除所有
c. 实践
  • 存储文章ID列表
  • 存储评论列表
  • 微信订阅号
  • 发布消息 lpush mes:004 999
  • 展示消息列表 lrange mes:004 0 5
d. 命令拾遗
  • 获得/设置指定索引的元素值
    LINDEX key index
    LSET key index value
    
  • 只保留列表指定片段
    LTRIM key start end  // 和LPUSH一起,限制元素数量
    
  • 向列表中插入元素
    LINSERT key BEFORE|AFTER pivot value
    
  • 将一个元素转移到另一个列表
    RPOPLPUSH source destination
    
3.5 Set集合
a. 介绍

一个map类型可以存储至多2^32-1个字符串
唯一 、 无序

b. 命令
  • 增加/删除元素
    SADD key memeber [member ...]
    SREM key memeber [member ...]
    
  • 获得集合中的所有元素
    SMEMBERS key
    
  • 获取集合的个数
    SCARD key
    
  • 判断是否在集合中
    SISMEMBER key memeber
    
  • 集合间运算
    SDIFF  key [key ...]  // 差集,第一个key
    SINTER key [key ...] // 交集
    SUNION key [key ...] // 并集
    
c. 实践
  • 存储文章标签
  • 微博关系实现
d. 命令拾遗
  • 进行集合运算并将结果存储
    SDIFFSTORE  destination key [key ...]
    SINTERSTORE destination key [key ...]
    SUNIONSTORE destination key [key ...]
    
  • 随机获得集合中的元素
    SRANDMEMBER key [count]
    
    count > 0 && count < max 返回不重复的元素
    count >= max 返回所有元素
    count < 0 返回 |count| 个元素,可能重复
  • 从集合中弹出一个元素
    SPOP key // 随机弹出一个元素
    
3.5 Zset类型
a. 介绍

有序集合和列表类型

  • 相同点

    1. 两者都是有序的
    2. 二者都可以获得某一范围的元素
  • 不同点

    1. 列表类型是通过链表实现的,获取看靠近两端的数据速度极快,而当元素增多后,访
      问中间数据会变慢,适合 新鲜事日志 这样很少访问中间元素的应用
    2. 有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以读取中间数据的速
      度也很快(时间复杂度O(log(N)))
    3. 列表不能简单调整某个元素的位置,有序集合可以(更改元素的分数)
    4. 有序集合比列表更耗费内存
b. 命令
  • 增加元素
    ZADD key score member [socre member]
    
  • 获得元素的分数
    ZSCORE key member
    
  • 获得排名在某个范围的元素列表
    ZRANGE    key start stop [WITHSCORES]
    ZREVRANGE key start stop [WITHSCORES]
    
  • 获得指定分数范围的元素
    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
    
  • 增加某个元素的分数
    ZINCRBY key increment memeber
    
c. 实践
  • 实现按点击量排序

  • 改进按时间排序

  • 腾讯新闻话题榜设计

    • 点击话题
      zincrby topic:0423 1 article:1
    • 右侧排行实现
      topic:0212 0 9 withscores
    • 统计近3日点击数据
      zunionstore topic:3day 3 topic:0212 topic:0211 topic:0210
    • 展示近3日的排行前9名
      zrevrange topic:3day 0 9 withscores
d. 命令拾遗
  • 获得集合中元素的数量
    ZCARD key
    
  • 获得指定分数范围的元素个数
    ZCOUNT key min max 
    
  • 删除一个或多个元素
    ZREM key memeber [member ...]
    
  • 按照排名范围删除元素
    ZREMRANGEBYRANK key start sop
    
  • 按照分数范围删除元素
    ZREMRANGEBYSCORE key min max 
    
  • 获得元素排名
    ZRANK key member
    ZRERANK key memeber
    
  • 计算有序集合的交集
    ZINTERSTORE destination numkeys key [key ...] 
    [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
    
    1. AGGREGATE是SUM时,参与计算的集合中该元素分数的和
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值