redis 基础与字符串类型

  1. 全局命令
  • 查看所有键:keys *
  • 查看键总数:dbsize,dbsize 是直接读取redis内置的键总数变量,而keys * 则会遍历所有键,当键数量很大时,线上环境keys * 禁止使用
  • 查看键是否存在:exists key,存在返回1,不存在返回0
  • 删除键:del key [key1…],返回结果为删除的键数目,删除一个不存在的键则返回0,可以同时删除多个键
  • 设置键过期时间:expire key seconds,键到期系统会自动将它删除
  • 返回键过期剩余时间:ttl key,返回值大于等于0表示剩余键过期时间,-1表示未设置键过期时间,-2表示键不存在
  • 键的数据类型:type key,键不存在则返回none
  1. redis是单线程架构

  2. 数据类型

  • 字符串

    • 字符串的值最大不能超过512M
    • 设置值
    set key value [ex seconds] [px milliseconds] [nx|xx]
    

    ex seconds:表示级过期时间

    px milliseconds:表示毫秒级过期时间

    nx:表示键必须不存在,才能添加成功,用于添加一个新键,合成简写命令 setnx,

    根据setnx的特性只有一个客户端能设置成功,setnx可以作为分布式锁的一种实现方案,Redis官方给出了使用setnx实现分布式锁的方法:http://redis.io/topics/distlock

    xx:与nx相反,键必须存在,才能添加成功,用于修改一个键,合成简写命令 setxx

    • 获取值

    get key,如果键不存在,则返回nil(空)

    • 批量设置值:mset

    • 批量获取值:mget,不存在的键返回nil,批量操作可以提高效率

    • 自增操作:incr key,键不是整数,返回错误,键是整数,返回加1后的结果,键不存在,按照值为0自增,返回结果为1

    • 内部编码:

      • int:8个字节的长整形
      • embstr:小于等于39个字节的短字符串
      • raw:大于39个字节的长字符串
    • 命名注意事项:redis没有命名空间,合理的键命名有利于防止键冲突和项目的维护,比较推荐的方式是使用“ 业务名:对象名:id:[属性] ” 作为键名(也可以不是:)。如果键名过长可以采用缩写,避免键过长浪费内存

  • 使用场景:

  • 缓存
    在这里插入图片描述

  • 计数

    long incrVideoCounter(long id) {
        key = "video:playCount:" + id;
        return redis.incr(key);
    }
    

    真实的计数系统要考虑的问题很多,如:防作弊,多维度统计,数据持久的底层数据源等

    • 限速

    发短信限速伪代码如下

    phoneNum = "138xxxxxxxx";
    key = "shortMsg:limit:" + phoneNum;
    // SET key value EX 60 NX
    isExists = redis.set(key,1,"EX 60","NX");
    if(isExists != null || redis.incr(key) <=5){
    // 通过
    }else{
    // 限速
    }
    
    • 共享session

    分布式系统会导致session 分散到不同的服务器上,负载均衡会导致出现用户刷新一次就要重新登录的情况

在这里插入图片描述

使用redis统一管理session 即可解决上述问题,如下图所示:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013738122/article/details/84956634