Redis 命令文档

基本概念

安装及使用

可以在官网下载源码编译安装。对于 CentOS,还可以通过 yum install redis 安装。

Redis 安装完成后,通过 redis-server 命令可以启动 Redis 服务器,如果修改了配置文件,需要在启动服务器时指定配置文件的路径。通过 redis-cli 可以进入交互式的客户端(类似 MySQL 的 mysql 命令)。

Redis 支持的数据类型

数据类型 可存储的值的类型 支持的操作
STRING 字符串、整数、浮点数 操作整个字符串或字符串的一部分,整数和浮点数还可以执行自增、自减操作
LIST 存储字符串的链表,允许有相同元素 链表两端增删元素(PUSH、POP),根据偏移量操作元素,读取一个或多个元素,根据节点的值查找、删除元素
HASH 存储字符串键值对的无序散列表,适合存储对象。
每个 hash 可以存储 232 - 1 键值对(40多亿)
增删查改单个键值对,读取所有键值对
SET 存储字符串的无序数据结构(所有存储的元素不可相同) 增删查改单个元素,检查元素是否存在,获取随机元素,求交集、并集、差集
ZSET 有序集合(Sorted Set),存储字符串成员与浮点数分值(score)之间的有序映射(类似普通集合,所有存储的元素不可相同,但是分数可以重复),分值决定排列顺序 增删查改单个元素,根据分值范围(range)或成员读取元素

过期时间

在 Redis 中,每存储一个键值对时,都可以为其设置过期时间,也可以修改或删除过期时间。

过期时间可用的类型:

  • EXPIRE key s:设置有效时间(长度),单位秒
  • PEXPIRE key ms:设置有效时间(长度),单位毫秒
  • EXPIREAT key timestamp_s:设置有效时刻(到那一刻过期),timestamp 代表秒数的时间戳
  • PEXPIREAT key timestamp_ms:设置有效时刻(到那一刻过期),timestamp 代表毫秒数的时间戳

对于上面四种方式,Redis 内部最终都会转为使用 PEXPIREAT。

TTL 命令可以查看键值对的过期时间,永不过期的键返回 -1,已经过期(不存在)的键会返回 -2。EXPIRE 命令可以重设过期时间。

过期处理策略

Redis 支持三种处理策略:

  • 定时删除:为每个设置了过期时间的键创建一个定时器,到过期时间时,立刻删除。内存效率高,但 CPU 效率低。
  • 惰性删除:不会立刻删除过期的键,而是在外部指令读取这个键的时候才删除。内存效率低,但 CPU 效率高。处理过程为:
    • 接收 get 命令
    • 判断所读取的键是否过期
    • 过期则执行删除操作并返回 nil(空),否则直接返回值
  • 定期删除:设置一个时间间隔,每隔一段时间都会检测是否有过期键,如果有则删除

通用命令

Redis 中,部分命令同时支持 5 种数据类型:

KEYS

按照指定模式查找数据库中的键值。例如官方示例如下:

redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "firstname"
3) "age"

DBSIZE

返回数据库键的数量:

127.0.0.1:6379> dbsize
(integer) 4

EXISTS

判断键值是否存在。可以同时判断多个键值,用空格分割,返回存在的键值的数量:

redis> SET key1 "Hello"
"OK"
redis> EXISTS key1
(integer) 1
redis> EXISTS nosuchkey
(integer) 0
redis> SET key2 "World"
"OK"
redis> EXISTS key1 key2 nosuchkey
(integer) 2

DEL

删除键值对:

redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> DEL key1 key2 key3
(integer) 2

TTL

查看键值对的过期时间:

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10

EXPIRE

设置键值对的过期时间:

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> SET mykey "Hello World"
"OK"
redis> TTL mykey
(integer) -1

PERSIST

删除过期时间:

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> PERSIST mykey
(integer) 1
redis> TTL mykey
(integer) -1

TYPE

查看数据类型:

redis> SET key1 "value"
"OK"
redis> LPUSH key2 "value"
(integer) 1
redis> SADD key3 "value"
(integer) 1
redis> TYPE key1
"string"
redis> TYPE key2
"list"
redis> TYPE key3
"set"

STRING

STRING 可以存储字符串、整型及浮点型。对于整型和浮点型可以执行自增和自减操作。

指令

SET 和 GET

SET 指令用于设置键值对,可以同时设置过期时间,还可以指定只有在键已经存在(或不存在)时才进行设置。

GET 指定读取键对应的值,如果键不存在则返回 nil。

语法:

set key value [EX seconds] [PX milliseconds] [NX|XX]

get key

