redis操作日志,redis实战教程,redis操作学习记录

redis操作日志,redis实战教程,redis操作学习记录

本文主要介绍了redis的操作,记录和总结了Redis客户端、服务器、字符串、哈希、列表、发布/订阅、事务等相关概念、原理和操作技巧。有需要的可以参考一下。

本文用实例总结了redis运算。分享给你,供你参考,如下:

相关内容:

虽然有参考文献,背多了也是脑残,但是学习的时候,还是想有一个系统划分知识点的文献。即使不需要我去仔细背,划分知识块后,脑子里的印象也会更清晰,所以才有了这篇博文。

主要是将各种命令划分为不同的功能归属。

redis简介:

客户端连接操作

服务器的操作

字符串操作

哈希运算

列表操作

集合运算

排序集合操作

操作键

发布订阅

事务

参考:w3school

开始时间:2018-03-10 15:36

Redis的介绍:

Redis是非关系数据库,是高性能的键-值数据库,集合值也以键-值对的形式存在。

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启时可以再次加载使用。

Redis不仅支持简单的键值数据,还提供了list、set、zset、hash等数据结构的存储。

Redis也支持数据备份。

Redis的所有操作都是原子的。

Redis支持五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)和zset(排序

集合:有序集合)。

客户端连接操作:

启动redis客户端连接:

redis-cli [-h host] [-p port] [-a password ]

主机是服务器IP

端口是服务器端口

密码是连接密码。

端口默认为6379。

断开连接: quit

客户端连接测试:

auth

:如果设置了密码,但是-连接时没有使用密码,那么连接完成后可以使用auth password解锁,解锁后才能使用其他Redis命令。

echo message

:打印特定消息,并在测试时使用。

ping [message]:

使用客户端向Redis服务器发送PING,如果服务器工作正常,将返回一个PONG。通常用于测试与服务器的连接是否仍然有效,或者测量延迟值。如果设置了message,则返回值为message。

切换数据库

select index

:切换到指定的数据库。数据库索引号index由一个数值指定,0作为起始索引值。使用默认的数据库编号0。从标识可以看出当前是哪个数据库。

服务端操作:

数据持久化:

snapshot快照持久化:保存的是所有数据,默认情况下,自动执行快照持久化,保存文件为.rbd

如何打开快照录制功能:

默认情况下打开

如何使用:

使用save:SAVE命令执行同步保存操作,将当前Redis实例的所有数据快照以RDB文件的形式保存到硬盘上。一般来说,生产环境中很少执行保存操作,因为它会阻塞所有客户端,保存数据库的任务通常由BGSAVE命令异步执行。但是,如果负责保存数据的后台子流程不幸出现问题,保存可以作为保存数据的最后手段。

使用bgsave:与save不同,它将在后台备份,不会阻止所有当前客户端。

如何恢复数据:会有一个?rbd文件(config get dbfilename可以看出是哪个文件)保存的时候。当需要恢复时,关闭redis服务,复制。rbd重新覆盖它,并重新启动redis服务。

AOF日志记录型持久化:保存的是操作日志

如何开启aof录制功能:配置设置appendonly“是”

使用方法:当aof功能开启时,执行的命令会被自动记录下来。

如何恢复:与rdb恢复数据的方式相同,将有一个。aof文件(config get appendfilename可以判断是哪个文件;如果没有,查看配置文件)。保存后,将此文件复制到外部副本。需要恢复时,关闭redis服务,复制。请返回并覆盖它,然后重新启动redis服务。

