Redis从入门到精通:中级篇

原文链接:http://www.cnblogs.com/xrq730/p/8944539.html,转载请注明出处,谢谢

本文目录

上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启第二部分的学习,在本文中,我们将看到以下内容:

  • Redis数据结构String、Hash、List、Set、SortedSet及相关操作,提一下Redis在3.2.0之后有新增了一种GEO的数据类型表示地理位置,不过本文这种数据结构略过
  • Redis其他一些常用命令,分为Key操作与服务器操作
  • Redis事务机制

主要以实战为主,希望通过本文可以让大家掌握Redis的基本使用。

本来这篇文章还准备加上Redis线程模型分析的,但是写完发现篇幅实在太长,就把Redis线程模型放到最后一篇中了,也挺好的,本文专注于对Redis命令的讲解。

另外说一下,本文讲Redis中的数据结构,但是 数据结构本身不在本文的讲解范围内,如果想知道Hash、List、Set等数据结构特点及使用场景,可以自己查阅数据结构相关资料。

String数据结构的基本操作

首先说一下数据结构String,这是Redis中最简单的一种数据结构,和MemCache数据结构是一样的,即Key-Value型的数据,根据Redis官方文档, Value最大值为512M

下面用表格来看一下String操作的相关命令:
命令 描述 用法SET

(1)将字符串值Value关联到Key

(2)Key已关联则覆盖,无视类型

(3)原本Key带有生存时间TTL,那么TTL被清除
SET key value [EX seconds] [PX milliseconds] [NX|XX]GET

(1)返回key关联的字符串值

(2)Key不存在返回nil

(3)Key存储的不是字符串,返回错误,因为GET只用于处理字符串
GET key MSET

(1)同时设置一个或多个Key-Value键值对

(2)某个给定Key已经存在,那么MSET新值会覆盖旧值

(3)如果上面的覆盖不是希望的,那么使用MSETNX命令,所有Key都不存在才会进行覆盖

(4) MSET是一个原子性操作,所有Key都会在同一时间被设置,不会存在有些更新有些没更新的情况
MSET key value [key value …]MGET

(1)返回一个或多个给定Key对应的Value

(2)某个Key不存在那么这个Key返回nil
MGET key [key …]SETEX

(1)将Value关联到Key

(2)设置Key生存时间为seconds,单位为秒

(3)如果Key对应的Value已经存在,则覆盖旧值

(4)SET也可以设置失效时间,但是不同在于SETNX是一个原子操作,即关联值与设置生存时间同一时间完成
SETEX key seconds value SETNX

(1)将Key的值设置为Value,当且仅当Key不存在

(2)若给定的Key已经存在,SEXNX不做任何动作
SETNX key value

首先,演示一下SET、GET、SETEX的效果:

图中我们应该能看到SET、GET、SETNX几个命令的效果了,在这之外,专门提两点:

  • Redis的命令不区分大小写
  • Redis的Key区分大小写

接着我们演示一下SETEX命令的效果:

这里顺带介绍了TIME命令,它返回的是当前服务器Unix时间戳,但单位为秒(通常Unix时间戳取的时间为毫秒)。看到设置Redis-Expire这个Key,马上获取不失效,第26秒获取的时候失效,关于失效,Redis的策略是这样的:

  • 被动触发,即GET的时候检查一下Key是否失效
  • 主动触发,后台每1秒跑10次定时任务(通过redis.conf的hz参数配置,默认为10,这个上文没有写),随机选择100个设置了过期时间的Key,对过期的Key进行失效

最后看一下MGET和MSET命令:

看到可以同时设置多个Key-Value,也可以同时获取多个Key对应的Value,再次注意,Redis的Key是严格区分大小写的。

特殊的String操作:INCR/DECR

前面介绍的是基本的Key-Value操作,下面介绍一种特殊的Key-Value操作即INCR/DECR,可以利用Redis自动帮助我们对一个Key对应的Value进行加减,用表格看一下相关命令:
命令 描述 用法INCR

(1)Key中存储的数字值+1,返回增加之后的值