参数:

  • EX second:设置键的过期时间,单位秒。SET key value EX second 等同于 SETEX key second value
  • PX millisecond:设置键的过期时间,单位毫秒。SET key value PX millisecond 等同于 PSETEX key millisecond value
  • NX :只在键不存在(Not eXist)时,才对键进行设置操作。SET key value NX 效果等同于 SETNX key value
  • XX :只在键已经存在时,才对键进行设置操作。

设置键值对,同时设置过期时间:

127.0.0.1:6379> set hello world EX 10
OK
127.0.0.1:6379> ttl hello
(integer) 7
127.0.0.1:6379> ttl hello
(integer) -2
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> ttl hello
(integer) -1

只有在键已经存在(或不存在)时才进行设置:

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> ttl hello
(integer) -1
127.0.0.1:6379> set hello world EX 10 NX
(nil)
127.0.0.1:6379> ttl hello
(integer) -1
127.0.0.1:6379> set hello world EX 10 XX
OK
127.0.0.1:6379> ttl hello
(integer) 8

MSET 和 MGET

MSET 指令一次设置多个键值对

MGET 指令一次读取多个键对应的值

语法:

MSET key value [key value ...]

MGET key [key ...]

示例:

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> keys k*
1) "k2"
2) "k3"
3) "k1"

GETSET

将给定 key 的值设为 value ,并返回这个 key 对应的旧值。

语法:

GETSET key value

示例:

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> getset hello val
"world"
127.0.0.1:6379> get hello
"val"

APPEND

如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在,则将给定 key 设为 value ,就像执行 SET key value 一样。

语法:

APPEND key value

示例:

127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> append hello good
(integer) 4
127.0.0.1:6379> get hello
"good"
127.0.0.1:6379> append hello " world"
(integer) 10
127.0.0.1:6379> get hello
"good world"

INCR

将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

语法:

INCR key

示例:

127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> incr hello
(integer) 2
127.0.0.1:6379> incr hello
(integer) 3
127.0.0.1:6379> get hello
"3" 127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> incr hello
(integer) 1

INCRBY 和 INCRBYFLOAT

将 key 所储存的值加上增量 increment 。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

语法:

INCRBY key increment

INCRBYFLOAT key increment

示例:

127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> incrby hello 5
(integer) 6
127.0.0.1:6379> incrbyfloat hello 5.5
"11.5"

GETRANGE

读取子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推。

语法:

GETRANGE key start end

示例:

127.0.0.1:6379> set hello "hello world!!"
OK
127.0.0.1:6379> getrange hello 4 -1
"o world!!"
127.0.0.1:6379> getrange hello 4 6
"o w"

LIST

LIST 列表不能使用 GET 和 SET 命令。列表可以存储相同的字符串,索引从 0 开始,LRANGE 命令的结束索引是 -1 时表示到列表的最后一个元素。

支持的命令如下:

LPUSH:从左侧添加元素,可以一次添加多个元素。

RPUSH:从右侧添加元素,可以一次添加多个元素。

LPOP:从左侧弹出元素。

RPOP:从右侧弹出元素。

LINDEX:获取列表给定位置上的元素。

LRANGE:获取列表指定范围内的所有元素。

127.0.0.1:6379> get l
(nil)
127.0.0.1:6379> rpush l 1
(integer) 1
127.0.0.1:6379> get l
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lindex l 1
(nil)
127.0.0.1:6379> lindex l 0
"1"
127.0.0.1:6379> rpush l 2
(integer) 2
127.0.0.1:6379> lrange l 0 -1
1) "1"
2) "2"
127.0.0.1:6379> lpop l
"1"
127.0.0.1:6379> lrange l 0 -1
1) "2"

SET

SET 集合跟 LIST 列表类似,都可以存储多个字符串,但是 SET 中的字符串无序且不能相同。

支持的命令如下:

SADD:向集合添加元素。

SREM:从集合中删除元素。

SISMEMBER:检查元素是否已经存在于集合中。

SMEMBERS:获取集合中的所有元素。

SINTER:计算交集。

SUNION:计算并集。

SDIFF:计算差集。

127.0.0.1:6379> get s
(nil)
127.0.0.1:6379> sadd s 666
(integer) 1
127.0.0.1:6379> sadd s 777
(integer) 1
127.0.0.1:6379> sadd s 888
(integer) 1
127.0.0.1:6379> smembers s
1) "666"
2) "777"
3) "888"
127.0.0.1:6379> sismember s 666
(integer) 1
127.0.0.1:6379> srem s 777
(integer) 1
127.0.0.1:6379> sismember s 777
(integer) 0
127.0.0.1:6379> smembers s
1) "666"
2) "888"

