Redis ⼊⻔

Redis⼊⻔

1. Redis简介

​Redis 是⼀种开源(BSD 许可)内存数据结构存储,⽤作数据库、缓存、消息代理和流引擎。

Redis提供数据结构,例如 字符串、散列、列表、集合、带范围查询的排序集合、位图、hyperloglogs、地理空间索引和流。

Redis 具有内置复制、Lua 脚本、LRU 逐出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster 的⾃动分区提供⾼可⽤性。

您可以对这些类型运⾏原⼦操作 ,例如附加到字符串; 递增哈希中的值;将元素推⼊列表;计算集合交集、 并集和差集;或获得排序集中排名最⾼的成员。

为了获得最佳性能,Redis 使⽤ 内存中的数据集。根据您的⽤例,Redis 可以通过定期将数据集转储到磁盘 或通过将每个命令附加到基于磁盘的⽇志来持久保存您的数据。如果您只需要功能丰富的联⽹内存缓存,也可以禁⽤持久性。

Redis ⽀持异步复制,具有快速⾮阻塞同步和⾃动重新连接,并在⽹络拆分时进⾏部分重新同步。

Redis还包括:

  • 交易
  • 发布/订阅
  • Lua脚本
  • LRU 逐出键
  • ⾃动故障转移

您可以从⼤多数编程语⾔中使⽤ Redis 。

Redis 是⽤ANSI C编写的,适⽤于⼤多数 POSIX 系统,如 Linux、BSDMac OS X,⽆需外部依赖。LinuxOS XRedis开发和测试最多的两个操作系统,我们推荐使⽤Linux进⾏部署。Redis 可以在SmartOS 等Solaris 派⽣系统中⼯作,但⽀持是最⼤的努⼒。Windows 版本没有官⽅⽀持。

2. 安装Redis

安装 Redis 的⽅式取决于您的操作系统以及您是否希望将其与 Redis Stack 和 Redis UI 捆绑安装。请参阅下⾯最适合您需求的指南:

  • 在 Linux 上安装 Redis

  • 在 macOS 上安装 Redis

  • 在 Windows 上安装 Redis

⼀旦您启动并运⾏ Redis,并且可以使⽤ 连接 redis-cli ,您可以继续执⾏以下步骤。

2.1 使⽤CLI探索Redis

外部程序使⽤ TCP 套接字和 Redis 特定协议与 Redis 通信。该协议在不同编程语⾔的 Redis 客户端库中实现。然⽽,为了让 Redis 更简单,Redis 提供了⼀个命令⾏实⽤程序,可⽤于向 Redis 发送命令。这个程序叫做redis-cli

要检查 Redis 是否正常⼯作,⾸先要做的是使⽤ redis-cli发送PING命令:

$ redis-cli ping
PONG

运⾏redis-cli后跟命令名称及其参数会将此命令发送到在端⼝ 6379 的本地主机上运⾏的 Redis 实例。您可以更改所使⽤的主机和端⼝ redis-cli - 只需尝试 --help 检查使⽤信息的选项即可。

另⼀种有趣的运⾏⽅式 redis-cli 是不带参数:程序将以交互模式启动。您可以键⼊不同的命令并查看它们的回复。

$ redis-cli
redis 127.0.0.1:6379> ping
PONG
redis 127.0.0.1:6379> set mykey somevalue
OK
redis 127.0.0.1:6379> get mykey
"somevalue

此时您可以与 Redis 对话。

2.2 在Linux上安装Redis

⼤多数主要的 Linux 发⾏版都为 Redis 提供包。

r、Redis for Linux 下载地址:

  1. Redis是基于C语⾔编写的,因此⾸先需要安装Redis所需要的gcc依赖:
$ yum install -y gcc tcl
  1. 要从 Redis 下载站点获取最新稳定版 Redis 的源⽂件,请运⾏:
$ wget https://download.redis.io/redis-stable.tar.gz
  1. 要编译 Redis,⾸先是解压,切换到根⽬录,然后运⾏ make
$ tar -xzvf redis-stable.tar.gz
$ cd redis-stable
$ make

如果编译成功,您将在 src ⽬录中找到多个 Redis ⼆进制⽂件,包括:

  • redis-server:Redis 服务器本身
  • redis-cli:是与 Redis 对话的命令⾏界⾯实⽤程序。
  1. 在这个⽬录 /usr/local/bin 下安装这些⼆进制⽂件,请运⾏:
$ make install
  1. 在前台启动和停⽌ Redis

安装后,您可以通过运⾏来启动 Redis

redis-server

如果成功,您将看到 Redis 的启动⽇志,Redis 将在前台运⾏。

要停⽌ Redis,请输⼊ Ctrl-C

2.3 在macOS上安装Redis

本指南向您展示如何使⽤ Homebrew 在 macOS 上安装 Redis。Homebrew 是在 macOS 上安装 Redis的最简单⽅法。

  1. ⾸先,确保你安装了 Homebrew。从终端运⾏:
$ brew --version

如果此命令失败,您需要按照 Homebrew 安装说明进⾏操作。

  1. 安装redis,从终端运⾏:
brew install redis

这将在您的系统上安装 Redis。

  1. 在前台启动和停⽌ Redis

要测试您的 Redis 安装,您可以 redis-server 从命令⾏运⾏可执⾏⽂件:

redis-server

如果成功,您将看到 Redis 的启动⽇志,Redis 将在前台运⾏。

要停⽌ Redis,请输⼊ Ctrl-C

  1. 使⽤ launchd 启动和停⽌ Redis

作为在前台运⾏ Redis 的替代⽅法,您还可以使⽤ launchd 在后台启动进程:

brew services start redis

这将启动 Redis 并在登录时重新启动它。 launchd 您可以通过运⾏以下命令来检查托管 Redis 的状态:

brew services info redis

如果该服务正在运⾏,您将看到如下输出:

redis (homebrew.mxcl.redis)
Running: ✔
Loaded: ✔
User: miranda
PID: 67975

要停⽌服务,请运⾏:

brew services stop redis
  1. 连接到 Redis

Redis 运⾏后,您可以通过运⾏以下命令对其进⾏测试 redis-cli

redis-cli

这将打开 Redis REPL。尝试运⾏⼀些命令:

127.0.0.1:6379> lpush demos redis-macOS-demo
OK
127.0.0.1:6379> rpop demos
"redis-macOS-demo"

2.4 在Windows上安装Redis

Windows 不正式⽀持 Redis。但是,您可以按照以下说明在 Windows 上安装 Redis 以进⾏开发。

  1. 下载 Redis Windows 安装包

Redis for Windows 点击访问下载:https://github.com/tporadowski/redis/releases

在这里插入图片描述

  1. 下载完成后,打开相应的⽂件夹,您会看到如下图所示的⽂件⽬录:

在这里插入图片描述

  1. 启动服务端程序,双击 Redis 服务端启动程序 redis-server.exe,您会看到以下界⾯:

在这里插入图片描述

oops:

上图中显示⼀些 Redis 的相关信息,⽐如 Redis 的版本号以及默认端⼝号(6379)。注意,为了实现后续操作,请您保持服务端开启状态,否则客户端⽆法正常⼯作。

  1. 启动客户端程序,启动服务端后,双击客户端启动程序 redis-cli.exe,得到如下界⾯:

在这里插入图片描述

得到如上界⾯,说明 Redis 本地客户端与服务端连接成功。

  1. 上述⽅式虽然简单快捷,但是显然不是程序员的操作,下⾯介绍,通过命令启动 Redis 服务端,并将 Redis 服务添加到 Windows 资源管理器,实现开机后⾃动启动。
  1. 注册Redis服务

通过 CMD 命令⾏⼯具进⼊ Redis 安装⽬录,将 Redis 服务注册到 Windows 服务中,执⾏以下命令:

redis-server.exe --service-install redis.windows.conf --loglevel verbose

执⾏完后,得到以下输出,说明注册成功。

[1868] 07 Jan 15:00:08.223 # Granting read/write access to 'NT  AUTHORITY\NetworkService' on: "D:\Redis-x64-5.0.10" "D:\Redis-x64-5.0.10\" [1868] 07 Jan 15:00:08.230 # Redis successfully installed as a service.
  1. 启动Redis服务

执⾏以下命令启动 Redis 服务,命令如下:

redis-server --service-start 

如下图所示:

在这里插入图片描述

注意:此时 Redis 已经被添加到 Windows 服务中,因此不会再显示 Redis 服务端的相应的信息,如下 图所示:

在这里插入图片描述

  1. 启动Redis客户端

