本文主要介绍了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:将相应二进制的偏移位设置为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:如果哈希表中的相应字段是一个数字,则在哈希表关键字的字段字段值中添加一个增量。如果该键不存在,将创建一个新的哈希表,并执行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:将消息发送到指定通道。返回值是收到消息的订阅者的数量
退订频道:
unpsubscirbe[频道[频道.]]:指示客户端取消订阅给定的频道。
模式[模式.]]]:指示客户端取消订阅所有给定的模式。
【以上两者的区别在于模式可以匹配模式】
频道查询:
punsubscirbenumpat:客户端订阅的所有模式的总和。
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数据库程序设计有所帮助。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。