Redis常用API和持久化机制

Redis常用API和持久化机制

一、Redis常用API---参考命令:http://redisdoc.com/geo/index.html

Redis支持的数据类型比较广泛,例如:string(字符串)、list(链表)、set(集合)、hash(哈希类型和zset(sorted set --有序集合)

key
keys *
exists key 判断某个key是否存在
move key db 当前库就没有了,到指定的库中去了
expire key 为给定的key设置过期时间
ttl key 查看还有多少时间过期 -1表示永不过期 -2表示已过期
type key 查看key是什么类型

1.string
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
set key value 设置key value
get key 查看当前key的值
del key 删除key
append key value 如果key存在,则在指定的key末尾添加,如果key存在则类似set
strlen key 返回此key的长度
-------------------------------------------------------------------------
以下几个命令只有在key值为数字的时候才能正常操作
incr key 为执定key的值加一
decr key 为指定key的值减一
incrby key 数值 为指定key的值增加数值
decrby key 数值 为指定key的值减数值

getrange key 0(开始位置) -1(结束位置) 获取指定区间范围内的值,类似between......and的关系 (0 -1)表示全部
setrange key 1(开始位置,从哪里开始设置) 具体值 设置(替换)指定区间范围内的值
setex 键 秒值 真实值 设置带过期时间的key,动态设置。
setnx key value 只有在 key 不存在时设置 key 的值。
mset key1 value key2 value 同时设置一个或多个 key-value 对。
mget key1 key 2 获取所有(一个或多个)给定 key 的值。
msetnx key1 value key2 value 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
getset key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

2.list
它是一个字符串链表,left、right都可以插入添加; 如果键不存在,创建新的链表; 如果键已存在,新增内容; 如果值全移除,对应的键也就消失了。链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。 它的底层实际是个链表
lpush key value1 value2 将一个或多个值加入到列表头部
rpush key value1 value2 将一个或多个值加入到列表底部
lrange key start end 获取列表指定范围的元素 (0 -1)表示全部
lpop key 移出并获取列表第一个元素
rpop key 移出并获取列表最后一个元素
lindex key index 通过索引获取列表中的元素
llen 获取列表长度
lrem key 0(数量) 值,表示删除全部给定的值。零个就是全部值 从left往right删除指定数量个值等于指定值的元素,返回的值为实际删除的数量
ltrim key start(从哪里开始截) end(结束位置) 截取指定索引区间的元素,格式是ltrim list的key 起始索引 结束索引

3.set
Redis的Set是string类型的无序,不能重复的集合。
sadd key value1 value 2 向集合中添加一个或多个成员
smembers key 返回集合中所有成员
sismembers key member 判断member元素是否是集合key的成员
scard key 获取集合里面的元素个数
srem key value 删除集合中指定元素
srandmember key 数值 从set集合里面随机取出指定数值个元素 如果超过最大数量就全部取出,
spop key 随机移出并返回集合中某个元素
smove key1 key2 value(key1中某个值) 作用是将key1中执定的值移除 加入到key2集合中
sdiff key1 key2 在第一个set里面而不在后面任何一个set里面的项(差集)
sinter key1 key2 在第一个set和第二个set中都有的 (交集)
sunion key1 key2 两个集合所有元素(并集)

4.hash
Redis hash 是一个键值对集合。 Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
kv模式不变,但v是一个键值对
类似Java里面的Map
hset key (key value) 向hash表中添加一个元素
hget key key 向hash表中获取一个元素
hmset key key1 value1 key2 value2 key3 value3 向集合中添加一个或多个元素
hmget key key1 key2 key3 向集合中获取一个或多个元素
hgetall key 获取在hash列表中指定key的所有字段和值
hdel key key1 key2 删除一个或多个hash字段
hlen key 获取hash表中字段数量
hexits key key 查看hash表中,指定key(字段)是否存在
hkeys key 获取指定hash表中所有key(字段)
hvals key 获取指定hash表中所有value(值)
hincrdy key key1 数量(整数) 执定hash表中某个字段加 数量 ,和incr一个意思
hincrdyfloat key key1 数量(浮点数,小数) 执定hash表中某个字段加 数量 ,和incr一个意思
hsetnx key key1 value1 与hset作用一样,区别是不存在赋值,存在了无效。

5.zset
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数。 redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
zadd key score 值 score 值 向集合中添加一个或多个成员
zrange key 0 -1 表示所有 返回指定集合中所有value
zrange key 0 -1 withscores 返回指定集合中所有value和score
zrangebyscore key 开始score 结束score 返回指定score间的值
zrem key score某个对应值(value),可以是多个值 删除元素
zcard key 获取集合中元素个数
zcount key 开始score 结束score 获取分数区间内元素个数
zrank key vlaue 获取value在zset中的下标位置(根据score排序)
zscore key value 按照值获得对应的分数

二、Redis持久化机制(RDB、AOF)

2.1 Redis为什么需要进行文件的持久化?

Redis是基于内存运行的NoSQL数据库,一旦断电或者出现异常状况,如果不进行数据的持久化操作,内存中的数据将会丢失,无法恢复。

所以Redis在指定的时间间隔内,将内存当中的数据集快照写入磁盘,它恢复时是将快照文件直接读到内存。

2.2 Redis的持久化方式有哪些?

(1)RDB:内存写入磁盘,默认方式

(2)AOF:文件追加的形式  appendonly no 默认关闭:no  开启:yes 

2.3 Redis的持久化机制

RDB:(1)主进程Fork子进程  (2)子进程将数据写入临时文件夹 (3)持久化结束,临时文件夹替换原持久化文件,主进程不进行IO操作,保证高可用。
AOF:将Reids的操作日志以追加的方式写入文件,不记录读操作
持久化文件存放的位置:dir  ./(path)  ##path为文件存放目录,必须是一个目录,rdb、AOF都存放在改路径下

2.4 持久化触发的时机

RDB持久化文件触发机制
shutdown时,如果没有开启aof,会触发
配置文件中默认的快照配置
执行命令save或者bgsave save是只管保存,其他不管,全部阻塞;bgsave:redis会在后台异步进行快照操作,同时可以响应客户端的请求执行flushall命令 但是里面是空的,无意义
AOF持久化文件触发机制(依据配置项决定)
no:表示等操作系统进行数据缓存同步到磁盘(快,持久化没保证)
always:同步持久化,每次发生数据变更时,立即记录到磁盘(慢,安全)
everysec:表示每秒同步一次(默认值,很快,但可能会丢失一秒以内的数据)

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

BGSAVE命令执行之后立即返回OK,然后Redis fork出一个新子进程,原来的Redis进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
客户端可以通过LASTSAVE命令查看相关信息,判断BGSAVE命令是否执行成功。

执行一个AOF文件重写操作。重写会创建一个当前AOF文件的体积优化版本。
即使BGREWRITEAOF执行失败,也不会有任何数据丢失,因为旧的AOF文件在BGREWRITEAOF成功之前不会被修改。
重写操作只会在没有其他持久化工作在后台执行时被触发,也就是说:
如果 Redis 的子进程正在执行快照的保存工作,那么AOF重写的操作会被预定(scheduled),等到保存工作完成之后再执行AOF重写。
在这种情况下,BGREWRITEAOF的返回值仍然是OK,但还会加上一条额外的信息,说明BGREWRITEAOF要等到保存操作完成之后才能执行。
在Redis 2.6或以上的版本,可以使用INFO [section]命令查看 BGREWRITEAOF是否被预定。
如果已经有别的AOF文件重写在执行,那么BGREWRITEAOF返回一个错误,并且这个新的BGREWRITEAOF请求也不会被预定到下次执行。
从 Redis 2.4 开始, AOF重写由Redis自行触发,BGREWRITEAOF仅仅用于手动触发重写操作。

2.5.aof重写机制

当AOF文件增长到一定大小的时候Redis能够调用 bgrewriteaof对日志文件进行重写 。当AOF文件大小的增长率大于该配置项时自动开启重写(超过原大小的100%)。
auto-aof-rewrite-percentage 100

当AOF文件增长到一定大小的时候Redis能够调用 bgrewriteaof对日志文件进行重写 。当AOF文件大小大于该配置项时自动开启重写
auto-aof-rewrite-min-size 64mb

2.6.redis4.0后混合持久化机制

开启混合持久化:4.0版本的混合持久化默认关闭的,通过aof-use-rdb-preamble配置参数控制,yes则表示开启,no表示禁用,5.0之后默认开启。
混合持久化是通过bgrewriteaof完成的,不同的是当开启混合持久化时,fork出的子进程先将共享的内存副本全量的以RDB方式写入aof文件,然后在将重写缓冲区的增量命令以AOF方式写入到文件,写入完成后通知主进程更新统计信息,并将新的含有RDB格式和AOF格式的AOF文件替换旧的的AOF文件。简单的说:新的AOF文件前半段是RDB格式的全量数据后半段是AOF格式的增量数据。
优点:混合持久化结合了RDB持久化 和 AOF 持久化的优点, 由于绝大部分都是RDB格式,加载速度快,同时结合AOF,增量的数据以AOF方式保存了,数据更少的丢失。
缺点:兼容性差,一旦开启了混合持久化,在4.0之前版本都不识别该aof文件,同时由于前部分是RDB格式,阅读性较差

三、总结

3.1 RDB和AOF性能对比

rdb 适合大规模的数据恢复,对数据完整性和一致性不高 , 在一定间隔时间做一次备份,如果redis意外down机的话,就会丢失最后一次快照后的所有操作
aof 根据配置项而定官方建议 两种持久化机制同时开启,如果两个同时开启 优先使用aof持久化机制

3.2 性能建议(针对单机版性能提升)

因为RDB文件只用作后备用途,只要15分钟备份一次就够了,只保留save 900 1这条规则。
如果Enalbe AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。
代价一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。
只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。
默认超过原大小100%大小时重写可以改到适当的数值。

原文地址:https://www.cnblogs.com/vincentYw/p/12111227.html

时间: 2024-10-07 00:35:10

Redis常用API和持久化机制的相关文章

Redis系列之----Redis的两种持久化机制(RDB和AOF)

Redis的两种持久化机制(RDB和AOF) 什么是持久化 ???Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望Redis能够将数据从内存中以某种形式保存到磁盘中,使得重启的时候可以加载磁盘中的文件记录恢复数据,这一过程便是Redis的持久化. ???Redis支持两种持久化机制,一种是RDB,另一种是AOF.Redis默认情况下使用RDB方式进行持久化.两种持久化可以单独使用其中的一种,也可以二者结合使用,

《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制

能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis哨兵原理及持久化机制 在这个系列里,我会整理一些面试题与大家分享,帮助年后和我一样想要在金三银四准备跳槽的同学.我们一起巩固.突击面试官常问的一些面试题,加油!! <[面试突击]— Redis篇>--Redis数据类型?适用于哪些场景? <[面试突击]— Redis篇>--Redis的线程模型了解吗?为啥单线程效率还这么

redis高级命令4 持久化机制 、事务

redis的事务是支持很简单,基本没有啥用我们来看下面的列子 我们开启一个事务,在事务中执行了age 加1,set a4 ,还有对一个字符串进行加一,对字符串加1导致了事务失败,按道理incr age在事务操作中会失败,但是这里age的值已经加上了,所以redis的事务是不可靠的,当成了解 redis支持两种快照RDB内存快照和AOF日志文件 修改conf.f就可以进行持久化的配置 生成环境都不是呀快照模式,都是使用aof模式 订阅: 发布: 是redis数据可以持久化存储,即使服务重启之后,r

redis的两种持久化机制

---恢复内容开始--- RDB:在指定的时间间隔对redis中的数据进行快照存储,默认开启 AOF:记录每次操作redis的命令,将命令写入到AOF文件中,当重启redis时会重新执行这些命令来恢复数据,默认关闭. RDB方式: Redis会根据redis.conf配置文件定期将数据快照至一个RDB文件中: save [seconds] [changes]:意为每seconds秒内如果数据有changes次修改,那么就进行一次rdb快照存储.可配置多条save指令,让redis执行多级的快照保

细说Redis持久化机制

概述 Redis不仅能够作为缓存来使用,也能够作为内存数据库. Redis作为内存数据库使用时.必需要解决一个问题:数据的持久性.有些将Redis作为缓存使用的场景也需要将缓存的数据持久化到存储介质上,这样在Redis重新启动后仍然能对热点数据提供缓存服务.不会由于缓存数据的缺失而对整个系统造成冲击. 本文就Redis内置的持久化机制进行说明. Redis持久化方式 Redis内置的持久化方式有两种:快照方式和AOF方式. 快照方式是将某一时点的内存数据写到硬盘上.AOF方式是将写入的命令记录在

Redis教程(十):持久化详解

转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/137.html 一.Redis提供了哪些持久化机制: 1). RDB持久化:    该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘.        2). AOF持久化:    该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的.    3). 无持久化:    我们可以

Redis学习手册(持久化)

一.Redis提供了哪些持久化机制: 1). RDB持久化:该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘.2). AOF持久化:该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的.3). 无持久化:我们可以通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了.4). 同时应用AOF和RDB. 二.RDB机制的优势和劣势: RDB存在

Redis持久化机制

[RDB与AOF两种持久化模式的对比,实现原理] [RDB模式] fork一个进程,遍历hash table,利用copy on write,把整个db dump保存下来. save, shutdown, slave 命令会触发这个操作. 粒度比较大,如果save, shutdown, slave 之前crash了,则中间的操作没办法恢复. [AOF模式] 把写操作指令,持续的写到一个类似日志文件里.(类似于从postgresql等数据库导出sql一样,只记录写操作) 粒度较小,crash之后,

Redis 的持久化机制

Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制. Redis 的持久化机制有两种,第一种是快照,第二种是 AOF 日志.快照是一次全量备份,AOF 日志是连续的增量备份.快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本.AOF 日志在长期的运行过程中会变的无比庞大,数据库重启时需要加载 AOF 日志进行指令重放,这个时间就会