(2)Key不存在,那么Key的值被初始化为0再执行INCR

(3)如果值包含错误类型或者字符串不能被表示为数字,那么返回错误

(4)值限制在64位有符号数字表示之内,即-9223372036854775808~9223372036854775807
INCR key DECR

(1)Key中存储的数字值-1

(2)其余同INCR
DECR key INCRBY

(1)将key所存储的值加上增量返回增加之后的值

(2)其余同INCR
INCRBY key increment DECRBY

(1)将key所存储的值减去减量decrement

(2)其余同INCR
DECRBY key decrement

下面实际看一下四个命令相关使用:

INCR/DECR在实际工作中还是非常管用的,举两个例子:

  • 原先单机环境中统计在线人数,变成分布式部署之后可以使用INCR/DECR
  • 由于Redis本身极高的读写性能,一些秒杀的场景库存增减可以基于Redis来做而不是直接操作DB

Hash数据结构相关操作

接着讲一下Hash,Hash本质上和String是一样的,无非String是纯粹的Key-Value,Hash是外面套了一层东西,里面还是Key-Value,接着我们用表格看一下Hash数据结构的相关命令:

命令 描述 用法HSET

(1)将哈希表Key中的域field的值设为value

(2)key不存在,一个新的Hash表被创建

(3)field已经存在,旧的值被覆盖
HSET key field value HGET (1)返回哈希表key中给定域field的值HGET key field HDEL

(1)删除哈希表key中的一个或多个指定域

(2)不存在的域将被忽略
HDEL key filed [field …]HEXISTS (1)查看哈希表key中,给定域field是否存在,存在返回1,不存在返回0 HEXISTS key field HGETALL (1)返回哈希表key中,所有的域和值HGETALL key HINCRBY

(1)为哈希表key中的域field加上增量increment

(2)其余同INCR命令
HINCRYBY key filed increment HKEYS (1)返回哈希表key中的所有域HKEYS key HLEN (1)返回哈希表key中域的数量HLEN key HMGET

(1)返回哈希表key中,一个或多个给定域的值

(2)如果给定的域不存在于哈希表,那么返回一个nil值
HMGET key field [field …]HMSET

(1)同时将多个field-value对设置到哈希表key中

(2)会覆盖哈希表中已存在的域

(3)key不存在,那么一个空哈希表会被创建并执行HMSET操作
HMSET key field value [field value …]HVALS (1)返回哈希表key中所有的域和值HVALS key

同样的,实际看一下这些命令的相关使用:

稍乱,但是除了HMSET、HMGET以外把所有命令都演示到了。

List数据结构相关操作

接着我们看一下Redis中的List,相关命令有:
命令 描述 用法

LPUSH

(1)将一个或多个值value插入到列表key的表头

(2)如果有多个value值,那么各个value值按从左到右的顺序依次插入表头

(3)key不存在,一个空列表会被创建并执行LPUSH操作

(4)key存在但不是列表类型,返回错误

LPUSH key value [value …] LPUSHX

(1)将值value插入到列表key的表头,当且晋档key存在且为一个列表

(2)key不存在时,LPUSHX命令什么都不做

LPUSHX key value LPOP

(1)移除并返回列表key的头元素

LPOP key LRANGE

(1)返回列表key中指定区间内的元素,区间以偏移量start和stop指定

(2)start和stop都以0位底

(3)可使用负数下标,-1表示列表最后一个元素,-2表示列表倒数第二个元素,以此类推

(4)start大于列表最大下标,返回空列表

(5)stop大于列表最大下标,stop=列表最大下标

LRANGE key start stop LREM

(1)根据count的值,移除列表中与value相等的元素

(2)count>0表示从头到尾搜索,移除与value相等的元素,数量为count

(3)count

