当前 Redis 协助的数据类型(键值),并储存在对象键中

补偿下上篇作品集合的下令。 上篇地址
今日头条蜗牛 http://www.cnblogs.com/tdws/p/5785939.html 

《Redis 入门指南》(第二版)

SCARD Key得到执行集合中成分的多少。

第一章

图片 1

Redis 是什么

Redis (REmote Dictionary Server
远程字典服务器)是一个开源的、高品质的、基于键值对的缓存与存储系统,通过提供三种键值数据类型来适应不一样景观下的缓存与仓储须求。同时
Redis 的大队人马高档效用使其得以胜任信息队列,职责队列等分化的角色。

SDIFFSTORE 目标键 keys …  将集结做DIFF差集操作,并蕴藏在目的键中。

特性

存储结构

Redis 它以字典结构存储数据,并允许其余应用通过 TCP 商讨读取字典中的内容

此时此刻 Redis 襄助的数据类型(键值):

  • 字符串类型
  • 散列类型
  • 列表类型
  • 汇集类型
  • 逐步聚集类型

内存存储与持久化

Redis 数据存储在内存中。在一台一般的笔记本电脑上,Redis
可以在一秒内读写超过 10 万个键值。

假定程序退出内存,数据会丢掉,不过 Redis
提供了对持久化的帮忙,能够将内存中的多寡异步写入到硬盘中,同时不影响连续提供劳务。

成效充足

  • Redis 可以为各种键设置生活时间(TTL),这一可以的性质让 Redis
    可以当作缓存系统来行使。
  • Redis 援救持久化和增加的数据类型
  • Redis 列表类型键可以用来兑现队列,并且匡助阻塞式读取

PS: Redis 与 Memcached 质量上的分别, Redis 是单线程模型,而 Memcached
是八线程帮衬的,所以在多核服务器上后者的性质理论上相对更高一些。而 Redis
在品质上也是尤其高的,所以并非操心质量难题,而更多的去考虑功效难点。随着
Redis 3.0 的出产,标志着 Memcached 大致变成了 Redis 的子集。同时 Redis
对集群的扶助,也使得 Memcahced 原有的第三方集群工具不再成为优势。

作为缓存系统, Redis
还足以界定数量占用的最大内存空间,在数据达到空间限制后,可以遵从一定的条条框框自动淘汰不必要的键。

除此以外同样有SINTERSTORE,SUNIONSTORE.对于集合还不精晓的童鞋,请看上篇小说。

缘何使用 Redis

  • Redis 提供了 100
    多个指令,常用的唯有十多少个,并且逐个命令都很简单记念。
  • Redis 提供了几十种编程语言的客户端库。
  • Redis 是开源的

图片 2

第二章

终极一个要介绍的吩咐就是SRANDMEMBER
Key。从目的键中取随机一个因素。他是很有趣的。

Redis 版本规则

Redis 规定次版本号(小数点后的数字)为偶数的版本是平安版本(如 2.8
版本、3.0 版本),奇数为非稳定版,生产环境一般需求安静版本

时下SetA中有十个要素,当您指定的回来数量为正数,重返相应数额的即兴数,假设当先集合数量,那么将聚集全部要素重返。

安装

唯独只要你指定为负数,则会回到|负数|个,也就是说你指定-100,那么固然你唯有十个成分,也会给你取出一百个要素。

在 POSIX 系统中的安装

$ wget http://download.redis.io/xxxx.3-0.tar.gz
$ tar zxvf xxxx-3.0.tar.gz
$ cd redis-stable
$ make

Redis 没有外部正视,安装进度大约。编译后的 Redis 源代码目录的 src
文件夹中可以找到若干个可执行程序,最好在编译后一向实施 make install
命令来将那几个可执行程序复制到 /usr/local/bin
目录中以便将来推行顺序时能够不用输入完整的门径。

软件包管理器中的 redis 相比古老,对升级和属性有震慑,不推荐使用。

图片 3

在 OS X 系统中的安装

图片 4

在 Windows 中的安装

图片 5

启动和终止 Redis

直接开行

$ redis-server

默认使用 Redis 会使用 6379 端口,通过 --port 参数可以自定义端口号:

$ redis-server --port 6380

小心在选拔的时候也亟需指定相应的端口:

$ redis-cli -p 6380

透过起首化脚本启动 Redis

生育条件推荐使用此措施运行,可以使得 Redis 能随系统活动运行。在 Redis
安装目录下有一个 utils 目录中,有一个名为 redis_init_script
的初叶化脚本文件。

实际措施,可以参见本书中第二章 2.2.1 小节。

但是完全没有必要,可以执行安装目录下的 utils/install_server.sh 脚本。

$ ./install_server.sh
Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

内需小心的是第一步的时候可以挑选端口号,倘使急需指定分歧的端口或运行两个Redis 服务器,可以屡屡实施该文件,然后指定差其他端口即可。

依据最终的唤起,可以摸清,在 345 的运作级别下,默许开机启动的。可以实施
chkconfig 命令查看:

$ chkconfig --list redis_6379
redis_6379         0:关    1:关    2:开    3:开    4:开    5:开    6:关

停止 Redis

考虑到 Redis
有恐怕正在将内存中的数码同步到硬盘中,强行终止只怕会招致数据丢失。正确截至的法子是向
Redis 发送 SHUTDOWN 命令:

$ redis-cli SHUTDOWN

留神,不是使用的默许端口必要充分端口号,若是端口号为 6380,则:

$ redis-cli -p 6380 SHUTDOWN

别的我们得以见到上三张结果图,实际上,有时候也并不是那么随意,第一张和第三张图9的次数鲜明多,第二张图1的次数显明多。那是由于汇集的存储结构——散列表造成的。其散列函数为了兑现O(1)复杂度,会将成分映射到区其余“桶”当中,比如成分9被存到第四个桶当中,那么下两遍开展自由数接纳时,Redis先拔取桶,那么自然第三个桶中多少少的话,被取出来的几率也就大大增加。

Redis 命令行客户端

发送命令

通过 redis-cli 向 Redis 发送命令有三种艺术:

  • 先是种方法是将下令作为 redis-cli
    的参数执行,前边不跟参数会自行依据默许配置来施行,也可以经过点名
    -h-p 指定地址和端口,Redis 提供了 PING 命令来测试客户端与
    Redis 的接连是还是不是正常,要是正常会接到 PONG;
  • 其次种方法是不顺手参数运行
    redis-cli,那样会进来相互方式,可以私下输入指令,那种措施在要输入多条命令时相比便宜

指令再次回到值

最简单易行的一种答复,如举行 SET 会重临状态 OK 表示成功。

redis> PING
PONG

当现身命令不存在或指令格式有荒唐等景况时会再次来到错误回复,错误回复以(error)开首,并在后头跟上错误消息。

Redis 尽管从未整数类型,不过提供了有些用以整数操作的一声令下,如递增键值的
INCR
命令会以平头情势再次来到递增后的键值。除此之外还有一部分任何的操作,如得到当前数据库的键的多寡的
DBSIZE 命令。

redis> INCR foo
(integer) 1

是最常见的一种回复类型,当呼吁一个字符串类型的键的键值或一个其余类型键中的成分时,就会回来一个字符串,用引号包裹:

redis> GET foo
"1"

多行字符串回复中的每行字符串都以一个序号先河,如:

redis> keys *
1) "name"
2) "num"

配置

安顿文件可以设置端口号、是还是不是开启持久化、日志级别等。可以在启动 Redis
服务时指定计划文件,如:

$ redis-server /path/to/redis.conf

同时可以指定一些陈设项,那样会覆盖配置文件之中的参数,如:

$ redis-server /path/to/redis.conf --loglevel warning

源代码目录中有一个配备文件的模版 redis.conf。

除开,还足以在 Redis 运行时经过 CONFIG SET 命令在不重复起动 Redis
的图景下动态修改部分 Redis 配置:

redis> CONFIG SET loglevel warning
OK

PS:并不是独具配置都足以应用 CONFIG SET 命令修改。

翻看配置:

redis> config get loglevel
1) "loglevel"
2) "notice"

率先行代表选项名,第二行即是选项值。

有关散列函数,拉链法化解冲突请看百度百科链接

一大半据库

Redis
提供了多少个用于存储数据的字典,可以将内部的各种字典都驾驭成一个单独的数据库。