如果rdb文件和aof文件都存在,最好使用“AOF”来恢复数据[应谨慎使用,可能会因此出现“库删除”

当rdb和AOF恢复时,RDB恢复得很快。

客户端管理:

CLIENT:CLIENT KILL ip:port[用IP:port地址关闭客户端。】

set CLIENT name:CLIENT set name connection-name[为当前连接指定一个名称。】

get CLIENT name:CLIENT GETNAME[返回由CLIENT SETNAME命令为连接设置的名称。默认情况下,创建的连接没有名称]

获取客户端连接信息:CLIENT LIST[返回连接到服务器的所有客户端的信息和统计信息。】

服务端配置管理:

获取配置:config getconfig _ setting _ name[config _ setting _ name是配置项目名称]

设置新配置:config set config _ setting _ name new _ config _ value[new _ config _ value是新的配置值]

数据管理:

清除所有数据:刷新全部

清除当前数据库中的所有键:flushdb。

其他:

get time:time[返回当前服务器时间。第一个字符串是当前时间(以UNIX时间戳格式表示),而第二个字符串是当前一秒钟内经过的微秒数。】

String操作:

String的意思是字符串,在redis中的意思是“将变量的值设置为字符串”

设置string:

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

XX]

:设置键-值对,键是否存在,存在则覆盖。

Key:是设置的键名。

Value:对应键的值,默认为字符串,带或不带双引号。

例如:将密钥的到期时间设置为秒。

Px:不同于ex,代表故障多少毫秒。

Nx:仅在key不存在时设置key【使用setnx设置值时,默认有nx】

Xx:仅当密钥已经存在时才设置密钥。

setnx key value :

仅当键不存在时设置键-值对

setex key seconds value:

将键值对的过期时间设置为秒秒。

setbit key offset value:

将对应二进制的偏移位设置为值[每个字符占用8位,从高位到低位为0-7]

setrange key offset value :

用value参数覆盖给定键存储的字符串值,从offset offset开始。

mset key value [key value ...]:

同时设置一个或多个键值对。

msetnx key value [key value ...]:

当所有键都不存在时,同时设置一个或多个键值对。只要给定的键已经存在,所有的设置操作都将被取消(原子性)。

append key value:

如果关键字已经存在并且是一个字符串,append命令将值追加到关键字原始值的末尾。如果键不存在,append只是将给定的键设置为value,就像执行SET key value一样。如果密钥不是字符串,将会报告错误。

获取string:

get key :

获取相应键的键值

mget key [key ...]:

获取多个键的值

getrange key start end

:返回key中字符串值的子串,字符串的截取范围为[start,end]

getset key newvalue:

返回key的值并将key的值设置为newvalue。

getbit key offset:

获取字符串表示的二进制位的偏移值。

strlen key :

获取对应的密钥字符串的长度

bitcount key [start end]:

对应于相应字符串的二进制数1。

其他操作:

decr key:

当字符串为数字时,将键中存储的数值减一,其余部分报错。如果该键不存在,则首先将该键的值初始化为0,然后执行decr操作。

decrby key decrement:

与decr键的不同之处在于减少量被指定为减量。如果该键不存在,则在执行decrby操作之前,该键的值将被初始化为0。

incr key

:当字符串是一个数字时,将存储在键中的数字值增加1,当其余的时候报告一个错误。如果该项不存在,在执行incr操作之前,该项的值将被初始化为0。

incrby key increment

:当字符串为数字时,将增量increment加到key存储的值上。如果该项不存在,该项的值将首先初始化为0,然后执行incrby命令。

incrbyfloat key increment:

与incrby键增量不同,增量值是一个浮点数。

bitop operation destkey key [key ...]:

对一个或多个包含二进制位、十六进制字符串或普通字符串密钥的字符串执行位操作,并将结果保存到destkey。

运算可以是与、或、非、异或(异或)

当bitop处理不同长度的字符串时,较短字符串的缺失部分将被视为0。空键也被视为包含0的字符串序列。

补充:

m前缀的操作是原子性的,当只有一个失败时会报告一个错误。例如,mset设置多个值,如果一个设置失败,将报告错误,所有设置都将失败。

而且redis有数据类型,操作会检测数据类型,除了一些操作可以“覆盖”原变量,忽略原变量类型,其他操作遇到不符合的类型都会报错。

Hash操作:

redis中的Hash相当于key只是一个索引值,指向一个值是字段-值区域的哈希表。

设置hash:

hset key field value:

将哈希表键中字段field的值设置为value。如果该键不存在,则创建一个新的哈希表并执行hset操作。如果域字段已经存在于哈希表中,旧值将被覆盖。

hsetnx key field value:

当且仅当字段field不存在时,将哈希表键中的字段field的值设置为value。

hmset key field value [field value ...]:

同时将多个字段值对设置到散列表键中。

获取hash:

hget key field:

获取哈希表中字段的值,只返回value值

hgetall key:

获取哈希表中所有字段的值。在返回值中,奇数作为字段,偶数作为值。

hmget key field [field…]:

返回哈希表键中一个或多个给定字段的值,只返回value值。

hvals key:

获取哈希表中所有字段的值,并且只返回值

hkeys key:

获取哈希表中的所有字段,只返回字段。

hscan key cursor [MATCH pattern] [COUNT count]:

用于增量迭代哈希。

游标是迭代的开始索引,第一次为0,迭代中第一行的返回值是下一次迭代的索引。如果为0,则迭代结束。

Match pattenrn是模式匹配字段,不是值或键!

Count计算这次迭代的次数。

hlen key:

返回哈希表关键字中域的数量。

hexists key field:

检查哈希表关键字中是否存在给定的域字段。

其他操作:

hdel key field [field ...]:

删除哈希表键中的一个或多个指定域,不存在的域将被忽略。

hincrby key field increment:

如果哈希表中的相应字段是一个数字,则在哈希表关键字中的字段field的值上增加一个增量。如果该键不存在,将创建一个新的哈希表,并执行HINCRBY命令。如果字段field不存在,则在执行命令之前,该字段的值被初始化为0。[注意,增量可以是负数,所以没有hdecr]

hincrbyfloat key field increment:

如果哈希表中对应的字段是一个数字,则在哈希表关键字的字段值中添加浮点增量increment。如果该键不存在,将创建一个新的哈希表,并执行HINCRBY命令。如果字段field不存在,则在执行命令之前,该字段的值被初始化为0。[注意,值和增量可以是指数符号,如5.0e3]

List操作:

代表key的值是一个包含多个元素的列表。

在列表中,左边是头,右边是尾。

设置list:

lpush key value [value ...] :

在列表键的标题中插入一个或多个值。当插入多个值时,后面插入的值在头中,这意味着值是从左向右按的,最后一个值作为头。

rpush key value [value ...] :

在列表键的页脚(最右边)插入一个或多个值。当插入多个值时,最后一个值用作页脚。

rpushx key value :

当且仅当键存在并且是列表时,将值插入列表键的页脚,否则不做任何操作。

lrange key start stop :

返回列表键中指定区间[开始,停止](这是一个[闭合区间])中的元素。最后一个元素可以用-1来表示。

lset key index value :

将列表键下标为index的元素的值设置为value。当index参数超出范围,或者空列表(键不存在)是LSET时,将返回错误。

linsert key before|after pivot value :

将值插入列表键,在值pivot之前或之后(注意pivot是一个值)。当列表键中不存在pivot时,不执行任何操作。当该键不存在时,该键被视为空列表,并且不执行任何操作。如果键不是列表类型,则返回错误。

获取list:

lpop key :

移除并返回列表键的标题元素

rpop key :

移除并返回列表键的尾部元素。

blpop :

是LPOP命令的封锁版本。当给定列表中没有要弹出的元素时,BLPOP命令将阻塞连接,直到等待超时或找到可以弹出的元素(可以使用另一个客户端添加元素)。当给定多个key参数时,按照参数key的顺序检查每个列表,弹出第一个非空的列表头元素。

brpop :

是RPOP命令的阻止版本。当给定列表中没有可弹出的元素时,连接将被BRPOP命令阻塞,直到等待超时或找到可弹出的元素(可以使用另一个客户端添加元素)。当给定多个key参数时,按照参数key的顺序检查每个列表,弹出第一个非空列表的尾部元素。

rpoplpush source destination :

取出source的尾部元素,放入destination的头部。

lindex key index :

返回列表键中带有索引的元素。如果键不是列表类型,则返回错误。

llen key :

返回列表键的长度。如果该键不存在,则该键被解释为空列表,并返回0。如果键不是列表类型,则返回错误。

其他操作:

ltrim key start stop :

修剪一个列表,也就是说在列表中只保留指定区间(闭区间)的元素,不在指定区间的元素全部删除。

补充:

m前缀的操作是原子性的,当只有一个失败时会报告一个错误。例如,mset设置多个值,如果一个设置失败,将报告错误,所有设置都将失败。

而且redis有数据类型,操作会检测数据类型,除了一些操作可以“覆盖”原变量,忽略原变量类型,其他操作遇到不符合的类型都会报错。

Set操作:

代表key的值是一个集合,集合中的元素不能重复。

设置set:

sadd key member [member ...] :

向集合键添加一个或多个成员元素,集合中已经存在的成员元素将被忽略。如果键不存在,则创建一个仅包含成员元素作为成员的集合。当键不是集合类型时,将返回错误。

获取set:

scard key

:返回集合中元素的个数。

spop key

:移除并返回集合中的随机元素。

smembers key

:返回集合键中的所有成员。不存在的键被视为空集。

srandmember key [count]

:如果执行命令时只提供了key参数,则返回集合中的count个随机元素。

如果count为正数且小于集合的基数,该命令将返回包含count个元素的数组,即数组中的元素

不同的元素。如果count大于或等于集合的基数,则返回整个集合。

如果count为负,则该命令返回一个数组,数组中的元素可能重复出现,并且数组的长度

是count的绝对值。

其他操作:

sscan key cursor [MATCH pattern] [COUNT count]

:用于增量迭代设置。

游标是迭代的开始索引,第一次为0。迭代中第一行的返回值是下一次迭代的索引。如果为0,则迭代结束。

匹配模式是匹配集合中元素的模式。

Count计算这次迭代的次数。

smove source destination member

:将成员元素从源集合移动到目标集合。如果源集合不存在或不包含指定的成员元素,则SMOVE命令不执行任何操作,只会返回0。否则,成员元素将从源集合中移除,并添加到目标集合中。

sdiff key [key ...]:

返回给定集合之间的差集。

sdiffstore destination key [key ...]:

返回给定集合之间的差集,并将其存储在目标中。如果目标集合已经存在,它将被覆盖。目的地可以是钥匙本身。

sinter key [key ...]:

返回所有给定集合的交集

sinter destination key [key ...]:

返回给定集合之间的交集,并将其存储在目标中。如果目标集合已经存在,它将被覆盖。目的地可以是钥匙本身。

sismember key member:

判断成员元素是否是集合键的成员。

srem key member [member ...]:

从set键中删除一个或多个成员元素,不存在的成员元素将被忽略。当键不是集合类型时,将返回错误。

sunion key [key…] :

返回所有给定集合的并集。不存在的键被视为空集。

sunionstore destination key [key…]

:返回所有给定集合的并集。不存在的键被视为空集,返回的结果保存到目标集。如果目标已经存在,它将被覆盖。目的地可以是钥匙本身。

补充:

Redis有数据类型。操作将检测数据类型,除了一些可以“覆盖”原始变量并忽略原始变量类型的操作。如果遇到不一致的类型,其他操作将报告错误。

Sort Set操作:

排序集代表一个有序集,分数决定元素的顺序。一般都是小分在先。

设置sort set:

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

:将一个或多个成员元素及其分数值添加到有序集键中。

Scrore是元素的权重,决定了元素的顺序。

Nx:成员只有在不存在的情况下才添加,已经存在的情况下不会被操作。

Xx:仅当成员已经存在时,才添加该成员。

Ch:修改后的返回值是修改后的成员总数,原始值是新增加的成员总数。

incr:ZADD指定该选项时,成员的操作相当于zincrby命令,可以增加现有成员的分数。

获取sort set:

zrange key start stop [WITHSCORES]

:返回有序集键中指定间隔内的成员。成员位置按分值递增排序(从小到大)。

Withscores表示是否同时返回分数。

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

返回有序集键中所有得分值介于最小值和最大值之间的成员(包括等于最小值或最大值的成员)。有序集成员按分值递增的顺序排列(从小到大)。

zrevrange key start stop [WITHSCORES]:

返回有序集键中指定间隔内的成员。

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]:

返回有序集键中所有得分值介于最大值和最小值之间的成员(默认包括最大值或最小值)。有序集成员按分值降序排列(从最大到最小)。

zrank key member

:返回成员在有序集关键字中的排名。

zcard key:

返回有序集合中的元素个数。

zscore key member

:返回有序集合键中成员的分数值。如果成员元素不是有序集键的成员,或者键不存在,则返回nil。

zrevrank key member

:返回成员在有序集关键字中的排名。其中有序集合的成员按递减的分值排序(从最大到最小)。排名以0为基础,即得分最高的成员排名为0。

zcount key min max

:返回有序集合键中得分值在[min,max]之间的成员数。

其他操作:

zrem key member [member ...]:

从有序集合键中删除一个或多个成员,不存在的成员将被忽略。当键存在但不属于有序集类型时,将返回一个错误。

zincrby key increment member:

是有序集合键成员的分数值加上增量。您可以通过传递负值增量(如ZINCRBY key ‐5 member)从得分中减去相应的值,即从成员的得分值中减去5。当键不存在或者成员不是键的成员时,ZINCRBY键增量成员等效于ZADD键增量成员。当键不是有序集类型时,将返回一个错误。分数值可以是整数值或双精度浮点数。

ZREMRANGEBYRANK key start stop:

删除有序集键中的所有成员,并指定等级间隔。间隔分别由以下参数start和stop表示,包括start和stop。下标start和stop参数都基于0,即0表示有序集的第一个成员,1表示有序集的第二个成员,依此类推。还可以使用负下标,1表示最后一个成员,2表示倒数第二个成员,依此类推。

ZREMRANGEBYSCORE key min max:

删除有序集合键中所有得分值介于最小值和最大值之间的成员(包括等于最小值或最大值的成员)。

zunionstore destination numkeys key [key ...] [weights weight [weight ...]][AGGREGATE SUM|MIN|MAX]:

计算一个或多个给定有序集的并集,其中给定键的数量必须用numkeys参数指定,并将并集(结果集)存储到目标。默认情况下,结果集中某个成员的分数值是该成员在所有给定集中的分数值之和。

zinterstore destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]:

计算给定有序集的交集,其中给定键的数量必须用numkeys参数指定,并将交集(结果集)存储到目的地。默认情况下,结果集中某个成员的分数值是该成员在所有给定集中的分数值之和。

zscan key cursor [MATCH pattern] [COUNT count]:

游标是迭代的开始索引,第一次为0。迭代中第一行的返回值是下一次迭代的索引。如果为0,则迭代结束。

Match pattenrn是匹配排序集中元素的模式。

Count计算这次迭代的次数。

key操作:

查询键:

exists key:

检查密钥是否存在

type key

:检测关键字对应的值的类型

keys pattern:

查找与给定模式模式匹配的所有键。例如,keys *代表获取所有密钥。

ttl key:

返回给定密钥的剩余寿命,以秒为单位。

PTTL key:

以毫秒为单位返回密钥的剩余生存期。

RANDOMKEY:

从当前数据库中随机返回(而不是删除)一个密钥。

删除键:

del key

:密钥存在时将其删除

键的排序:

排序关键字[按模式][限制偏移量][获取模式[获取模式.]][desc]

[ALPHA] [STORE destination]:返回或保存给定列表、集合和有序集合键中已排序的元素。默认情况下,排序以数字为对象,将值解释为双精度浮点数,然后进行比较。

键的设置:

EXPIRE key seconds:

设置给定密钥的生存期。当密钥过期时(生存期为0),它将被自动删除。

EXPIREAT key timestamp:

EXPIREAT和EXPIRE有类似的功能,都是用来设置密钥的存活时间。不同之处在于,EXPIREAT命令接受的时间参数是unix时间戳。

PEXPIREAT key milliseconds-timestamp:

它以毫秒为单位设置密钥的过期unix时间戳。

RENAME key newkey:

将密钥重命名为newkey。当key和newkey相同,或者key不存在时,将返回错误。当新键已经存在时,RENAME命令将覆盖旧值。

RENAMENX key newkey:

当且仅当新关键字不存在时,将关键字重命名为新关键字。如果该项不存在,将返回一个错误。

DUMP key:

序列化给定的键并返回序列化值,可以使用restore命令将序列化值反序列化为Redis键。序列化值具有以下特征:它具有64位校验和,用于检测错误。还原将在反序列化之前检查校验和。该值的编码格式与RDB文件一致。RDB版本将被编码为序列化值。如果RDB格式由于Redis的不同版本而不兼容,Redis将拒绝反序列化该值。的序列化值不包含任何生存时间信息。

restore key ttl serialized-value [REPLACE]:

反序列化给定的序列化值,并将其与给定的键相关联。ttl参数以毫秒为单位设置密钥的生存期;如果ttl为0,则不设置生存期。在执行反序列化之前,RESTORE将检查序列化值的RDB版本和数据校验和。如果RDB版本不同或数据不完整,RESTORE将拒绝反序列化并返回错误。如果key key已经存在,并且给定了REPLACE选项,则key key的原始值被反序列化获得的值替换;相反,如果key key已经存在,但是没有给出REPLACE选项,那么该命令将返回一个错误。

PERSIST key:

删除给定密钥的生存期

键的移动:

migrate host port key destination-db timeout [COPY] [REPLACE]:

自动将密钥从当前实例传输到目标实例的指定数据库。一旦转移成功,该键保证出现在目标实例上,而当前实例上的键将被删除。这个命令是一个原子操作。当它被执行时,它将阻塞两个迁移实例,直到出现以下任何结果:成功迁移、失败迁移和超时。

move key db:

将当前数据库的键移动到给定的数据库db。如果当前数据库(源数据库)和给定数据库(目标数据库)具有相同名称的给定键,或者该键在当前数据库中不存在,则MOVE不起作用。

发布/订阅:

订阅可以使多个客户端等待相同的信息,发布可以使服务器向多个特定的客户端发送信息。

就像收音机一样,只要把收音机调到指定的频道,就可以收听电台的信息。

无线电台可以向所有收听它的收音机发送信息。

新用户不会听到之前的消息。

订阅频道:

psubscirbe pattern [pattern ...]:

客户端订阅一个或多个符合给定模式的频道。

subscirbe

频道[频道.]]:订阅一个或多个给定频道的信息。

【以上两者的区别在于模式可以匹配模式】

发送消息:

publish channel message:

将消息发送到指定通道。返回值是收到消息的订阅者的数量

退订频道:

un

psubscirbe

[频道[频道.]]:指示客户端取消订阅给定的频道。

模式[模式.]]]:指示客户端取消订阅所有给定的模式。

【以上两者的区别在于模式可以匹配模式】

频道查询:

punsubscirbe

numpat:客户端订阅的所有模式的总和。

pubsub

列出当前活动的频道。活动通道是指至少有一个订户的通道,处于订阅模式的客户端不计算在内。

pubsub channels [pattern]:

数字子频道[频道1.channel-n]:返回给定频道的订阅者数量,不包括订阅模式下的客户端。

事务

开启事务:

pubsub

:标记事务块的开始。一个事务块中的许多命令将按顺序放入一个队列,最后由exec命令自动执行。

监控:

multi

监控一个(或多个)键。如果在事务执行exec之前,这个(或这些)键被其他命令更改,事务将被中断。

watch key [key …]:

:取消WATCH命令对所有按键的监控。

执行事务块:

unwatch

:在所有事务块中执行命令。

取消事务:

exec

:取消事务,放弃执行事务块中的所有命令。同时会取消watch对所有按键的监控。

欲了解更多信息,请参阅官方文件:https://redis.io/commands.中文文件:http://www.redis.cn/documentation.html.

希望本文所述对大家Redis数据库程序设计有所帮助。

redis操作日志,redis实战教程,redis操作学习记录