文章目录
注:本文文字均从老师课件复制
redis-day1
redis简介
Redis 是完全开源免费的一个高性能的key-value数据库
内存数据库
Redis 有以下三个特点:
1.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储(这些数据类型主要指的的是value的,key是正常的字符串)
3.Redis支持数据的备份
redis优势
-
性能极高
Redis能读的速度是110000次/s,写的速度是81000次/s 。
-
丰富的数据类型
Redis支持二进制类型存储。 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
-
原子操作
Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
-
丰富的特性
Redis还支持 publish/subscribe(发布/订阅模式), 通知, key值过期等等特性
redis的下载
Redis官网地址
Redis最新stable版本下载地址(稳定版本)
Redis的源码同时也托管在github上面
windows版本下载地址1-releases(官网提供的是Linux版本)
windows版本下载地址2-downloads(官网提供的是Linux版本)
redis的安装
根据自己的情况,新建一个目录(例如,D:\Briup\Redis-x64-3.2.100),注意路径中不要出现中文字符.
把下载好的Redis的压缩包解压到新建的指定文件夹中,可以看见一些可执行文件(版本不同可能此处会有区别)
文件名 | 描述 |
---|---|
redis-server.exe | redis 服务器 |
redis-cli.exe | redis 命令行客户端 |
redis-benchmar.exe | redis 性能测试工具 |
redis-check-aof.exe | AOF 文件修复工具 |
redis简单的测试
1.启动Redis服务器
1.开启一个cmd窗口
2.使用cd命令切换目录到 D:\Briup\Redis-x64-3.2.100
3.运行 redis-server.exe redis.windows.conf
启动成功后会看到启动的图案和启动信息(包括Redis版本、监听端口号等)
注意:这个服务器的运行窗口不能关闭,如果关闭Redis服务器就停了
注意:ctrl+c可以也关闭redis服务器
2.启动Redis客户端
1.另开启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了
2.切换到redis目录下运行
redis-cli.exe -h 127.0.0.1 -p 6379
或者
redis-cli.exe
不加任何参数默认就是127.0.0.1 和 6379
启动客户端后,可以尝试操作一下:
设置键值对操作 set name lisa
取出键值对操作 get name
这时候客户端使用shutdown命令可以关闭服务端
注意:Redis中命令本身不区分大小写(但是key值是区分大小写的),在redis自带的客户端执行相关命令是自带命令格式的提示的
客户端常用命令 | 描述 |
---|---|
clear | 清屏 |
Auth | 命令用于检测给定的密码和配置文件中的密码是否相符 |
Ping | 使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 。 通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。 |
Quit | 命令用于关闭当前客户端与redis服务的连接。一旦所有等待中的回复(如果有的话)顺利写入到客户端,连接就会被关闭 |
Select | 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。 |
dbsize | 查看当前数据库中有多少个key |
info | 返回redis的相关信息 |
flushdb | 删除当前选择数据库中的所有key |
flushall | 删除所有数据库中的数据库 |
redis配置参数介绍
redis.windows.conf文件中配置项如下:
1)Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程(windows版本中不支持)
daemonize no
2)当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(windows版本中不支持)
pidfile /var/run/redis.pid
3)指定Redis监听端口,默认端口为6379
port 6379
4)绑定的主机地址
bind 127.0.0.1
5)当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 300
6)指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为notice(redis版本不同会有所区别)
loglevel notice
7)日志记录方式,默认为标准输出
logfile stdout
8)设置数据库的数量,默认数据库的index为0,可以使用SELECT 命令在连接上指定数据库id
databases 16
9)指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save <seconds> <changes>
Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
10)指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes
11)指定redis的本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
12)指定redis本地数据库存放目录,默认是./ 可以根据自己的情况更改
dir ./
13)设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof <masterip> <masterport>
14)当master服务设置了密码保护时,slav服务连接master的密码
masterauth <master-password>
15)设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭
requirepass pwd
16)设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
maxclients 128
17)指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
maxmemory <bytes>
18)指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly no
19)指定更新日志文件名,默认为appendonly.aof
appendfilename appendonly.aof
20)指定更新日志条件
共有3个可选值
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec
21)指定是否启用虚拟内存机制,默认值为no
VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中
vm-enabled no
22)虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-swap-file /tmp/redis.swap
23)将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0
vm-max-memory 0
24)Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的数据大小来设定的,建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不确定,就使用默认值
vm-page-size 32
25)设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,在磁盘上每8个pages将消耗1byte的内存。
vm-pages 134217728
26)设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4
vm-max-threads 4
27)设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启
glueoutputbuf yes
28)指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
29)指定是否激活重置哈希,默认为开启
activerehashing yes
30)指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件
include /path/to/local.conf
redis支持的数据类型
(这里的数据类型主要指的value的数据类型,key一般就是字符串)
string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(sorted set:有序集合)
1.string(字符串)
string是redis最基本的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
例如:
127.0.0.1:6379> set name lisa
OK
127.0.0.1:6379> get name
"lisa"
//删除
127.0.0.1:6379> del name
(integer) 1
注意:value中的双引号要不要都可以
写成 set name lisa 或者 set name "lisa"都可以
2.hash(哈希)
Redis hash 是一个键值对集合。
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
例如:
127.0.0.1:6379> hmset user username lisa password 123
OK
127.0.0.1:6379> hgetall user
1) "username"
2) "lisa"
3) "password"
4) "123"
127.0.0.1:6379> hget user username
"lisa"
//删除
127.0.0.1:6379> del user
(integer) 1
例子中使用了 hash 数据类型存储了包含用户信息的用户对象。
每个 hash 可以存储2的31次方个键值对。
注意:命令不区分大小写
3.list(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
例如:
//插入到列表头部(左边)
127.0.0.1:6379> lpush mylist hello
(integer) 1
127.0.0.1:6379> lpush mylist world
(integer) 2
127.0.0.1:6379> lrange mylist 0 1
1) "world"
2) "hello"
//插入到列表尾部(右边)
127.0.0.1:6379> rpush mylist a
(integer) 3
127.0.0.1:6379> lrange mylist 0 2
1) "world"
2) "hello"
3) "a"
//删除
127.0.0.1:6379> del mylist
(integer) 1
列表最多可存储2的31次方个元素。
4.set(无序集合)
Redis的Set是string类型的无序集合。
集合是通过哈希表实现的。
sadd
命令
添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经存在则返回0,key对应的set不存在返回错误。
例如:
127.0.0.1:6379> sadd myset hello
(integer) 1
127.0.0.1:6379> sadd myset world
(integer) 1
127.0.0.1:6379> sadd myset world
(integer) 0
127.0.0.1:6379> smembers myset
1) "world"
2) "hello"
//删除
127.0.0.1:6379> del myset
(integer) 1
集合中最大的成员数为 2的31次方。
5.zset(有序集合)
Redis中 zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd
命令
添加元素到集合,元素在集合中存在则更新对应score
例如:
127.0.0.1:6379> zadd myzset 2 lisa
(integer) 1
127.0.0.1:6379> zadd myzset 0 hello
(integer) 1
127.0.0.1:6379> zadd myzset 1 world
(integer) 1
127.0.0.1:6379> zadd myzset 1 anni
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE myzset 0 3
1) "hello"
2) "anni"
3) "world"
4) "lisa"
//删除
127.0.0.1:6379> del myzset
(integer) 1
redis的操作命令
redis对key的操作命令
对key的操作命令 | 描述 |
---|---|
DEL | 命令用于删除已存在的键。不存在的 key 会被忽略。 |
EXISTS | 命令用于检查给定 key 是否存在。 |
EXPIRE | 命令用于设置 key 的过期时间。key 过期后将不再可用。单位是秒 |
PEXPIRE | 命令用于设置 key 的过期时间。key 过期后将不再可用。单位是毫秒 |
Expireat | 命令用于以时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。 |
PEXPIREAT | 命令用于设置 key 的过期时间,单位是毫秒。key 过期后将不再可用 |
PERSIST | 命令用于移除给定 key 的过期时间,使得 key 永不过期。 |
Keys | 命令用于查找所有符合给定模式 pattern 的 key,可以使用*通配符 |
MOVE | 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。 默认Redis中有16个数据库,下标分别为0-15,默认使用的是0(select 0) 通过select可以切换数据库 例如: select 3 |
TTL | 命令以秒为单位返回 key 的剩余过期时间。 |
Pttl | 命令以毫秒为单位返回 key 的剩余过期时间。 |
RANDOMKEY | 命令从当前数据库中随机返回一个 key。 |
Rename | 命令用于修改key的名称。 rename msg my_msg |
Renamenx | 命令用于在新的key不存在时修改key的名称。 renamenx username name 只要新的名字在redis中不存在的时候才会修改成功 |
Type | 命令用于返回 key 所储存的值的类型。 |
redis对字符串(String)的操作命令
命令 | 描述 |
---|---|
SET | 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。 |
Get | 命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。 |
Getrange | 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。 |
Getset | 命令用于设置指定 key 的值,并返回 key 旧的值。 |
Mset | 命令用于同时设置一个或多个 key-value 对。 |
Mget | 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面有某个 key 不存在,那么这个 key 返回特殊值 nil 。 |
Setex | 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。 |
Psetex | 命令以毫秒为单位设置 key 的生存时间。 |
Setnx(SET if Not eXists) | 命令在指定的 key 不存在时,为 key 设置指定的值。 |
Msetnx | 命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。 |
Setrange | 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。 |
Strlen | 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。 |
Incr | 命令将 key 中储存的数字值增一。 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 本操作的值限制在 64 位(bit)有符号数字表示之内。 |
Incrby | 命令将 key 中储存的数字加上指定的增量值。 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 本操作的值限制在 64 位(bit)有符号数字表示之内。 |
Incrbyfloat | 命令为 key 中所储存的值加上指定的浮点数增量值。 如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。 |
Decr | 命令将 key 中储存的数字值减一。 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 本操作的值限制在 64 位(bit)有符号数字表示之内。 |
Decrby | 命令将 key 所储存的值减去指定的减量值。 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 本操作的值限制在 64 位(bit)有符号数字表示之内。 |
Append | 命令用于为指定的 key 追加值。 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。 |
redis对哈希(hash)的操作命令
命令 | 描述 |
---|---|
Hset | 命令用于为哈希表中的字段赋值 。 如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。 如果字段已经存在于哈希表中,旧值将被覆盖。 |
Hsetnx | 命令用于为哈希表中不存在的的字段赋值 。 如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。 如果字段已经存在于哈希表中,操作无效。 如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。 |
Hmset | 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。 此命令会覆盖哈希表中已存在的字段。 如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作 |
Hget | 命令用于返回哈希表中指定字段的值。 |
Hmget | 命令用于返回哈希表中,一个或多个给定字段的值。 如果指定的字段不存在于哈希表,那么返回一个 nil 值。 |
Hgetall | 命令用于返回哈希表中,所有的字段和值。 |
Hexists | 命令用于查看哈希表的指定字段是否存在。 |
Hlen | 命令用于获取哈希表中字段的数量。 |
Hdel | 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。 |
Hkeys | 命令用于获取哈希表中的所有字段名。 |
Hvals | 命令返回哈希表所有字段的值。 |
Hincrby | 命令用于为哈希表中的字段值加上指定增量值。 增量也可以为负数,相当于对指定字段进行减法操作。 如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。 如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。 对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。 本操作的值被限制在 64 位(bit)有符号数字表示之内。 |
Hincrbyfloat | 命令用于为哈希表中的字段值加上指定浮点数增量值。 如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。 |
redis对列表(List)的操作命令
命令 | 描述 |
---|---|
Lpush | 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。 |
Lrange | 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 |
Lpushx | 将一个或多个值插入到已存在的列表头部,列表不存在时操作无效。 |
Lpop | 命令用于移除并返回列表的第一个元素。 |
Llen | 命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。 |
Lindex | 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 |
Linsert | 命令用于在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。 例如:LINSERT list before hello go 在名字为list的列表中,往元素hello之前插入数据go |
Lset | 通过索引来设置元素的值。当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。 |
Ltrim | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 |
Lrem | 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。 COUNT 的值可以是以下几种: count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。 count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。 count = 0 : 移除表中所有与 VALUE 相等的值。 |
Rpush | 命令用于将一个或多个值插入到列表的尾部(最右边)。 |
Rpushx | 命令用于将一个或多个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效 |
Rpop | 命令用于移除并返回列表的最后一个元素。 |
Rpoplpush | 命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。 |
Blpop | 命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时(s)或发现可弹出元素为止。 |
Brpop | 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
Brpoplpush | 命令从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
redis对集合(Set)的操作命令
命令 | 描述 |
---|---|
Sadd | 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。 假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。 当集合 key 不是集合类型时,返回一个错误。 |
Scard | 命令返回集合中元素的数量。 |
Smembers | 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。 |
Sdiff | 命令返回给定集合之间的差集。不存在的集合 key 将视为空集。 |
Sdiffstore | 命令将给定集合之间的差集存储在指定的集合中。如果指定的集合 key 已存在,则会被覆盖。 |
Sinter | 命令返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。 |
Sinterstore | 命令将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖。 |
Sismember | 命令判断成员元素是否是集合的成员。 |
Smove | 命令将指定成员 member 元素从 source 集合移动到 destination 集合 SMOVE 是原子性操作。 如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。 当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。 当 source 或 destination 不是集合类型时,返回一个错误。 |
Spop | 命令用于移除并返回集合中的一个随机元素。 |
Srandmember | 命令用于返回集合中的一个随机元素。 从 Redis 2.6 版本开始, Srandmember 命令接受可选的 count 参数: 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。 该操作和 SPOP 相似,但 SPOP 将随机元素从集合中移除并返回,而 Srandmember 则仅仅返回随机元素,而不对集合进行任何改动。 |
Srem | 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。 当 key 不是集合类型,返回一个错误。 在 Redis 2.4 版本以前, SREM 只接受单个成员值。 |
Sunion | 命令返回给定集合的并集。不存在的集合 key 被视为空集。 |
Sunionstore | 命令将给定集合的并集存储在指定的集合 destination 中。 |
Sscan | 命令用于迭代集合键中的元素。 |
redis对有序集合(sorted set)的操作命令
命令 | 描述 |
---|---|
Zadd | 命令用于将一个或多个成员元素及其分数值加入到有序集当中。 如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。 分数值可以是整数值或双精度浮点数。 如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。 当 key 存在但不是有序集类型时,返回一个错误。 |
Zcard | 命令用于计算集合中元素的数量。 |
Zcount | 命令用于计算有序集合中指定分数区间的成员数量。 |
Zincrby | 命令对有序集合中指定成员的分数加上增量 increment 可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。 当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。 当 key 不是有序集类型时,返回一个错误。 分数值可以是整数值或双精度浮点数。 |
Zinterstore | 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。 默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。 |
Zlexcount | 命令在计算有序集合中指定字典区间内成员数量。 |
Zrange | 返回有序集中,指定区间内的成员。 其中成员的位置按分数值递增(从小到大)来排序。 具有相同分数值的成员按字典序(lexicographical order )来排列。 如果你需要成员按值递减(从大到小)来排列,请使用 ZREVRANGE 命令。 下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。 你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推 |
Zrangebylex | 通过字典区间返回有序集合的成员。 |
Zrangebyscore | 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。 具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。 默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。 |
Zrank | 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。 |
Zrem | 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。 当 key 存在但不是有序集类型时,返回一个错误。 |
Zremrangebylex | 命令用于移除有序集合中给定的字典区间的所有成员。 |
Zremrangebyrank | 命令用于移除有序集中,指定排名(rank)区间内的所有成员 |
Zremrangebyscore | 命令用于移除有序集中,指定分数(score)区间内的所有成员。 |
Zrevrange | 命令返回有序集中,指定区间内的成员。 其中成员的位置按分数值递减(从大到小)来排列。 具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。 除了成员按分数值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样。 |
Zrevrangebyscore | 返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。 具有相同分数值的成员按字典序的逆序(reverse lexicographical order )排列。 除了成员按分数值递减的次序排列这一点外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE 命令一样。 |
Zrevrank | 命令返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。 排名以 0 为底,也就是说, 分数值最大的成员排名为 0 。 使用 ZRANK 命令可以获得成员按分数值递增(从小到大)排列的排名。 |
Zscore | 命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。 |
Zunionstore | 命令计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。 默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 。 |
Zscan | 命令用于迭代有序集合中的元素(包括元素成员和元素分值) |
redis中的事务
multi命令 和 exec命令
例如:
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name tom
QUEUED
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> set dob 1999-9-9
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK
例如:
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name tom
QUEUED
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> seta dob 1999-9-9
(error) ERR unknown command 'seta'
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> get dob
(nil)
例如:
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name tom
QUEUED
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> hget name age
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) (error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> get name
"tom"
127.0.0.1:6379> get age
"20"
Redis的事务中的错误分两种:
1.语法错误
这种情况需要区分Redis的版本,Redis 2.6.5之前的版本会忽略错误的命令,执行其他正确的命令,2.6.5之后的版本会忽略这个事务中的所有命令,都不执行
2.运行错误
运行错误表示命令在执行过程中出现错误,比如用hget命令获取string的值
这种错误在命令执行之前Redis是无法发现的,所以在事务里这样的命令会被Redis接受并执行。如果事务里有一条命令执行错误,其他命令依旧会执行