在 CMD 命令⾏输出 redis-cli 命令启动客户端,如下所示:

在这里插入图片描述

  1. 检查是否连接成功

测试客户端和服务端是否成功连接。输出PING命令,若返回PONG则证明成功连接。如下所示:

在这里插入图片描述

通过上⾯的操作,我们完成了 Redis 的安装。当然,您也可以将 Redis 加⼊到环境变量中,如下所示:

在这里插入图片描述

注意:根据⾃⼰的安装路径添加环境变量。 (添加了后在cmd命令窗口可输入命令,就不需要每次先cd到安装目录才能输入命令)

2.4.1 总结

下⾯对安装过程中涉及到的命令进⾏总结,主要包括以下命令:

安装服务:redis-server --service-install 
卸载服务:redis-server --service-uninstall 
开启服务:redis-server --service-start 
停⽌服务:redis-server --service-stop 
服务端启动时重命名:redis-server --service-start --service-name Redis1

3. Redis 数据类型

3.1 Redis 字符串

Redis 字符串存储字节序列,包括⽂本、序列化对象和⼆进制数组。因此,字符串是最基本的 Redis 数 据类型。它们通常⽤于缓存,但它们⽀持额外的功能,使您也可以实现计数器和执⾏按位运算。

3.1.1 基本命令

获取和设置字符串

  • SET 存储⼀个字符串值。

  • SETNX 仅当键不存在时才存储字符串值。⽤于实现锁。

  • GET 检索字符串值。

  • MGET 在单个操作中检索多个字符串值。

管理柜台

  • INCRBY 原⼦地递增(并在传递负数时递减)存储在给定键处的计数器。

  • 浮点计数器存在另⼀个命令:INCRBYFLOAT

3.1.2 例⼦
  • 在 Redis 中存储然后检索字符串:
> SET user:1 salvatore
OK
> GET user:1
"salvatore"
  • 存储序列化的 JSON 字符串并将其设置为从现在起 100 秒后过期:
> SET ticket:27 "\"{'username': 'priya', 'ticket_id': 321}\"" EX 100
  • 增加⼀个计数器:
> INCR views:page:2
(integer) 1
> INCRBY views:page:2 10
(integer) 11

3.2 Redis 列表

Redis 列表是按插⼊顺序排序的字符串列表。

Redis 列表是字符串值的链接列表。Redis 列表经常⽤于:

  • 实现栈和队列。

  • 为后台⼯作系统构建队列管理。

3.2.1 基本命令
  • LPUSH 添加⼀个新元素到列表的头部; RPUSH 添加到尾巴。

  • LPOP 从列表的头部移除并返回⼀个元素; RPOP 做同样的事情,但从列表的尾部开始。

  • LLEN 返回列表的⻓度。

  • LMOVE 原⼦地将元素从⼀个列表移动到另⼀个列表。

  • LTRIM 将列表减少到指定的元素范围。

3.2.2 例⼦
  • 将列表视为队列(先进先出):
> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> RPOP work:queue:ids
"101"
> RPOP work:queue:ids
"237"
  • 将列表视为堆栈(先进后出):
> LPUSH work:queue:ids 101
(integer) 1
> LPUSH work:queue:ids 237
(integer) 2
> LPOP work:queue:ids
"237"
> LPOP work:queue:ids
"101"
  • 检查列表的⻓度:
> LLEN work:queue:ids
(integer) 0

3.3 Redis 集合

Redis 集是唯⼀字符串的⽆序集合,其作⽤类似于您最喜欢的编程语⾔(例如,Java HashSets、Python集等)中的集。使⽤ Redis 集,您可以添加、删除和测试是否存在 O(1) 时间(换句话说,⽆论集元素的数量如何)。

Redis 集是唯⼀字符串(成员)的⽆序集合。您可以使⽤ Redis 集来⾼效地:

  • 跟踪唯⼀项⽬(例如,跟踪访问给定博客⽂章的所有唯⼀ IP 地址)。

  • 表示关系(例如,具有给定⻆⾊的所有⽤户的集合)。

  • 执⾏常⻅的集合运算,例如交集、并集和差集。

3.3.1 基本命令
  • SADD 将新成员添加到集合中。

  • SREM 从集合中删除指定的成员。

  • SISMEMBER 测试集合成员的字符串。

  • SINTER 返回两个或多个集合共有的成员集合(即交集)。

  • SCARD 返回集合的⼤⼩(⼜名基数)。