Original: https://www.cnblogs.com/xrq730/p/8944539.html
Author: 五月的仓颉
Title: Redis从入门到精通:中级篇

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/528988/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 支付宝沙箱

    支付宝支付 ## 支付宝的沙箱环境 – [密钥生成文档](https://opendocs.alipay.com/open/291/105971): 公钥(给别人,方便其他人验证某…

    Linux 2023年6月8日
    0101
  • 分布式中灰度方案实践

    让请求在导航的服务节上点执行; 一、背景简介 分布式系统中会存在这样的开发场景,不同需求可能涉及到对同一个服务的开发,那么该服务在研发期间就会存在多个版本并行的状态,为了保持不同版…

    Linux 2023年6月14日
    0115
  • DDR4 SDRAM -时序参数小册子

    如前所述,大神的原文链接如下:https://www.systemverilog.io/ddr4-timing-parameters-cheatsheet 参数 功能 ACTIVA…

    Linux 2023年6月7日
    099
  • 系统执行命令记录到message 日志文件中

    直接 配置 /etc/profile 配置文件添加一样,简单高定。 export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; e…

    Linux 2023年6月8日
    077
  • 【Linux】CMake源码编译安装教程

    步骤: 卸载旧版本 官网下载安装包 CMake源码编译安装 检查是否安装成功 Linux下,默认安装方式: sudo apt install cmake 如果使用默认的安装方式,这…

    Linux 2023年6月13日
    0105
  • 014 Linux 线上高频使用以及面试高频问题——如何查找大文件并安全的清除?

    1 案例描述? 2 命令一(目录统计排序最佳命令) 3 命令二(最实用,目录和文件一起统计排序) (1)命令详情和说明 (2)du、head、sort、awk 详细说明参考已有文章…

    Linux 2023年5月27日
    0118
  • Redis之延迟监控

    *参考官方文档 *启用 redis 延迟监控 CONFIG SET latency-monitor-threshold 100 单位:毫秒,100表示一百毫秒。如果将 latenc…

    Linux 2023年5月28日
    095
  • linux 系统迁移到lvm分区

    对于普通分区磁盘空间不够,而采用lvm分区,原来系统进行迁移或者备份还原。 dd命令用于将整个硬盘进行备份,包括uuid,适用于对对整个物理盘的备份 tar 备份可以对整个系统进行…

    Linux 2023年6月14日
    091
  • Linux安装宝塔,OCI8,连接ORACLE数据库

    基础环境 centos7 安装BT宝塔 网址:https://www.bt.cn/download/linux.h…

    Linux 2023年6月6日
    0113
  • redis的GEO实战 (RedisTemplate)

    geoadd 时间复杂度为O(log(N)) geoadd cityGeo 116.405285 39.904989 “北京”geoadd cityGeo …

    Linux 2023年5月28日
    096
  • 如何写出健壮可靠的shell脚本

    1 脚本失败时即退出 ; set -e 例子: 可以在脚本的开头设置如下set -e 2 打印脚本执行过程 sh -x test.sh #整个过程执行了哪些命令或者在开头加上set…

    Linux 2023年5月28日
    093
  • SWAP交换分区扩容

    第一章 扩容当前swap 交换分区 注:这种需要停止当前业务,否则会产生影响 [17:09:31 root@libin3 ~]# free -h total used free s…

    Linux 2023年6月13日
    093
  • [云原生]Kubernetes-介绍(第1章)

    一、应用部署方式演变 二、Kubernetes简介 三、Kubernetes组件 四、Kubernetes概念 参考: Kubernetes(K8S) 入门进阶实战完整教程,黑马程…

    Linux 2023年6月13日
    0107
  • Linux 学习笔记

    Linux 学习笔记 作者:Grey 原文地址: 博客园:Linux 学习笔记 CSDN:Linux 学习笔记 说明 本文如果没有特别说明,环境是 CentOS 7, 主要是日常学…

    Linux 2023年5月27日
    0115
  • redis key的过期时间

    设置redis key的生存过期时间 Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) : EXPlRE 命令用于将键key …

    Linux 2023年5月28日
    091
  • 了解GFS

    参考: https://wenku.baidu.com/view/4392293517791711cc7931b765ce0508763275f2.html 论文翻译 https:…

    Linux 2023年6月7日
    0109
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球