zoukankan      html  css  js  c++  java
  • 【redis 学习系列】API的理解与使用(一)

    Redis提供了5种数据结构,以下介绍一些预备知识以及Redis的5种数据结构

    1、预备知识

    1.1 全局命令

    Redis的5种数据结构,它们是键值对中的值,对于说有一些通用的命令。

    (1)查看所有的键

    1 keys *

    (2)键总数

    1 dbsize

    dbsize会返回当前数据库中键的总和,例如当前数据库中有4个键即hello java python mylist,所以测试结果为4。注意,dbsize在计算键总数时不会遍历所有的键,而是直接获取

    Redis内置的键总和的变量,所以此命令的时间复杂度为O(1)。然而命令keys *会遍历所有的键,所以它的时间复杂度为O(n)。当Redis保存了大量的键时,线上环境禁止使用命令keys *

     (3)检查键是否存在

    1 exists key

    如果键存在则返回1,不存在则返回0

    (4)删除键

    1 del key [key1 ...]

    del是一个通用命令,无论键值是何种数据结构,del命令都可以将其删除,例如删除键值类型为字符串类型的java以及类型为列表类型的mylist。

    返回结果为成功删除键的个数,假设删除一个不存在的键,就会返回0。同时del命令支持同时删除多个键

    (5)键过期

    1 expire key seconds

    Redis支持对键添加过期时间,当超过过期时间后,将会自动删除键,例如为键hello设置了10秒的过期时间。

    这里的ttl命令会返回键的剩余过期时间,它有3种返回值:

    • 大于或等于0的整数:键剩余的过期时间
    • -1:键没有设置过期时间
    • -2:键不存在

    (6)键的数据类型

    1 type key

    例如键hello是字符串类型,返回结果为string。键mylist是列表类型,返回结果为list。如果键不存在,则返回none

    1.2 数据结构及内部编码

    在终端可以使用object encoding命令查询内部编码。

    2、字符串

    字符串类型是Redis最基础的数据结构,首先键都是字符串类型,而其他几种数据结构都是在字符串类型的基础上构建的,所以字符串类型能为其它4种数据结构的学习奠定基础。字符串的类型可以使字符串(简单字符串、复杂字符串(例如json以及XML))、数字(整型、浮点数)、二进制(图片、音视频)。但是占用的空间最大不能超过512M

    2.1 命令

    2.1.1 常用命令

    (1)设置值

    1 set key value [ex seconds] [px milliseconds] [nx|xx]

    上述命令的常用选项:

    • ex seconds:为键设置秒级过期时间。
    • px milliseconds:为键设置毫秒级过期时间。
    • nx:键必须不存在,才能设置成功,用于添加
    • xx:与nx相反,键必须存在,才能设置成功,用于更新

    除了set选项,Redis还提供了setex和setnx两个命令,他们的作用与ex和nx选项是一样的

    1 setex key seconds value
    2 setnx key value

    setnx和setxx在实际的场景有何应用呢?以setnx命令为例,由于Redis的单线程命令处理机制,如果有多个客户端同时执行setnx key value,根据setnx的特性,只有一个客户端能设置成功,setnx可以作为分布式锁的一种实现方案。

    (2)获取值 

    1 get key

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

    (3)批量设置值

    1 mset key value [key value ...]

    (4)批量获取值

    1 mget key [key ...]

    如果有些键不存在,则它的值为nil(空),结果是按照传入键的顺序返回的:

    关于使用n次get获取n条结果与使用1次mget获取n条结果的比较:

    使用get命令:n次get时间 = n次网络时间+n次命令时间

    使用mget命令:n次get时间 = 1次网络时间+n次命令时间

    学会使用批量操作,有助于提高业务处理效率,但是要注意的是每次批量操作所发送的命令数不是无节制的,如果数量过多可能会造成Redis拥塞或者网络拥塞,此时可以用多次的批量操完成。

    (5)计数

    1 incr key

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

    • 值不是整数,返回错误
    • 值是整数,返回自增结果
    • 键不存在,按照值为0自增,返回结果为1

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

    2.1.1 不常用命令

    (1)追加值

    1 append key value

    append可以字符串尾部追加值。

    (2)字符串长度

    1 strlen key

    需要注意的是中文占两个字节。命令返回的是当前value所占的字节数。

    (3)设置并返回原值

    1 getset key value

    getset和set一样会设置值,但是不同的是,它同时会返回原来的值。

    (4)设置指定位置的字符

    1 setrange key offeset value

    (5)获取部分字符串

    1 getrange key start end

    start和end分别是开始和结束的偏移量,偏移量是从0开始计算。例如下述操作获取了值bast的前两个字符。

    下表是字符串类型命令的时间复杂度。

    2.2 内部编码

    字符串类型的内部编码有3种

    • int:8个字节的长整型
    • embstr:小于等于39个字节的字符串
    • raw:大于39个字节的字符串

     Redis会根据当前值的类型和长度来决定使用哪种内部编码实现。

    2.3 典型使用场景

    2.3.1 缓存功能

    2.3.2 计数

    2.3.3 共享Session

    2.3.4 限速

  • 相关阅读:
    WCF 第十章 异常处理 创建并使用强类型错误
    WCF 第十章 总结
    WCF 第十章 异常处理
    WCF 第十章 异常处理 使用FaultException管理服务异常
    WCF 第十章 异常处理 通信异常细节
    哪本书是对程序员最有影响、每个程序员都该阅读的书?(转自外刊IT评论)
    WCF 第十一章 工作流服务 从WF调用一个WCF服务
    比尔盖茨给大学毕业生的11条人生忠告
    王爽 汇编语言 实验七
    王爽 汇编语言 实验五第5题和第6题
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/10763985.html
Copyright © 2011-2022 走看看