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)

大家都在看

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