3.3.2 例⼦
  • 存储⽤户 123 和 456 的收藏书 ID 集:
> SADD user:123:favorites 347
(integer) 1
> SADD user:123:favorites 561
(integer) 1
> SADD user:123:favorites 742
(integer) 1
> SADD user:456:favorites 561
(integer) 1
  • 检查⽤户 123 是否喜欢书籍 742 和 299
> SISMEMBER user:123:favorites 742
(integer) 1
> SISMEMBER user:123:favorites 299
(integer) 0
  • ⽤户 123 和 456 有没有共同喜欢的书?
> SINTER user:123:favorites user:456:favorites
1) "561"
  • ⽤户 123 收藏了多少本书?
> SCARD user:123:favorites
(integer) 3

3.4 Redis 哈希

Redis 哈希是建模为字段值对集合的记录类型。因此,Redis 哈希类似于Python 字典、Java HashMaps和Ruby 哈希。

3.4.1 基本命令
  • HSET 设置散列上⼀个或多个字段的值。

  • HGET 返回给定字段的值。

  • HMGET 返回⼀个或多个给定字段的值。

  • HINCRBY 通过提供的整数增加给定字段的值。

3.4.2 例⼦
  • 将基本⽤户配置⽂件表示为散列:
> HSET user:123 username martina firstName Martina lastName Elisa country GB
(integer) 4
> HGET user:123 username
"martina"
> HGETALL user:123
1) "username"
2) "martina"
3) "firstName"
4) "Martina"
5) "lastName"
6) "Elisa"
7) "country"
8) "GB"
  • 存储设备 777 对服务器执⾏ ping 操作、发出请求或发送错误的次数的计数器:
> HINCRBY device:777:stats pings 1
(integer) 1
> HINCRBY device:777:stats pings 1
(integer) 2
> HINCRBY device:777:stats pings 1
(integer) 3
> HINCRBY device:777:stats errors 1
(integer) 1
> HINCRBY device:777:stats requests 1
(integer) 1
> HGET device:777:stats pings
"3"
> HMGET device:777:stats requests errors
1) "1"
2) "1"

3.5 Redis 排序集

Redis 排序集是按关联分数排序的唯⼀字符串(成员)的集合。当多个字符串具有相同的分数时,字符串按字典顺序排列。排序集的⼀些⽤例包括:

  • 排⾏榜。例如,您可以使⽤排序集轻松维护⼤型在线游戏中最⾼分的有序列表。

  • 速率限制器。特别是,您可以使⽤排序集来构建滑动窗⼝速率限制器,以防⽌过多的 API 请求。

3.5.1 基本命令
  • ZADD 将新成员和关联的分数添加到已排序的集合中。如果该成员已经存在,则更新分数。

  • ZRANGE 返回在给定范围内排序的有序集合的成员。

  • ZRANK 返回所提供成员的排名,假设排序是按升序排列。

  • ZREVRANK 返回所提供成员的排名,假设排序集按降序排列。

3.5.2 例⼦
  • 随着玩家分数的变化更新实时排⾏榜:
> ZADD leaderboard:455 100 user:1
(integer) 1
> ZADD leaderboard:455 75 user:2
(integer) 1
> ZADD leaderboard:455 101 user:3
(integer) 1
> ZADD leaderboard:455 15 user:4
(integer) 1
> ZADD leaderboard:455 275 user:2
(integer) 0

请注意, user:2 在最后⼀次调⽤中更新了 score ZADD 。

  • 获取前 3 名玩家的分数:
> ZRANGE leaderboard:455 0 2 REV WITHSCORES
1) "user:2"
2) "275"
3) "user:3"
4) "101"
5) "user:1"
6) "100"
  • ⽤户 2 的等级是多少?
> ZREVRANK leaderboard:455 user:2
(integer) 0

3.6 Redis 流

Redis 流是⼀种数据结构,其作⽤类似于仅附加⽇志。您可以使⽤流实时记录和同时联合事件。Redis 流

⽤例示例包括:

  • 事件溯源(例如,跟踪⽤户操作、点击等)

  • 传感器监控(例如,现场设备的读数)

  • 通知(例如,将每个⽤户的通知记录存储在单独的流中)

