• Redis基本数据结构之String


    1 String (字符串类型)

    字符串类型 是 Redis 最基础的数据结构。字符串类型 的值实际可以是 字符串简单复杂 的字符串,例如 JSON、XML)、数字(整数、浮点数),甚至是 二进制(图片、音频、视频),但是值最大不能超过 512MB

    1.1相关命令

    (1) 设置值

    命令为:set key value [ex seconds] [px milliseconds] [nx|xx]

    set 命令有几个选项:

    l ex seconds:为键设置秒级过期时间。

    l px milliseconds:为键设置毫秒级过期时间。

    l nx:键必须不存在,才可以设置成功,用于添加。

    l xx:与 nx 相反,键必须存在才可以设置成功,用于更新。

    使用方法如图:

    除了 set 选项,Redis 还提供了 setex 和 setnx 两个命令:

    setex key seconds value

    setnx key value

    setex:设定键的值,并指定此键值对应的 有效时间

    使用方法如图:

    setnx:键必须 不存在,才可以设置成功。如果键已经存在,返回 0

    使用方法如图:

    (2) 获取值

    命令为:get key

    如果要获取的 键不存在,则返回 nil()。

    (3) 批量设置值

    命令为:mset key value [key value ...]

    下面操作通过 mset 命令一次性设置 4 个 键值对:

    (4) 批量获取值

    命令为:mget key [key ...]

    批量操作命令,可以有效提高开发效率,假如没有 mget 这样的命令,要执行 n 次 get 命令的过程和耗时如下:

    n次get时间 = n次网络时间 + n次命令时间

    使用 mget 命令后,执行 n 次 get 命令的过程和 耗时 如下:

    n次get时间 = 1次网络时间 + n次命令时间

    (5) 计数

    命令为: incr key

    incr 命令用于对值做自增操作,返回结果分为三种情况:

    l 值不是 整数,返回 错误。

    l 值是 整数,返回 自增 后的结果。

    l 键不存在,按照值为 0自增,返回结果为 1。

    使用如图

    除了 incr 命令,Redis 还提供了 decr(自减)、incrby(自增指定数字)、decrby(自减指定数字)、incrbyfloat(自增浮点数)等命令操作。

    (6) 各种命令的时间复杂度

    1.2 应用场景

    缓存功能

    下面是一种比较典型的缓存使用场景,其中Redis作为缓存层,MySQL 作为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高并发的特性,所以缓存通常能起到加速读写降低后端压力的作用。

    (1) 计数

    许多应用都会使用 Redis 作为 计数 的基础工具,它可以实现 快速计数、查询缓存 的功能,同时数据可以 异步落地 到其他 数据源。一般来说,视频播放数系统,就是使用 Redis 作为 视频播放数计数 的基础组件,用户每播放一次视频,相应的视频播放数就会自增 1。

    一个真实的 计数系统 要考虑的问题会很多:防作弊、按照 不同维度 计数,数据持久化底层数据源等。

    (2) 共享Session

    一个 分布式 Web 服务将用户的 Session 信息(例如 用户登录信息)保存在 各自 的服务器中。这样会造成一个问题,出于 负载均衡 的考虑,分布式服务 会将用户的访问 均衡 到不同服务器上,用户 刷新一次访问 可能会发现需要 重新登录,这个问题是用户无法容忍的。

    为了解决这个问题,可以使用 Redis 将用户的 Session 进行 集中管理。在这种模式下,只要保证 Redis 是 高可用 和 扩展性的,每次用户 更新 或者 查询 登录信息都直接从 Redis 中集中获取。

    (3) 限速

    很多应用出于安全的考虑,会在每次进行登录时,让用户输入手机验证码,从而确定是否是用户本人。但是为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率。例如一分钟不能超过 5 次。就可以通过设置redis键的过期时间搭配incr指令来完成限速。

    参考

  • 相关阅读:
    java数据结构——哈希表(HashTable)
    java数据结构——红黑树(R-B Tree)
    java数据结构——二叉树(BinaryTree)
    java数据结构——递归(Recursion)例题持续更新中
    电路布线
    Cordova 入门
    mysql 分组加行号
    数据库表添加行号
    java jsp自定义标签
    java web Listener的简单使用案例
  • 原文地址:https://www.cnblogs.com/songsongsun/p/14447484.html
Copyright © 2020-2023  润新知