HASH

HASH 散列可以存储多个键值对。散列存储的键是字符串,值可以是字符串或数字,且散列的值为数字时可以执行自增或自减操作。很多字符串命令都有对应的散列版本。

可以将 Redis 中的散列看做关系数据库的行,可以同时读取或修改某个散列(用 key 标记)的多个字段(用 field 标记)。

支持的命令如下:

HSET:设置某个散列的键值对,如果散列已经存在则增加键值对。语法:HSET key field value

HGET:获取某个散列的指定的键对应的值。语法:HGET key field

HGETALL:获取某个散列的所有键值对。语法:HGETALL key

HDEL:删除某个散列的指定的键值对。语法:HGETALL key field [field ...]

示例:

127.0.0.1:6379> hgetall h
(empty list or set)
127.0.0.1:6379> hset h k1 v1
(integer) 1
127.0.0.1:6379> hset h k2 v2
(integer) 1
127.0.0.1:6379> hset h k3 v3
(integer) 1
127.0.0.1:6379> hgetall h
1) "k1"
2) "v1"
3) "k2"
4) "v2"
5) "k3"
6) "v3"
127.0.0.1:6379> hget h k1
"v1"
127.0.0.1:6379> hdel h k1 k2
(integer) 2
127.0.0.1:6379> hget h k1
(nil)

ZSET

ZSET 有序集合类似 HASH 散列,也存储键值对。有序集合的键成为成员(member),每个成员都不相同;值成为分值(score),必须是浮点数。有序集合既可以根据成员访问元素(类似散列),又可以根据分值及分值的排列顺序来访问元素。

指令

ZADD

向有序集合添加指定了分值的元素。

zadd key [NX|XX] [CH] [INCR] score member [score member ...]

选项:

XX: 只更新已经存在的元素,不会添加新元素。

NX: 不会更新已经存在的元素,只会添加新元素。

CH: ZADD 命令默认返回添加的新元素数量,CH 选项将返回值修改为更改的元素总数(CHange)。更改的元素包括添加的新元素和更新分数的已有元素(如果分数不变,则不计算在内)。

INCR: 指定这个选项时,ZADD 的行为类似 ZINCRBY。这种模式下只能设置一个分值对。

示例,添加两个元素 a、b,分值分别为 10 和 20:

127.0.0.1:6379> zadd z 10 a 20 b
(integer) 2
127.0.0.1:6379> zrange z 0 100
1) "a"
2) "b"

NX 表示如果 a 不存在,则添加 a 元素同时设置分值为 10(因为 a 已经存在,所以不会有任何修改):

127.0.0.1:6379> zadd z NX 10 a
(integer) 0

没有添加新元素,所以返回 0(默认返回的是添加的新元素的数量):

127.0.0.1:6379> zadd z XX 10 a
(integer) 0

通过 NX 可以成功添加元素:

127.0.0.1:6379> zadd z XX 10 aa
(integer) 0
127.0.0.1:6379> zrange z 0 100
1) "a"
2) "b"
127.0.0.1:6379> zadd z NX 10 aa
(integer) 1
127.0.0.1:6379> zrange z 0 100
1) "a"
2) "aa"
3) "b"

通过 CH 得到修改的元素数量:

127.0.0.1:6379> zadd z CH 30 a 100 aa
(integer) 2
127.0.0.1:6379> zadd z CH 30 a 100 aa
(integer) 0

ZREM

删除元素,可以同时删除多个元素,空格分隔。

zrem key member [member ...]

示例:

127.0.0.1:6379> zrem z a aa
(integer) 2
127.0.0.1:6379> zrange z 0 100
1) "b"

ZRANGE

根据排列顺序读取多个元素。start 和 stop 都是从零开始的索引,其中 0 是第一个元素,1 是下一个元素,依此类推。它们也可以是负数,表示从排序集的末尾开始的偏移,-1是排序集的最后一个元素,-2是倒数第二个元素,依此类推。

zrange key start stop [WITHSCORES]

WITHSCORES 选项表示同时显示分数和值。

官方示例:

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANGE myzset 0 -1
1) "one"
2) "two"
3) "three"
redis> ZRANGE myzset 2 3
1) "three"
redis> ZRANGE myzset -2 -1
1) "two"
2) "three"
redis> ZRANGE myzset 0 1 WITHSCORES
1) "one"
2) "1"
3) "two"
4) "2"

ZRANGEBYSCORE

根据分数读取多个元素。

语法:

zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

其中 min 和 max 表示分值,可以用 -inf 和 +inf 表示无穷小和无穷大。