Redis 为每个流条⽬⽣成⼀个唯⼀的 ID。您可以使⽤这些 ID 稍后检索它们的关联条⽬,或者读取和处理

流中的所有后续条⽬。

Redis 流⽀持多种修剪策略(以防⽌流⽆限制地增⻓)和不⽌⼀种消费策略(请参

阅 XREAD 、 XREADGROUP 和 XRANGE )。

3.6.1 基本命令
  • XADD 向流中添加⼀个新条⽬。

  • XREAD 读取⼀个或多个条⽬,从给定位置开始并及时向前移动。

  • XRANGE 返回两个提供的条⽬ ID 之间的条⽬范围。

  • XLEN 返回流的⻓度。

3.6.2 例⼦
  • 向流中添加多个温度读数
> XADD temperatures:us-ny:10007 * temp_f 87.2 pressure 29.69 humidity 46
"1658354918398-0"
> XADD temperatures:us-ny:10007 * temp_f 83.1 pressure 29.21 humidity 46.5
"1658354934941-0"
> XADD temperatures:us-ny:10007 * temp_f 81.9 pressure 28.37 humidity 43.7
"1658354957524-0"
  • 读取从 ID 开始的前两个流条⽬ 1658354934941-0 :
> XRANGE temperatures:us-ny:10007 1658354934941-0 + COUNT 2
1) 1) "1658354934941-0"
   2) 1) "temp_f"
      2) "83.1"
      3) "pressure"
      4) "29.21"
      5) "humidity"
      6) "46.5"
2) 1) "1658354957524-0"
   2) 1) "temp_f"
      2) "81.9"
      3) "pressure"
      4) "28.37"
      5) "humidity"
      6) "43.7"
  • 读取最多 100 个新的流条⽬,从流的末尾开始,如果没有条⽬被写⼊,则最多阻塞 300 毫秒:
> XREAD COUNT 100 BLOCK 300 STREAMS temperatures:us-ny:10007 $
(nil)

3.7 Redis 流教程

Redis 流数据类型是在 Redis 5.0 中引⼊的。Streams 为⽇志数据结构建模,但也实现了多个操作以克服典型的仅附加⽇志的⼀些限制。其中包括 O(1) 时间的随机访问和复杂的消费策略,例如消费组。

3.7.1 流基础
> XADD mystream * sensor-id 1234 temperature 19.8
1518951480106-0

上⾯对命令的调⽤使⽤⾃动⽣成的条⽬ ID在 key 处向流中 XADD 添加⼀个条⽬,该条⽬ ID 是命令返回的条⽬,特别是。它的第⼀个参数是键名,第⼆个参数是标识流中每个条⽬的条⽬ ID。然⽽,在这种情况下,我们通过了sensor-id: 1234, temperature: 19.8 mystream 1518951480106-0mystream因为我们希望服务器为我们⽣成⼀个新的 ID。每个新的 ID 都将单调递增,因此更简单地说,与所有过去的条⽬相⽐,每个新添加的条⽬都将具有更⾼的 ID。服务器⾃动⽣成 ID ⼏乎总是你想要的,明确指定 ID 的原因很少⻅。我们稍后会详细讨论这个。每个 Stream 条⽬都有⼀个 ID 的事实是与⽇志⽂件的另⼀个相似之处,其中可以使⽤⾏号或⽂件内的字节偏移来识别给定的条⽬。回到我们的 XADD 示例,在键名和 ID 之后,下⼀个参数是组成流条⽬的字段值对。可以使⽤以下 XLEN 命令获取 Stream 中的项⽬数:

> XLEN mystream
(integer) 1

3.8 Redis地理空间

Redis 地理空间索引让您可以存储坐标并进⾏搜索。此数据结构可⽤于查找给定半径或边界框内的附近 点。

3.8.1 基本命令
  • GEOADD 将位置添加到给定的地理空间索引(请注意,经度在使⽤此命令的纬度之前)。

  • GEOSEARCH 返回具有给定半径或边界框的位置。

3.8.2 例⼦

假设您正在构建⼀个移动应⽤程序,可以让您找到离您当前位置最近的所有电动汽⻋充电站。

将多个位置添加到地理空间索引:

> GEOADD locations:ca -122.27652 37.805186 station:1
(integer) 1
> GEOADD locations:ca -122.2674626 37.8062344 station:2
(integer) 1
> GEOADD locations:ca -122.2469854 37.8104049 station:3
(integer) 1