每种数据库对外都是以一个从0早先的递增数字命名, Redis 默许帮忙 16
个数据库。可以透过陈设参数 databases 来修改这一数字。 客户端与 Redis
建立连接后会自动选用 0 号数据库,可是可以每一天使用 SELSECT
命令更换数据库,如拔取 1 号数据库:

redis> select 1
OK
  • Redis
    不辅助自定义数据库的名字,各种数据库皆以编号命名,开发者必须记录哪些数据库存储了何等数据。
  • Redis
    不援助为各种数据库设置区其余访问密码,所以一个客户端还是能访问全体库,要么一个库也无法访问。
  • Redis 八个数据库之间并不是完全隔离的,如若 FLUSHALL
    命令可以清空一个实例下的装有数据库中的内容。不相同的选拔应该选取差距的
    Redis 实例来储存,由于 Redis 占用的内存只有 1MB
    左右,所以并非操心多个 Redis 实例会额外占用很多内存。

 

第三章

数据类型

热身

多少个基础命令:

1、获取符合规则的键名列表

KEYS pattern

pattern 协助 glob 风格通配符格式:

  • ? 匹配一个字符
  • * 匹配任意个(包罗0个)字符
  • [] 匹配括号间的任一字符,可以拔取 - 表示一个范围,如 a[b-d]
    可以匹配 “ab”、”ac”、”ad”
  • \x 匹配字母 x ,用于转义符号,如要匹配 ? ,能够选取 ?

注意: KEYS 命令须求遍历 Redis
中的所有键,当键的数额较多时会影响属性,不指出在生育条件中使用。
PS: Redis 不区分命令大小写

2、判断一个键是否存在

EXISTS key

如若存在再次来到 1,不设有重返 0.

3、删除键

DEL key [key1 ... ]

可以去除一个或三个键,再次回到值是去除的键的个数。