结果集默认包含 min 和 max,可以使用左括号排除,例如 ZRANGEBYSCORE zset (1 5 表示 1 < score <= 5ZRANGEBYSCORE zset (5 (10 表示 5 < score < 10

官方示例:

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANGEBYSCORE myzset -inf +inf
1) "one"
2) "two"
3) "three"
redis> ZRANGEBYSCORE myzset 1 2
1) "one"
2) "two"
redis> ZRANGEBYSCORE myzset (1 2
1) "two"
redis> ZRANGEBYSCORE myzset (1 (2
(empty list or set)

Redis 基础及各数据类型对应的命令的更多相关文章

  1. Redis学习之二 数据类型和相关命令

    原文:https://www.cnblogs.com/lonelyxmas/p/9073928.html 如果还不懂安装的,请看 Windows环境下安装Redis Redis一共支持五种数据类型 1 ...

  2. Redis基础学习(二)—数据类型

    一.Redis支持的数据类型 Redis中存储数据是通过key-value存储的,对于value的类型有以下几种: (1)字符串. (2)Map (3)List (4)Set   public cla ...

  3. windows下使用redis,Redis入门使用,Redis基础命令

    windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...

  4. redis五种数据类型和常用命令及适用场景

    一.redis的5种数据类型: 1.基础理解: string 字符串(可以为整形.浮点型和字符串,统称为元素) list 列表(实现队列,元素不唯一,先入先出原则) set 集合(各不相同的元素) h ...

  5. Redis的数据类型及其常用命令

    快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...

  6. redis基础:redis下载安装与配置,redis数据类型使用,redis常用指令,jedis使用,RDB和AOF持久化

    知识点梳理 课堂讲义 课程计划 1. REDIS 入 门 (了解) (操作)   2. 数据类型 (重点) (操作) (理解) 3. 常用指令   (操作)   4. Jedis (重点) (操作) ...

  7. redis部署以及各种数据类型使用命令等详解

    参考:https://www.cnblogs.com/pyyu/p/9843950.html  redis博客地址 编译安装redis 开始部署 [root@mcw01 ~]$ ls anaconda ...

  8. Redis基础入门,Redis的优点也特点,Redis五种数据类型

    Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. 1.Redis的主要特点 Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将 ...

  9. Redis数据类型和常用命令

    Redis相较于其它的数据库虽然简单,但是要熟记所有命令的用法也并非易事.一个简单的技巧是通过要操作的数据类型来将这些命令进行结构化. 数据类型和对应命令 所有存储于redis中的数据都对应于一个键值 ...

随机推荐

  1. Eclipse查看jdk源码(Ctrl+左键)

    Window ->Preferences ->Java ->Installed JREs ->选中jdk ->Edit ->选中rt.jar ->source ...

  2. CSU-1110 RMQ with Shifts (单点更新+区间最小值 zkw线段树)

    In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each query ...

  3. Cocos Creator-TypeScript与JS快速过渡

    目前的H5游戏开发引擎,国内主流的是Cocos Creator.Laya Box.Egret, 这3种引擎又有各自的开发语言,JavaScript.TypeScript.AS3 . 不同的公司采用的引 ...

  4. Python pass是空语句用法

    在条件判断,还是函数中,有时候不需要输出任何东西,也不能留空,python提供空的语句,下面讲述pass空语句的用法 1,关键词 pass 2,用法 for letter in 'Python': i ...

  5. 关于html5 video的连续播放

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  6. Pandas 时间序列处理

    目录 Pandas 时间序列处理 1 Python 的日期和时间处理 1.1 常用模块 1.2 字符串和 datetime 转换 2 Pandas 的时间处理及操作 2.1 创建与基础操作 2.2 时 ...

  7. spark复习笔记(6):RDD持久化

    在spark中最重要的功能之一是跨操作在内存中持久化数据集.当你持久化一个RDD的时候,每个节点都存放了一个它在内存中计算的一个分区,并在该数据集的其他操作中进行重用,持久化一个RDD的时候,节点上的 ...

  8. Jsp 自定义tag标签

    1转自:https://blog.csdn.net/yusimiao/article/details/46835617 Jsp自定义tag标签 自定义tag标签的好处 程序员可以自定一些特定功能的标记 ...

  9. nginx location配置讲解

    location语法:表示uri方式定位 基础语法有三种: location = pattern {} 精准匹配 location pattern {} 一般匹配 location ~ pattern ...

  10. 学Python的第六天

    今天发愤图强,死学Python!!!! 为此小编还买了自己喜欢的McPython! 从小老师就说兴趣是最好的老师,所以呢买这本书是想通过我的世界这款游戏来提高自己的学习兴趣!!! 当然也有私心啦... ...