查找给定位置 5 公⾥半径范围内的所有位置,并返回到每个位置的距离:

> GEOSEARCH locations:ca FROMLONLAT -122.2612767 37.7936847 BYRADIUS 5 km
WITHDIST
1) 1) "station:1"
   2) "1.8523"
2) 1) "station:2"
   2) "1.4979"
3) 1) "station:3"
   2) "2.2441"

3.9 Redis HyperLog⽇志

HyperLogLog 是⼀种估计集合基数的数据结构。作为⼀种概率数据结构,HyperLogLog 以完美的准确性换取⾼效的空间利⽤。

Redis HyperLogLog 实现最多使⽤ 12 KB,并提供 0.81% 的标准错误。

3.9.1 基本命令
  • PFADD 向 HyperLogLog 添加⼀个项⽬。

  • PFCOUNT 返回集合中项⽬数的估计值。

  • PFMERGE 将两个或多个 HyperLogLog 合并为⼀个。

3.9.2 例⼦

向 HyperLogLog 添加⼀些项⽬:

> PFADD members 123
(integer) 1
> PFADD members 500
(integer) 1
> PFADD members 12
(integer) 1

估计集合中的成员数:

> PFCOUNT members
(integer) 3

3.10 Redis 位图

Redis 位图是字符串数据类型的扩展,可让您将字符串视为位向量。您还可以对⼀个或多个字符串执⾏按位运算。位图⽤例的⼀些示例包括:

  • 集合成员对应于整数 0-N 的情况的有效集合表示。

  • 对象权限,其中每⼀位代表⼀个特定的权限,类似于⽂件系统存储权限的⽅式。

3.10.1 基本命令
  • SETBIT 将提供的偏移量处的位设置为 0 或 1。

  • GETBIT 返回给定偏移量处的位值。

  • BITOP 允许您对⼀个或多个字符串执⾏按位运算。

3.10.2 例⼦

假设您在现场部署了 1000 个传感器,标记为 0-999。您想要快速确定给定传感器是否在⼀⼩时内对服务器执⾏了 ping 操作。

您可以使⽤其键引⽤当前⼩时的位图来表示此场景。

  • 传感器 123 在 2024 年 1 ⽉ 1 ⽇ 00:00 时对服务器执⾏ ping 操作
> SETBIT pings:2024-01-01-00:00 123 1
(integer) 0
  • 传感器 123 是否在 2024 年 1 ⽉ 1 ⽇ 00:00 时 ping 服务器?
> GETBIT pings:2024-01-01-00:00 123
1
  • 服务器456呢?
> GETBIT pings:2024-01-01-00:00 456
0

3.11 Redis 位域

Redis 位域允许您设置、递增和获取任意位⻓度的整数值。例如,您可以对从⽆符号 1 位整数到有符号63 位整数的任何内容进⾏操作。

这些值使⽤⼆进制编码的 Redis 字符串存储。位域⽀持原⼦读、写和递增操作,使它们成为管理计数器和类似数值的不错选择。

3.11.1 基本命令
  • BITFIELD 以原⼦⽅式设置、递增和读取⼀个或多个值。

  • BITFIELD_RO 是 的只读变体 BITFIELD 。

3.11.2 例⼦

假设您正在跟踪在线游戏中的活动。您想要为每个玩家维护两个关键指标:⾦币总量和杀死的怪物数量。因为您的游戏很容易上瘾,所以这些计数器的宽度⾄少应为 32 位。

您可以⽤每个玩家⼀个位域来表示这些计数器。

  • 新玩家以 1000 ⾦币开始教程(偏移量 0 中的计数器)。
> BITFIELD player:1:stats SET u32 #0 1000
1) (integer) 0
  • 杀死俘虏王⼦的地精后,加上获得的 50 ⾦币并增加“被杀”计数器(偏移量 1)。
> BITFIELD player:1:stats INCRBY u32 #0 50 INCRBY u32 #1 1
1) (integer) 1050
2) (integer) 1
  • ⽀付铁匠 999 ⾦币购买传说中⽣锈的⼔⾸。
> BITFIELD player:1:stats INCRBY u32 #0 -999
1) (integer) 51
  • 读取玩家的统计数据:
> BITFIELD player:1:stats GET u32 #0 GET u32 #1
1) (integer) 51
2) (integer) 1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值