Tips: DEL 命令参数不匡助通配符,但可以做类似 Linux
的管道符的操作。比如要刨除以 “user:”开关的键,可以举行
redis-cli KEYS "user:*" | xargs redis-cli DEL,其余由于 DEL
命令帮衬多少个键作为参数,可以举办
redis-cli DEL 'redis-cli KEYS "user:*"'(注意,里面是 “`” 号,操蛋的
markdown)。达到的功能一样,但功能更高。

4、获取得键值的数据类型

TYPE key

返回值或然是
string(字符串类型)、hash(散列)、list(列表类型)、set(集合类型)、zset(有序聚集类型)。

字符串类型

介绍

它能储存任何形式的字符串,包蕴二进制数据。一个字符串类型键允许存储的数额的最大容量是
512MB。

命令

1、赋值与取值

SET key value
GET key

存值时假使有空格要加引号,取值当不设有时,会回来空结果。

2、递增数字

INCR key

当存储的字符串是整数时,INCR
命令的机能是让目前键值递增,并回到增后的值。

redis> INCR pv
(integer) 2

PS: 当要操作的键不存在时会默许键值为 0,所以率先次递增后的结果是 1

PS: 若是 key 不是整数类型,会报错

127.0.0.1:6379> SET name "Eden"
127.0.0.1:6379> INCR name
(error) ERR value is not an integer or out of range

PS: 不提出使用 GET SET
方式去将一个值取出来,然后写一个函数去团结已毕它,假诺三个客户端同时取出了那个value,就会出竞态条件。而 Redis
自己上原子操作的,无论多少个客户端同时连接,都不会出现那种意况。

实践

TIPS: Redis 键命名

Redis 本人对于键的命名并没有强制的渴求,但比较灵通的实践是用
“对象类型:对象ID:对象属性” 来定名的,如 user:1:friends

对于三个单词则援引使用 “.” 分隔。

为了掩护方便,命名一定要有意义。

若果用 Redis 作为数据库,可以应用 INCR 命令来设置自增 ID。

积存数据,如数组,大家须求选用体系化的函数(如PHP的 serialize
Javascript 的 JSON.stringify
),除此之外,字符串类型键可以储存二进制数据,能够利用 MessagePack
举行种类化,速度更快,占用空间更小。

一声令下拾遗

  1. 扩大指定的平头, INCRBY key incrementINCR
    相似,只然则后者每一次增添 1 个,前者可以指定数值。
  2. 缩减指定的平头, DECR keyDECRBY key decrementINCR
    相似,只可是是让键值递减。
  3. 充实指定浮点数,
    INCRBYFLOAT key increment,可以追加一个双精度浮点数。incrbyfloat salary 100.23
  4. 向尾部追加值, APPEND key value
    向键值的底部追加值,如果键不设有则将该键的值设置为
    value,重临值是增添字符串后的总长度。
  5. 取得字符串长度, STRLEN key,再次来到键值的长度,倘若不存在则赶回
    0,计算中文时,若是为 utf-8 编码,则每一种粤语相当于 3 个出字节。
  6. 而且得到/设置多少个键值,MGET key [key1 key2 ...]
    MSET key value [key1 value1 ...],假设位数有不当,会报错。
  7. 位操作,GETBIT key offset SETBIT key offset value
    BITCOUNT key [start] [end]
    BITOP operation destkey key [key ... ],略书 29 页。

redis>incr c
(integer) 1
redis> incrby c 5
(integer) 6

redis>decr c
(integer) 5
redis> decrby c 3
(integer) 2

redis>incrbyfloat c 1.5
"3.5"

redis>set greeting Hello
OK
redis>append greeting " world."
(integer) 11

127.0.0.1:6379> mset name ZhangSan sex man age 18
OK
127.0.0.1:6379> mget name sex age
1) "ZhangSan"
2) "man"
3) "18"

散列类型 (hash)

介绍

散列类型的键值也是一种字典结构,其储存了字段和字段值的映照,但字段值只可以是字符串,不援救其余数据类型。换句话说,散列类型无法嵌套其余的数据类型。一个散列类型键可以涵盖至多
232 – 1个字段。

除了散列类型, Redis
的别样数据类型同样不辅助数据类型嵌套。比如集合类型的每一个成分都不得不是字符串,不大概是另一个见面或散列表等

散列类型适合储存对象:使用对象连串和 ID
构成键名,使用字段表示对象的本性,而字段值则存储属性值。

命令

1、赋值与取值

HSET key field value
HGET key field
HMSET key field value [field value ...]
HMGET key field [field ...]
HGETALL key

HSET
命令不区分插入和立异操作,那象征修改数据时不用事先判断字段是或不是留存来支配要举办的是插入依旧更新操作。

2、判断字段是不是留存

HEXISTS key field

假诺存在则赶回1,否则重回0(假设键不存在也会再次回到0)

3、当字段不存在时赋值

HSETNX key field value

PS:NX 表示 if not exists

4、增加数字

HINCRBY key field increment

散列类型没有 HINCR 命令,不过足以经过 HINCRBY key filed 1
来贯彻,在此以前不存在的 key 会自动建立。

5、删除字段

HDEL key field [field2 ...]

实践

一声令下拾遗

1、只得到字段名或字段值

HKEYS key
HVALS key

2、获取字段数量

HLEN key

列表类型

介绍

列表类型可以储存一个不变的字符串列表,常用的操作是向列表两端添泰铢素,只怕取得列表的某一个部分。

列表类型内部是利用双向链表完成的,所以向列表两端添美金素的时刻复杂度都是平等的
O(1)。

可是使用链表的代价是透过索引访问成分相比较慢,也即从一个链表中得到某一个因素,那种气象下不如
散列 类型。

凭借链表的花色,Redis
还足以看做队列使用,与散列类型键最多能容纳的字段数量同样,一个列表类型键最多能容纳
232 – 1 个元素。

命令

1、向列表两端增比索素

// 向左边增加元素,支持多个元素
LPUSH key value [value2 ... ]
// 向右边增加元素,支持多个元素
RPUSH key value [value2 ... ]

2、从列表两端弹出成分

// 从左边弹出一个元素
LPOP key
// 从右边弹出一个元素
RPOP key

弹出一个要素分两步操作:一是将列表两边的某个成分删除,二是回到该因素。

3、获取列表中的成分个数

LLEN key

当键不存在时 LLEN 返回 0.

4、获取列表片断

LRANGE key start stop

回来从 start 到 stop 之间的要素(包罗两端的成分), Redis
的列表起先索引为 0。

LRANGE 命令在得到列表片段的同时不会像 LPOP 一样删除该有的。

LRANGE 命令也援助负数索引,表示从右边初始盘算序数。如 -1
就象征右侧第二个因素。

破例情况:

  1. 比方 start 的目录地点比 stop 的地点靠后,则会回去空列表。
  2. 一经 stop 大于实际的目录范围,则会回来到列表最右侧的成分。

5、删除列表中指定的值

LREM key count value

剔除列表中前 count 个值为 value 的元素。再次来到值是事实上删除的因素的个数。

  1. 当 count > 0 时,LREM 命令会从列表左侧初步删除前 count 个值为
    value 的因素。
  2. 当 count < 0 时,LREM 命令会从列表左侧开头删除前 |count| 个值为
    value 的因素。
  3. 当 count = 0 时,LREM 命令会删除所有值为 value 的成分。

实践

略 P45

命令拾遗

1、获取 / 设置指定索引的元素

// 获取索引为 index 的元素
LINDEX key index

// 设置索引为 index 的元素的值为 value
LSET key index value

目录从 0 伊始,假设 index
是负数表示从右侧初始索引,左侧第二个因素的目录是 -1。

2、只保留列表指定片段

LTRIM key start end

去除指定索引范围之外的有所因素,指定列表范围的不二法门和 LRANGE 相同。

LTRIM 命令常和 LPUSH
命令一起来界定列表中成分的多寡,比如记录一个日志时大家期望只保留最新的
100 条日志。

redis> LPUSH numbers 1
redis> LTRIM numbers 0 99

3、向列表中插入成分

LINSERT key BEFORE|AFTER  pivot value

LINSERT 命令先会在列表中从左到右查找值为 pivot
的因素,然后依照第一个参数是 BEFORE 仍然 AFTER 来决定将 value
插入到该因素的面前仍然背后。

重返值为插入后列表的成分的个数。

PS:倘使列表中有三个成分的值都是一致的,也即有五个 pivot 的值,那么使用
LINSERT 命令只会插入到第三个因素的先头或后边。

4、将一个成分从一个列表转到另一个列表

RPOPLPUSH source destination

RPOPLPUSH 会先从 source 列表类型键的下手弹出一个因素,然后将其插入到
destination 的左手。并赶回这一个因素的值。

当 source 和 destination 相同时,RPOPLPUSH
命令会不断地将队尾的成分移到队首,那一个性子能够兑现一个网站监控系统,具体要求见
P48。

聚集类型(set)

介绍

在聚集中的每种成分都是不相同的,且没有种种。一个集合类型键可以储存至多
232 – 1个字符串。

鉴于汇集类型在 Redis
内部是应用值为空的散列表完毕的,所以这一个操作的光阴复杂度都是
O(1)。最便利的是多个集合类型键之间还足以开展并集、交集和差集运算。

命令

1、伸张删除成分

// 向集合中增加一个或多个元素,如果键不存在则会自动创建
// 因为在一个集合中不能有相同元素,所以如果要加入的元素已经存在于集合中就会忽略这个元素
// 该命令返回成功加入的数量(忽略的元素不计在内)
SADD key member [member2 ...]

// 返回删除成功的个数
SREM key member [member2 ...]

2、获取集合中的所有因素

SMEMBERS key

回来集合中的所有因素

3、判断成分是不是在聚集中

SISMEMBER key member

key 集合中如果存在 member 值则赶回 1,若是不存在则赶回 0。

4、集合间的演算

// 求差集
// 计算在 key 中出现,但在 key2 中没出现,得到的结果与 key3 进行计算
SDIFF key [key2 key3 ...]

// 求交集
// 在 key 中出现,同时也在 key2 中出现
SINTER key [key2 key3 ...]

// 求并集
// 
SUNION key [key2 key3 ...]

实践

  • 储存文章标签
  • 经过标签搜索作品

指令拾遗

1、获取成分中聚合的个数

SCARD key

2、举办联谊运算并将结果存储

SDIFFSTORE destination key [key2 ...]
SINTERSTORE destination key [key2 ...]
SUNIONSTORE destination key [key2 ...]

如上多个指令都将 SDIFF SINTER SUNION 计算得到的结果保存在键为
destination 的集合中。

3、随机获得集合中的成分

SRANDMEMBER key [count]

可以传递 count 参数来一回随机得到一个或七个因素。

基于 count 的正负差别,具体表现也不比:

  • 当 count 为正数时, SRANDMEMBER 会随机从集合里拿走 count
    个不另行的要素,若是 count
    的值超出集合中的元素个数(SCARD),则赶回集合中的全部要素,那个因素不会重复的
  • 当 count 为负时,会轻易从集合里获取 |count |
    个因素,那些要素只怕重新

4、从集合中弹出一个要素

SPOP key

但出于会聚类型的因素是无序的,所以 SPOP
命令会从集合中随机选用一个成分弹出。

有序聚集类型

介绍

在汇集类型的根底上平稳聚集中的各种成分都关乎了一个分数,这使得大家不仅可以已毕插入、删除和判断成分是还是不是留存等联谊类型的操作,仍可以够拿走分数最高(或最低)的前N个要素,得到指定分数范围内的成分等与分数有关的操作。

聚拢中的成分是区其余,但它们中的分数是足以一样的。

不变聚集与列表的相似点:

  • 相互都是稳步的。
  • 两岸都可以拿走一定范围的要素。

一如既往聚集与列表的不一致点:

  • 列表是因此链表完结的,得到将近两端的数据分外快,而当成分增多后,访问中间的要素会相比慢,所以列表比较吻合完成如“新鲜事”
    或 “日志”那样很少访问中间成分的选拔;
  • 有序聚集类型是选取散列表和跳跃表完结的,不怕放在中等地方的数码,速度也很快
  • 列表中无法大约地调动某个成分的职位,不过不序集合可以(通过变更那个成分的分数)
  • 有序聚集要比列表类型更成本内存

命令

1、增比索素

ZADD key score member [score2 member2 ...]

ZADD
命令用来向有序聚集中插足一个因素和该因素的分数,假使该因素已经存在,则会用新的分数替换原有的分数,
ZADD
命令的再次来到值是新投入到集结中的成分的个数(不含有此前已经存在的要素)

2、获取成分的分数

ZSCORE key member

3、获取排行在某个范围的成分列表

ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]

ZRANGE 命令会依照成分分数从小到大的顺序再次来到索引从 start 到 stop
之间的具有因素(包含两端的成分),负数从后往前找(-1意味最终一个)。ZREVRANGE
命令会逆序查找。在底部加上 WITHSCORE 可以会同分数一起查出来。

# 返回所有 keys 集合中的元素
redis> ZRANGE keys 0 -1 

4、得到指定分数范围的因素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset limit]

按成分分数从小到大的各样重回分数在 min 和 max 之间(包括 min 和
max)的因素。

比方期待分数范围不含有端点值,可以在分数前拉长“(”符号。

min 和 max 还支持无穷大, -inf+inf 分别表示负无穷和正无穷。

offset 和 limit 类似于 SQL 语句。

# 获取键为 scoreboard 的有序集合分数为80(不包含)到正无穷的元素
redis> ZRANGEBYSCORE scoreboard (80 +inf

5、增加某个成分的分数

ZINCRBY key increment member

ZINCRBY 命令可以扩张一个成分的分数,重返值是改变后的分数。

实践

指令拾遗

1、得到集合中成分的数码

ZCARD key

2、获取指定分数范围内的成分个数

ZCOUNT key min max

min 和 max 参数的性状与 ZRANGEBYSCORE 命令中的一样。

3、删除一个或四个要素

ZREM key member [member2 ...]

重回值是马到功成删除的要素的个数(不分包我就不存在的元素)

4、根据名次范围删除成分

ZREMRANGEBYRANK key start stop

按元素分数从小到大的次第(即索引从0初始)删除处在指定排行范围内的成分,并回到删除的成分数量。

5、按分数范围删除成分

ZREMRANGEBYSCORE key min max

删去指定分数范围内的要素,min 和 max 天性和 ZRANGEBYSCORE
一样。重回值为除去成分的多寡。

6、得到成分的排行

ZRANK key member
ZREVRANK key member

按成分分数从小到大的种种获得指定的因素的名次(从0开首)。后者相反。

第四章

事务

  • Redis 保障一个作业中的所有命令要么都履行,要么都不履行
  • Redis 中的事务有限扶助一个工作内的一声令下依次执行而不被别的命令插入

错误处理

# 事务开始
redis> MULTI

redis> set str A
redis> set str B

# 事务结束
redis> EXEC
  1. 语法错误。语法错误指命令不存在或许命令参数的个数不对,只要有一个下令有语法错误,执行
    EXEC 命令后 Redis 就会从来重回错误,连语法正确的吩咐也不例外。
  2. 运行错误。指在指令执行时现身的不当,比如利用散列类型的通令操作集合类型的健,如若事情里的一条命令运行错误,别的命令会继续执行(包括出错命令之后的一声令下)。

WATCH 命令介绍

注意:
因为业务中的每一种命令的实施结果都是最后一起再次回到的,所以无法将前一条命令的结果作为下一条命令的参数。

WATCH
命令可以监控一个或七个键,一旦中间有一个键被改动(或删除),之后的工作就不会进行。监控一贯不绝于耳到
EXEC 命令(事务中的命令是在 EXEC 之后才实施的,所以在 MULTI
命令后得以修改 WATCH 监控的键值)。这是一种预防竞态条件的做法,如:

redis> set key 1
OK
redis> watch key
OK
redis> set key 2
OK
redis> multi
OK
redis> set key 3
QUEUED
redis> exec
(nil)
redis> get key
"2"

执行 EXEC
命令后会撤销对所有键的督察,即使不想举行工作中的命令也足以利用 UNWATCH
命令来裁撤监控。

过期时间

设置过期时间命令

# 单位是秒
EXPIRE key time

# 单位是毫秒
PEXPIRE key microtime

查看过期光阴命令

# 返回毫秒数
TTL key

# 返回秒数
PTTL key

PS:假使键不存在,重临值为 -2, 倘若永久保存,重临值为 -1

打消过期时间

  • 使用命令 PERSIST,要是成功化解则赶回 1, 否则赶回
    0(因为键不设有或键本来就是永恒的)。
  • 使用 SETGETSET 命令也会去掉过期岁月(设置永不过期 -1)
  • 使用 EXPIRE 可以再一次设置过期时间 expire key time

其他只对键值进行操作的命令 (如 INCRLPUSHHSET
ZREM),均不会影响键的晚点时间。

做客频率限制

P76

缓存

修改 Redis 配置文件(/usr/redis/6379.conf)。

  • 界定 Redis 可以接纳的最大内存, maxmemory 参数,单位是 Byte
  • 跨越这几个界定时 Redis 会依据 maxmemory-policy
    参数指定的策略来删除不要求的键,其政策参考 P78 页
  • 当跨越限定时老是从数据库中肆意删除的多少个键的数码会依照
    maxmemory-samples 参数来安装

排序

SORT 命令

SORT
命令可以对列表类型、集合类型和有序集合类型键进行排序,并且可以成功与关周到据库中的连接查询相接近的义务。

SORT key

除此之外可以排列数字外,SORT 命令可以经过 ALPHA
参数完成按字典顺序排列非数字成分

SORT key ALPHA

SORT 命令默许是正序排序,还足以逆序排序

SORT key DESC

还能支撑 LIMIT 参数来回到指定范围的结果

SORT key DESC LIMIT offset limit

BY 参数

语法

~ BY 参考键

里面参考键能够是字符串类型键大概是散列类型键的某个字段(表示为
键名->字段名),假如提供了 BY 参数, SORT
命令将不再依照成分本人的值举行排序,而是对种种成分选择要素的值替换参数键中的第四个”*” 并获得其值,其后根据该值对成分排序,如:

redis> SORT key BY posts:*->time DESC

上例中的posts:*->time 表示,有一个散列类型的键值为 posts
的数据类型数据,其中有一个品质叫做 time,以上就是基于那个 time
的值来做为排序的依据。

借使多少个成分的参阅键值相同,则 SORT
命令会再相比较成分本身的值来决定成分的各类。

当某个成分的参考键不设有时,会默许参考键的值为 0。

第五章

什么在编程语言中运用 Redis

第六章

Redis 脚本的有力成效

沙盒、随机结果

第七章

Redis 持久化知识

RDB

AOF

第八章

四个 Redis 实例维护的形式。

第九章

Redis 安全和商谈

相关文章