亚洲必赢手机入口redis持久化学工业机械制

by admin on 2020年1月3日

安装与行使

切实选取:

  • 服务端运营:将指令 redis-server.exe
    redis.windows.conf 写入 .bat 文件,直接运行 StartWithConf.bat 运营服务端;
  • 客商端运维:间接运转 redis-cli.exe 就能够;

    redis.windows.conf:配置文件
    redis-benchmark.exe:Redis读写质量测量试验工具
    redis-check-aof.exe:aof修复检查日志
    redis-check-dump.exe:dump检查数据库文件
    redis-cli.exe:Redis顾客端程序
    redis-server.exe:Redis服务器程序
    StartWithConf.bat:启动Redis

 

铺排文件

redis.windows.conf

Redis服务端的运作参数全体靠配置文件贯彻,此处详细介绍Redis配置文件的多少个第生龙活虎参数:

network

  • bind 127.0.0.1:绑定地址(外网连接:0.0.0.0)  
  • port 6379:暗中同意绑定本机的6379端口;
  • timeout:连接超时时间(秒)
  • requirepass pass:配置redis连接认证密码

general

  • loglevel
    debug/notice/warning/verbose:日志等第(开荒测量检验/坐褥条件/只记录警示错误音讯/详细音讯)
  • logfile
    ./Logs/redis_log.txt:日志文件保留路线
  • databases 16:数据库数量,暗中认可0

snapshotting

  • save TimeInterval ChangeCnt

append only mode

  • appendonly yes:开启命令日志形式;

limits

  • maxclients 64:最菲尼克斯接数,0为不节制
  • maxmemory <bytes>:内部存款和储蓄器清理临界角
  • maxmemory-policy
    volatile-lru:内部存储器清理选拔的暗许计谋,对安装过期时间的key实行LRU算法删除

风流倜傥、Redis提供了如何长久化学工业机械制:

劳动命令

ping:启动服务连接情况
info:查看server/client配置信息
info commandstats + config resetstat:显示/清除名次调用统计信息
config get/set:获取/设置配信息
flushdb/flushall:删除当前所选/所有数据库中的所有key
save/bgsave:数据保存到硬盘/异步保存
lastsave: 上次成功保存到磁盘的unix时间戳
dbsize:查看所有key的数目 
get/set和mget/mset:获取/设置键
incr/decr和incrby/decrby:自增/自减
exists/type key:键key是否存在/键类型
expire key secondTime:设置键的过期时间
rename oldKey newKey:重命名
ttl key:键key的剩余存活时间
select db_index:选择数据库
move key db_index:将键key移动到指定数据库

  redis的高品质是因为其独具数据都留存了内部存储器中
,为了使redis在重启之后数据仍旧不放任,必要将数据同步到硬盘中,那风姿浪漫进度正是长久化。

基本概念

Redis是数风华正茂数二的NoSQL数据库服务器,其License是Apache
License、完全无需付费。首先看下内部存款和储蓄器数据库的基本概念:

内部存款和储蓄器数据库

In-Memory DataBase,以内存为尤为重要存款和储蓄媒介物的数目库.

  • 享有的表及索引在内部存款和储蓄器中、消灭I/O瓶颈,为访谈内部存款和储蓄器设计最棒访问方法和目录情势,读写速度快、质量好;
  • 内部存储器数据库的容积大小受物理内部存款和储蓄器的约束;
  • 安全性难题是硬伤,协助依据政策与磁盘数据库进行数据同步,以致数据库的可信性苏醒机制;

Redis

REmote DIctionary Server(远程词典服务),远程内部存款和储蓄器数据库(Memory Database + Data Structure
Server),开源的施用ANSI-C语言编写、帮助网络、可依附内部存款和储蓄器亦可长久化的日志型、高质量的key-value数据库,Redis不约定义且不利用表,适应高并发、海量数据存储场景。

  • A persistent key-value database with built-in net interface
    written in ANSI-C for Posix systems.
  • Redis is an open source, BSD licensed, advanced key-value cache
    and store.

下边是Redis协理的5种类型数据布局的此中图解(图黄金年代):

亚洲必赢手机入口 1

redisObject对象是Redis内部的宗旨目的,用于表示全数的key和value。

typedef struct redisObject {
    unsigned type:4;  // 数据类型
    unsigned encoding:4;  // 编码方式
    unsigned lru:REDIS_LRU_BITS;   /* lru time (relative to server.lruclock) */
    int refcount;   // 对象的引用计数
    void *ptr;   // 指向真正的存储结构
} robj;

其中,REDIS_LRU_BITS表示当内部存款和储蓄器超过限度时接收LRU算法排除内部存款和储蓄器中的靶子。redisObject对象的创造在object.c文件中:

robj *createObject(int type, void *ptr) {
    robj *o = zmalloc(sizeof(*o));
    o->type = type;
    o->encoding = OBJ_ENCODING_RAW;
    o->ptr = ptr;
    o->refcount = 1;

    /* Set the LRU to the current lruclock (minutes resolution). */
    o->lru = LRU_CLOCK();
    return o;
}    

Redis的键类型为string,值类型扶助:

  •  字符串:string
  •  列表:亚洲必赢手机入口,list
  •  集合:set
  •  有序集合:zset (SortedSet)
  •  散列:hash

切实内部存款和储蓄器布局暗示图(图二):

亚洲必赢手机入口 2

参考:Redis数据库入门教程; Redis学习笔记

特点

  • 全套数目In-Momory,作为Memcached的代替者;
  • key-value存款和储蓄系统(Key:数据检索的当世无双标志、Value:数据存款和储蓄的尤为重要对象),扶持各个类型的value(数据布局服务器);
  • redis的起源是cache,缓存,高速缓存;
  • 数据存款和储蓄于内部存款和储蓄器中或被安排为运用虚构内部存款和储蓄器;
  • 持久化天性(Persistence):能够持久化到磁盘(周期性把立异数据写入磁盘或把改革操作追加写入记录文件);
  • 主从复制性情(Master/Slave
    Replication):负载均衡,扩张读品质;
  • 顾客端分片(Client-Side
    Sharding):数据划分为多少个部分,扩大写品质,线性级其他习性升高;
  • 支撑各个分化情势的排序;
  • 支撑轻易的事情(仅完毕三遍性实行多条命令的功能,不协助回滚);
  • 支撑设置数据过期时间;

内部存款和储蓄器优化

  • string和数字:Redis内部维护一个数字池,能够节省存款和储蓄空间,默许 REDIS_SHARED_INTEGERS = 10000 
  • 复杂类型的存款和储蓄优化:Redis内部使用紧密格式存款和储蓄数据(符合集结包罗的Entry十分的少而且每一个Entry包蕴的Value不是很短的情形),遍历复杂度下跌为O(nState of Qatar、但节省存储空间。以ZIPMap的数据构造为例:

  亚洲必赢手机入口 3

 
此中,字段free用于冗余空间,空间换时间、一定景况下防止插入操作引起的扩大体量操作。

  • list、set、hash接受独特编码,优化存款和储蓄空间;
  • byte、bit级其他操作:getrange/setrange、getbit/setbit以至bitmap高效存款和储蓄;

Redis .vs.
Memcached

  • 双方均是高品质键值缓存服务器,Memcached只提供数据缓存服务,Redis提供数据缓存和悠久化;
  • Memcached:八线程服务器;Redis:单线程服务器,部分品质通过二十四线程实现;
  • Memcached只支持日常字符串键;Redis提供丰盛的数量存款和储蓄布局,同期扶植主数据库(Primary
    Database)+ 扶持数据库(Auxiliary Database)使用;
  • Memcached:预分配内部存款和储蓄器池形式,Redis:现场申请内部存款和储蓄器的章程存款和储蓄数据、且能够安顿设想内部存款和储蓄器

  redis扶植两种办法的持久化,意气风发种是PRADODB,另大器晚成种是AOF。可以独立接纳当中后生可畏种或然结合使用。

数据类型

string

亚洲必赢手机入口 4

list

双向链表、允许再次,协理lpush/rpush和lpop/rpop;完成信息队列等;

亚洲必赢手机入口 5

set

不容许再度,内部是哈希表完成、查找/删除/插入均O(1卡塔尔国; 集合提供SINTE本田CR-V、SUNION、SDIFF分别援救交集、并集、差集操作。

亚洲必赢手机入口 6

hash

键值对(父键+子键:值)。存款和储蓄键key的多个属性数据,完全能够用Json格式存款和储蓄、直接作为string类型操作,但对性能有影响,所以Redis提出Hash类型。

亚洲必赢手机入口 7 

正如,图一是经常的key/value构造,供给封装叁个对象保存value的音讯;图二是Redis的Hash类型:

亚洲必赢手机入口 8

zset

不改变键值对(父键+成员:分值),键值对实乃成员和分值(Member-Score)的炫目关系(字符串成员member与浮点数分值score之间的静止映射,按分值大小排序),分值必需为浮点数; 不只能够依照成员访谈元素(同散列),又能够借助分值按序访问成分布局。

亚洲必赢手机入口 9

1). RDB持久化:(Redis asynchronously dumps the dataset )
  该机制是指在钦定的时间间距内将内部存款和储蓄器中的数量集快速照相写入磁盘。
2). AOF持久化:( Append Only File)
  该机制将以日记的款式记录服务器所拍卖的每二个写操作,在Redis服务器运营之初会读取该公文来重新创设数据库,以有限扶助运行后数据库中的数据是完好的。
3卡塔尔. 无悠久化:
  我们得以经过配备的秘技禁止使用Redis服务器的长久化功用,那样我们就足以将Redis视为三个功能加强版的memcached了。
4卡塔尔. 同时采取AOF和TiguanDB。

持久化

内部存款和储蓄器提供主存款和储蓄帮助、硬盘作漫长性存款和储蓄。默许开启安德拉DB形式,暗中同意优先加载AOF文件。三遍性将数据加载到内存中,叁次性预热。

问题:当服务器被关闭时,服务器内部存款和储蓄器存款和储蓄的数额将何去何从?

RDB .vs. AOF

  • CR-VDB方式二进制方式存款和储蓄数据,文件非常的小且格式紧凑(讴歌ZDXDB文件的积累格式和Redis数据在内部存储器中的编码格式意气风发致)、加载速度快;AOF情势文本文件扩充写操作命令,文件极大、音讯冗余,加载速度慢,但rewrite命令会压缩aof文件;
  • 凯雷德DB情势按安插的save攻略完成按时批量数码存款和储蓄、功效相对较高;AOF格局准实时日志记录、功能相对非常的低;
  • 比较君越DB情势,AOF形式可信性较高、最少的数额遗失和较高的数据苏醒技艺;

不重启Redis从OdysseyDB方式切换成AOF形式

redis-cli> config set appendonly yes:启用AOF
redis-cli> config set save "":关闭RDB

参考:Redis数据悠久化; Redis小编:深度分析Redis长久化

  优先装载AOF(数据更全,有更加好的长久化有限帮忙吗,HavalDB有也许有失黄金年代部分数额卡塔尔国

RDB

半长久化形式(快速照相格局:File-Snap-Shotting,即时间点转储:Point-in-Time Dump),Redis
DataBase
,将数据先存款和储蓄在内部存款和储蓄器,当直接调用save/bgsave命令时或数额改良满意设置的save条件时触发bgsave操作,将内部存款和储蓄器数据叁遍性写入TiguanDB文件。比较切合灾祸复苏(Disaster
Recovery),若Redis至极crash,前段时间的数目会丢弃。

rdbcompression yes:创建快照时对数据进行压缩  
dbfilename dump.rdb:快照名称
dir ./saveFile/:快照保存路径(AOF文件存放目录)

原理Copy-on-Write(写时复制)本领

  • Redis forks;
  • 子进度将数据写到不常传祺DB文件中;
  • 当子进度实现写MuranoDB文件,用新文件替换旧文件;

该原理保障其余时候复制奥迪Q5DB文件都是相对安全的。

二、TucsonDB机制的优势和劣势:

AOF

全长久化格局(日志方式),Append-Only-File,将数据存在内部存款和储蓄器,同期调用fsync将此番写操作命令进行日志记录到aof文件,基于Redis互联网交互作用公约的由Redis规范命令组成的可识别的纯文本文件,只同意扩张不容许改写。

写策略:暗许并引入 appendfsync everysec ,速度和平安兼顾。

  • appendfsync always:每提交一个订正命令调用fsync刷新到AOF文件,比超级慢、但要命安全;
  • appendfsync everysec:每秒调用fsync刷新到AOF文件,一点也不慢、但也许会抛弃黄金年代秒之内的数目;
  • appendfsync no:凭借OS被动刷新、redis不积极刷新AOF,最快、但安全性差;

AOF最要害的布署正是有关调用fsync追加日志文件长久化数据的功用。磁盘空间满、断电等状态不会影响日志的完整性和可用性。

保存:支持2种方式

  • 调用flushaofbuf,把aof_buf中的命令写入aof文件,再清空aof_buf,踏入下壹回loop;

    sds aof_buf; / AOF buffer, written before entering the event loop /

  • aof_rewrite:依据现成的数据库数据反向生成命令,然后把命令写入aof文件中;

加载

fakeClient = createFakeClient();   // 创建伪客户端
while(命令不为空) {
   // 获取一条命令的参数信息 argc, argv
      . . . 
   // 执行
   fakeClient->argc = argc;
   fakeClient->argv = argv;
   cmd->proc(fakeClient);
}

AOF重写

bgrewriteAOF,重新生成风度翩翩份AOF文件,新的AOF文件只包罗对相近个值的一再操作的最后一条记下(可以还原数据的小不点儿指令集),进度和奥迪Q7DB相似(Copy-on-Write机制):

  • fork一个子经过,直接遍历旧的AOF文件,将数据写入新的AOF有的时候文件;
  • 在写新文件进度中,全部的新的写操作日志记录在内存缓冲区中、同一时间会写入到原有的AOF文件中;
  • 完了写新文件操作后,发出信号通告父进度将内存缓冲区中的写指令一次性追加到临时AOF文件中;
  • 日增落成,Redis将一时半刻AOF文件作为新AOF文件替代旧AOF文件(调用原子性的rename命令用新的AOF文件代替老的AOF文件); 

当同一时候满足以下2个标准时触发rewrite操作:

auto-aof-rewrite-percentage 100  // 当前写入日志文件的大小占到初始日志文件大小的某个百分比时触发rewrite
auto-aof-rewrite-min-size 64mb   // 本次Rewrite最小的写入数据量

只顾,bgrewriteaof和bgsave无法何况施行,制止八个Redis后台过程同期对磁盘进行大气的I/O操作。

修复

Redis提供 redis-check-aof.exe 工具帮助日志修复功用:

  • 备份坏的AOF文件;
  • 运维redis-check-aof
    –fix修复坏的AOF文件;
  • 用diff
    -u比非常多个文本的间隔,确认难点点;
  • 重启Redis,加载修复后的AOF文件;

WranglerDB存在什么优势呢?
1卡塔尔(قطر‎.
风度翩翩旦接收该情势,那么你的任何Redis数据库将只满含叁个文件,那对于文本备份来讲是拾壹分完备的。比方,你恐怕筹算种种时辰归档二回近日24小时的数目,同一时常候还要每一天归档一次近来30天的数码。通过那样的备份战术,黄金时代旦系统现身磨难性故障,大家得以特别轻松的扩充恢复生机。
2卡塔尔国.
对于磨难复苏来说,科雷傲DB是那些科学的选料。因为大家得以特别轻易的将三个单身的文书减弱后再调换来别的存款和储蓄媒介物上。
3State of Qatar.
质量最大化。对于Redis的服务进程来说,在伊始漫长化时,它唯生机勃勃需求做的只是fork出子进度,之后再由子进度实现那些悠久化的劳作,那样就能够大幅度的制止服务进度推行IO操作了。
4卡塔尔(قطر‎. 比较于AOF机制,借使数额集十分的大,LANDDB的起步效用会更加高。

基本机制

master-slave,为了增加长久化学工业机械制,在长久化底蕴上Redis提供复制功能:将二个主服务器(master)数据自动同步到七个从服务器(slave),完成基本同步:

  • 纯粹的冗余备份
  • 进级读品质

具体地:

  • 起步从服务器,先向主服务器发送SYNC命令;
  • 主服务器收到SYNC命令后fork子进度始起保存快速照相,时期具备发给主服务器的指令都会被缓存到内部存款和储蓄器;
  • 快速照相保存完结后,主服务器把快速照相和缓存的一声令下全部发送给从服务器;

  • 从服务器保存收到的快速照相文件并加载到内存中,然后挨家挨户实行收到的缓存命令;

在着力同步进度中(异步达成),从服务器不会卡住,时期默许使用同步在此以前的多少继续响应顾客端命令。主从机制接济增量同步计策,减弱连接断开的苏醒资本。

切实接收中不认为奇是:Redis+MySQL

亚洲必赢手机入口 10

HighlanderDB又存在哪些劣点呢?
1卡塔尔国.
要是您想保证数据的高可用性,即最大限度的幸免数据错过,那么奥迪Q7DB将不是叁个很好的挑肥拣瘦。因为系统后生可畏旦在准时长久化以前现身宕机现象,以前尚无来得及写入磁盘的数量都将错过。
2State of Qatar. 由于凯雷德DB是经过fork子进程来援助完结多少长久化职业的,因而,假设当数码集非常的大时,恐怕会形成整个服务器结束服务几百微秒,以至是1分钟。

宣布订阅机制

publish-subscribe,观望者情势,订阅者(Subscriber)订阅频道(Channel),公布者(Publisher)将音信发到钦点频道(Channel),通过这种艺术将音讯的发送者和选拔者解耦,能够兑现三个浏览器之间的消息同步和实时更新。

亚洲必赢手机入口 11

  • 新闻的传递是多对多的;
  • 帮忙格局相称;
  • 运维稳定、飞快;

    publish myChannel “xxx”:宣布
    subscribe myChannel:订阅
    unsubscribe myChannel:撤废订阅

Redis的Pub/Sub格局允许动态的Subscribe/Unsubscribe,升高系统的灵活性和可扩张性。  

三、AOF机制的优势和劣点:

其他

排序

问题:数据库帮忙排序,为何要把排序效率放在缓存中贯彻?

  • 排序会大增数据库的载重,难以支撑高并发的使用;
  • 在缓存中排序不会遭逢表锁定的主题素材;

    sort key [BY pattern] [LIMIT offset cnt] [GET pattern [GET pattern …]] [asc | desc] [ALPHA] [STORE destination]

  • by:即order by,钦命排序字段,by
    *->子键名;

  • limit:约束排序后赶回成分的数额,表示跳过前offset个成分、再次来到之后的连续几日cnt个因素,能够达成分页功效;
  • get:再次来到钦命的字段值,get
    *->子键名;
  • store:将排序结果存入钦命地点;  

事务

Transaction。

  • multi:原子操作,布告Redis,接下去的多数下令归于同意气风发业务;
  • 输入若干限令,存款和储蓄在命令队列中而不会被随时推行;
  • exec:原子操作,通知Redis,归属同朝气蓬勃业务的持有命令输入完结,领头进行专门的学问;

管道

pipilining,允许Redis贰遍性接纳几个指令、实践后一回性重返结果,减少顾客端与Redis服务器的通讯次数、收缩往返时延。类似事情,通过原子操作multi/exec实现。

初期级队列

blpop/brpop。

AOF的优势有哪些吗?
1卡塔尔.
该机制得以拉动越来越高的多少安全性,即数据持久性。Redis中提供了3中生机勃勃道战术,即每秒同步、每校正同步和不一同。事实上,每秒同步也是异步完成的,其作用也是丰裕高的,所差的是意气风发旦系统现身宕机现象,那么那黄金时代分钟之内修正的多上校会丢弃。而每校勘同步,我们得以将其身为协同持久化,即每一次爆发的数据变化都会被立马记录到磁盘中。可以看到,这种措施在效用上是低于的。至于无同步,没有供给多言,笔者想大家都能正确的明亮它。
2卡塔尔.
由于该机制对日记文件的写入操作使用的是append情势,因而在写入进程中纵然出现宕机现象,也不会破坏日志文件中早已存在的开始和结果。可是若是大家本次操作只是写入了大意上数额就涌出了系统崩溃难题,不用忧郁,在Redis下贰遍运营在此之前,大家可以通过redis-check-aof工具来帮助我们缓和多少风度翩翩致性的标题。
3卡塔尔国.
尽管日志过大,Redis能够自动启用rewrite机制。即Redis以append格局不断的将更正数据写入到老的磁盘文件中,相同的时候Redis还有或者会成立一个新的文件用于记录那时期有如何校正命令被实施。因而在进展rewrite切换时能够越来越好的保证数据安全性。
4卡塔尔.
AOF蕴含一个格式清晰、易于掌握的日志文件用于记录全部的退换操作。事实上,大家也能够通过该文件完毕多少的重新创立。

选用处景

第大器晚成,将Redis与SQL Server/MySQL等比较一下:

  • Redis的持久化是增大功用,且其flushdb、flushall命令会直接清空数据库,
    SQL Server/MySQL的悠久化是着力职能;
  • Redis全量持久数据从内部存款和储蓄器到磁盘、大数据下影响属性,SQL
    Server/MySQL增量持久化被改变的多寡;

动用途景

 - 在主页中显示最新的项目列表;
 - 删除和过滤:lrem;
 - 排行榜(Leader Board)及相关问题;
 - 按照用户投票和时间排序;
 - 过期项目处理:unix时间作为得分;
 - 计数(Counting Stuff):INCR,DECR命令构建计数器系统;
 - 特定时间内的特定项目:Redis特色特性;
 - 实时分析正在发生的情况,用于数据统计与防止垃圾邮件等;
 - Pub/Sub:发布订阅机制;
 - 队列(Priority Queue);
 - 缓存(Caching);  

然后交给使用Redis中的几点注意事项:

  • keys * —>  scan
  • 提出接受hash
  • expire设置key的共处时间 + volatile-lru计谋;
  • Redis所在机械物理内部存储器使用最佳不要超过实际内部存款和储蓄器总的数量的3/5;

以致因而翻阅 ALCA in
Redis-land
 获得的建议:

亚洲必赢手机入口 12

参考:Redis应用场景; Redis我谈Redis应用项景; Redis应用建议

AOF的劣点有啥样呢?
1State of Qatar. 对于相像数量的数量集来讲,AOF文件日常要大于中华VDB文件。
2卡塔尔(قطر‎.
根据联合计谋的不等,AOF在运转作用上往往会慢于大切诺基DB。一句话来说,每秒同步计策的频率是比较高的,同步禁止使用计策的功用和KoleosDB同样火速。

Redis for C#

初识Redis时接触到的.Net-Redis组件是ServiceStack.Redis,其V3连串的新星版本是:ServiceStack.Redis.3.9.29.0

ServiceStack.Redis

ServiceStack.Common.dll
ServiceStack.Interfaces.dll
ServiceStack.Redis.dll
ServiceStack.Text.dll

刺探RedisClient类的具体音讯:

  • 基本操作

    public void Init();
    public bool ContainsKey(string key);
    public bool Remove(string key);
    public void RemoveByPattern(string pattern);
    public void RemoveByRegex(string pattern);
    public IEnumerable GetKeysByPattern(string pattern);
    public List SearchKeys(string pattern);
    public List GetAllKeys(State of Qatar; // 数据库内的全体键(慎用)
    public string GetRandomKey(卡塔尔国;
    public T Get(string key);
    public IRedisTypedClient As(); // / 重要 /
    public bool Add(string key, T value [, DateTime expiresAt]); // [设置过期时间]
    public bool Add(string key, T value [, TimeSpan expiresIn]);
    public bool Set(string key, T value [, DateTime expiresAt]); // [设置过期时间]
    public bool Set(string key, T value [, 提姆eSpan expiresIn]卡塔尔;
    public bool ExpireEntryAt(string key, DateTime expireAt卡塔尔; // 设置过期时间
    public bool ExpireEntryIn(string key, TimeSpan expireIn卡塔尔(قطر‎;
    public TimeSpan GetTimeToLive(string key卡塔尔; // TTL时间
    public long DecrementValue(string key卡塔尔(قطر‎; // 减
    public long DecrementValueBy(string key, int count卡塔尔;
    public long IncrementValue(string key卡塔尔(قطر‎; // 增
    public long IncrementValueBy(string key, int count卡塔尔;

  • string

    public long GetStringCount(string key);
    public string GetValue(string key);
    public void SetValue(string key, string value [, TimeSpan expireIn]);
    public void RenameKey(string fromName, string toName);
    public int AppendToValue(string key, string value);
    public string GetAndSetValue(string key, string value);
    public string GetSubstring(string key, int fromIndex, int toIndex);
    public List GetValues(List keys);
    public Dictionary GetValuesMap(List keys);

  • List  

    // 基本操作
    public int GetListCount(string listId卡塔尔;
    public int RemoveItemFromList(string listId, string valueState of Qatar;
    public string RemoveStart/End/AllFromList(string listId卡塔尔;
    public void SetItemInList(string listId, int listIndex, string value卡塔尔(قطر‎;
    public void AddItemToList(string listId, string value卡塔尔;
    public void AddRangeToList(string listId, List values);
    public List GetAllItemsFromList(string listId);
    public string GetItemFromList(string listId, int listIndex);
    public List GetRangeFromList(string listId, int startingFrom, int endingAt);
    public List GetRangeFromSortedList(string listId, int startingFrom, int endingAt);
    public List GetSortedItemsFromList(string listId, SortOptions sortOptions);
    public List GetValues(List keys);
    public Dictionary GetValuesMap(List keys卡塔尔国;
    // List作为队列
    public void EnqueueItemOnList(string listId, string valueState of Qatar;
    public string DequeueItemFromList(string listIdState of Qatar;
    // List作为栈
    public void PushItemToList(string listId, string valueState of Qatar;
    public string PopItemFromList(string listId卡塔尔国;
    public string PopAndPushItemBetweenLists(string fromListId, string toListId卡塔尔(قطر‎;

  • Set

    public int GetSetCount(string setId);
    public bool SetContainsItem(string setId, string item);
    public void RemoveItemFromSet(string setId, string item);
    public void AddItemToSet(string setId, string item);
    public void AddRangeToSet(string setId, List items);
    public HashSet GetAllItemsFromSet(string setId);
    public string GetRandomItemFromSet(string setId);
    public List GetSortedEntryValues(string setId, int startingFrom, int endingAt);
    public HashSet GetDifferencesFromSet(string fromSetId, params string[] withSetIds);
    public HashSet GetIntersectFromSets(params string[] setIds);
    public HashSet GetUnionFromSets(params string[] setIds);
    public void StoreDifferencesFromSet(string intoSetId, string fromSetId, params string[] withSetIds);
    public void StoreIntersectFromSets(string intoSetId, params string[] setIds);
    public void StoreUnionFromSets(string intoSetId, params string[] setIds);
    public void MoveBetweenSets(string fromSetId, string toSetId, string item);
    public string PopItemFromSet(string setId); 

  • Hash

    public int GetHashCount(string hashId);
    public bool HashContainsEntry(string hashId, string key);
    public bool RemoveEntryFromHash(string hashId, string key);
    public bool SetEntryInHash(string hashId, string key, string value);
    public List GetHashKeys(string hashId);
    public List GetHashValues(string hashId);
    public Dictionary GetAllEntriesFromHash(string hashId);
    public string GetValueFromHash(string hashId, string key);
    public List GetValuesFromHash(string hashId, params string[] keys);
    public T GetFromHash(object id);

  • SortedSet(zset)

    public int GetSortedSetCount(string setId);
    public bool SortedSetContainsItem(string setId, string value);
    public bool RemoveItemFromSortedSet(string setId, string value);
    public bool AddItemToSortedSet(string setId, string value [, double score]);
    public bool AddRangeToSortedSet(string setId, List values [, double score]);
    public List GetRangeFromSortedSet(string setId, int fromRank, int toRank);
    public IDictionary GetRangeWithScoresFromSortedSet(string setId, int fromRank, int toRank);
    public List GetAllItemsFromSortedSetDesc;
    public IDictionary GetAllWithScoresFromSortedSet(string setId);

内部,方法 public IRedisTypedClient<T>
As<T>(卡塔尔(قطر‎; 搭配接口 public interface
IRedisTypedClient<T> : IEntityStore<T>{} 和
public interface IEntityStore<T>{}
中提供的点子能够成功种种操作。

在V3.0版本的底子上,其V4.0版本 ServiceStack.Redis-4.0.52 提供了愈来愈多的不二诀窍:

  • Scan方法;
  • 收获设置配置音信;
  • 支持Lua脚本; 

    public RedisText Custom(params object[] cmdWithArgs卡塔尔(قطر‎; // 试行命令
    public RedisClient CloneClient(卡塔尔国;
    public string GetClient(卡塔尔国;
    public void SetClient(string nameState of Qatar;
    public void KillClient(string address卡塔尔;
    public void ChangeDb(long dbState of Qatar;
    public DateTime GetServerTime(卡塔尔(قطر‎;
    public DateTime ConvertToServerDate(DateTime expiresAt卡塔尔国;
    public List> GetClientsInfo();
    public string GetConfig(string configItem);
    public void SetConfig(string configItem, string value);
    public void SaveConfig();
    public void ResetInfoStats();

其中,Custom(State of Qatar方法可以推行绝大大多的Redis命令,ServiceStack.Redis.Commands概念命令,用于Custom(卡塔尔方法的率先个参数:

public static class Commands{   
        public static readonly byte[] CommandName;
}   

参考

StackExchange.Redis

鉴于ServiceStack.Redis的V4.0版本商业化开首收取费用,推荐使用:StackExchange.Redis

StackExchange.Redis是专为.Net/C#的Redis客户端API,前段时间被StackOverFlow使用、微软官方RedisSessionStateProvider也使用StackExchange.Redis实现。

StackExchange.Redis的为主是ConnectionMultiplexer类(线程安全),在命名空间StackExchange.Redis中定义,封装了Redis服务的操作细节,该类的实例被全数应用程序域分享和重用。

ConnectionMultiplexer redisClient = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redisClient .GetDatabase();

其底子和应用待学习…

参考

 


参考

四、其它:

1. Snapshotting:
缺省情形下,Redis会将数据集的快速照相dump到dump.rdb文件中。别的,大家也能够由此布置文件来改过Redis服务器dump快速照相的频率,在开发6379.conf文件之后,大家寻觅save,能够见到上边包车型地铁布署音信:
save 900 1
#在900秒(15分钟State of Qatar之后,就算至稀有1个key发生变化,则dump内部存款和储蓄器快速照相。
save 300 10
#在300秒(5秒钟State of Qatar之后,若是至稀有十一个key发生变化,则dump内部存款和储蓄器快照。
save 60 10000
#在60秒(1秒钟State of Qatar之后,假诺至少有10000个key发生变化,则dump内部存款和储蓄器快速照相。

2. Dump快速照相的机制:
1). Redis先fork子进程。
2卡塔尔(قطر‎. 子进度将快速照相数据写入到有的时候PRADODB文件中。
3State of Qatar. 当子进度完结多少写入操作后,再用临时文件替换老的公文。

 

3. AOF文件:
地方已经多次讲过,揽胜DB的快速照相定期dump机制不可能确认保障很好的多寡长久性。假如大家的利用确实十三分珍重此点,我们得以思忖采用Redis中的AOF机制。对于Redis服务器来说,其缺省的建制是讴歌ZDXDB,固然急需选用AOF,则需求修正配置文件中的以下条约:
将appendonly no改为appendonly yes
从今后起,Redis在每二回收到到数码改良的通令之后,都会将其增至AOF文件中。在Redis下三次重复运行时,要求加载AOF文件中的音信来创设新型的数据到内部存款和储蓄器中。

4. AOF的配置:
在Redis的布署文件中存在三种共同方式,它们分别是:
appendfsync always #每一回有多少改革爆发时都会写入AOF文件。
appendfsync everysec #每分钟同步一回,该战略为AOF的缺省战术。
appendfsync no #未曾一齐。高效不过数量不会被持久化。

5. 怎么着修复坏损的AOF文件:
1卡塔尔国. 将长存已经坏损的AOF文件额外拷贝出来大器晚成份。
2State of Qatar. 实践”redis-check-aof –fix
<filename>”命令来修复坏损的AOF文件。
3卡塔尔(قطر‎. 用修复后的AOF文件再次起动Redis服务器。

6. Redis的数据备份:

(也能够调用save大概gbsave将数据保存到.rdb文件中 
 参谋:http://www.runoob.com/redis/redis-backup.html)
  在Redis中我们得以由此copy的措施在线备份正在运营的Redis数据文件。那是因为科雷傲DB文件风度翩翩旦被转移之后就不会再被涂改。Redis每回都以将流行的数额dump到一个有时文件中,之后在接纳rename函数原子性的将偶尔文件改名称叫原来的数据文件名。因而大家得以说,在随机时刻copy数据文件都以安全的和同风度翩翩的。鉴于此,咱们就足以由此创办cron
job的主意按期备份Redis的数据文件,并将备份文件copy到安全的磁盘媒介物中。

 

———————长久化进程进行———————-

0.编辑redis.conf 将redis的起步设置为后台运转(守护进度State of Qatar

root@qiaozhi:/usr/local/redis# vim redis.conf 

  

亚洲必赢手机入口 13

 

测量检验:开启redis服务并测量检验进度是还是不是有redis(设置为照顾进度后在拉开之后写别的命令不会潜濡默化守护进度卡塔尔国

root@qiaozhi:/usr/local/redis# ./bin/redis-server redis.conf 
3601:C 07 Nov 06:41:19.801 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3601:C 07 Nov 06:41:19.802 # Redis version=4.0.2, bits=32, commit=00000000, modified=0, pid=3601, just started
3601:C 07 Nov 06:41:19.802 # Configuration loaded
root@qiaozhi:/usr/local/redis# ps -ef|grep redis
root      3600  2854  0 06:41 pts/1    00:00:00 ./bin/redis-cli
root      3602     1  0 06:41 ?        00:00:00 ./bin/redis-server 127.0.0.1:6379
root      3609  3518  0 06:41 pts/0    00:00:00 grep --color=auto redis
root@qiaozhi:/usr/local/redis# 

  

杀掉进度重新开启进度测试:

root@qiaozhi:/home/qiaozhi# ps -ef|grep redis
root      3602     1  0 06:41 ?        00:00:01 ./bin/redis-server 127.0.0.1:6379
root      3639  2854  0 06:47 pts/1    00:00:00 ./bin/redis-cli
root      3677  3660  0 06:51 pts/0    00:00:00 grep --color=auto redis
root@qiaozhi:/home/qiaozhi# kill -9 3602
root@qiaozhi:/home/qiaozhi# ps -ef|grep redis
root      3639  2854  0 06:47 pts/1    00:00:00 ./bin/redis-cli
root      3680  3660  0 06:51 pts/0    00:00:00 grep --color=auto redis
root@qiaozhi:/home/qiaozhi# cd /usr/local/redis
root@qiaozhi:/usr/local/redis# ./bin/redis-server redis.conf 
3683:C 07 Nov 06:52:03.260 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3683:C 07 Nov 06:52:03.261 # Redis version=4.0.2, bits=32, commit=00000000, modified=0, pid=3683, just started
3683:C 07 Nov 06:52:03.261 # Configuration loaded
root@qiaozhi:/usr/local/redis# 

 

1.EscortDB长久化测验 

 

(1State of Qatar改良配置文件福睿斯DB持久化频率

暗许配置:

亚洲必赢手机入口 14

 

解释:将60 10000改为60 100

指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

    save <seconds> <changes>

    Redis默认配置文件中提供了三个条件:

    save 900 1

    save 300 10

    save 60 100

    分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有100个更改。

  

(2卡塔尔修正rdb文件的生成目录:

暗中同意配置:

亚洲必赢手机入口 15

 

 

将rdb文件的变动目录改为/var/redis目录下(var目录用于寄放系统时常变化的文本State of Qatar

亚洲必赢手机入口 16

 

 

 (3卡塔尔国重启redis服务进行测量试验:

 重启:(由于贫乏/var/redis目录而报错)

root@qiaozhi:/usr/local/redis# ./bin/redis-server redis.conf 

*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 253
>>> 'dbfilename /var/redis/dump.rdb'
dbfilename can't be a path, just a filename

 

删除redis目录下的dump.rdb况兼创立/var/redis/目录后重启

root@qiaozhi:/usr/local/redis# ls
bin  dump.rdb  redis.conf
root@qiaozhi:/usr/local/redis# rm dump.rdb 
root@qiaozhi:/usr/local/redis# ls
bin  redis.conf
root@qiaozhi:/usr/local/redis# mkdir /var/redis
root@qiaozhi:/usr/local/redis# ./bin/redis-server redis.conf 
3839:C 07 Nov 07:18:40.944 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3839:C 07 Nov 07:18:40.945 # Redis version=4.0.2, bits=32, commit=00000000, modified=0, pid=3839, just started
3839:C 07 Nov 07:18:40.945 # Configuration loaded

 

(4State of Qatar客商端测验是不是有key

127.0.0.1:6379> keys *
(empty list or set)

  

(5)测试RDB持久化

  1. redis质量检查测量检验工具实践2001次命令

    root@qiaozhi:/usr/local/redis# ./bin/redis-benchmark -n 2000

  2.顾客端测量检验是还是不是有key

127.0.0.1:6379> keys *
1) "mylist"
2) "myset:__rand_int__"
3) "counter:__rand_int__"
4) "key:__rand_int__"

  3.安息服务注重启

root@qiaozhi:/usr/local/redis# kill -9 3840
root@qiaozhi:/usr/local/redis# ./bin/redis-server redis.conf
3913:C 07 Nov 07:30:02.418 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3913:C 07 Nov 07:30:02.418 # Redis version=4.0.2, bits=32, commit=00000000, modified=0, pid=3913, just started
3913:C 07 Nov 07:30:02.419 # Configuration loaded

  4.客商端查看是或不是有多少(服务珍视启之后照旧有数据印证被持久化State of Qatar

127.0.0.1:6379> keys *
1) "mylist"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "myset:__rand_int__"

  

 

2.AOF漫长化测验

 首先清空数据库:

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty list or set)

在Redis的结构文件中留存二种同盟情势,它们分别是:

appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no #从不同步。高效但是数据不会被持久化。

 

 (1)开启AOF持久化

私下认可配置:

亚洲必赢手机入口 17

 

 改革配置开启AOF

亚洲必赢手机入口 18

 

 

 (2卡塔尔(قطر‎匡正同步情势(暗中认可就是每秒记一次卡塔尔

亚洲必赢手机入口 19

 

(3State of Qatar 重写机制:(也正是将aof文件重新收拾一下卡塔尔国

  达到64M后头每提升100%重写三次

 

亚洲必赢手机入口 20

 

 

 

(4State of Qatar测量检验AOF持久化操作

  1.   重启redis服务并查阅/var/redis目录(aof文件的浮动地方与地方福特ExplorerDB悠久化的文件生成地点七个目录卡塔尔

    root@qiaozhi:/usr/local/redis# ps -ef | grep redis
    root 3639 2854 0 06:47 pts/1 00:00:00 ./bin/redis-cli
    root 4089 1 0 07:57 ? 00:00:00 ./bin/redis-server 127.0.0.1:6379
    root 4137 3763 0 08:01 pts/0 00:00:00 grep –color=auto redis
    root@qiaozhi:/usr/local/redis# kill -9 4089
    root@qiaozhi:/usr/local/redis# ./bin/redis-server redis.conf
    4139:C 07 Nov 08:02:16.404 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    4139:C 07 Nov 08:02:16.404 # Redis version=4.0.2, bits=32, commit=00000000, modified=0, pid=4139, just started
    4139:C 07 Nov 08:02:16.404 # Configuration loaded
    root@qiaozhi:/usr/local/redis# ls /var/redis/
    appendonly.aof dump.rdb

    那时:appendonly.aof文件是空的。

  2.客商端执行一遍redis操作:

127.0.0.1:6379> set a test
OK
127.0.0.1:6379> lpush lkey1 aaa bbb ccc
(integer) 3

 

   3.劳务器端重新查看appendonly.aof文件

root@qiaozhi:/usr/local/redis# less /var/redis/appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
set
$1
a
$4
test
*5
$5
lpush
$5
lkey1
$3
aaa
$3
bbb
$3
ccc

  解释:  *2   *3   * 5分别代表那条命令攻克的行数

*2: select  0    使用默许的redis数据库

*3: set a test

*5 lpush lkey1 aaa bbb ccc

 

也正是redis会办事处方的aof文件再次实践脚本进行数量的重作冯妇。 

   (4卡塔尔(قطر‎服务器端重新开动redis服务

root@qiaozhi:/usr/local/redis# ps -ef | grep redis
root      3639  2854  0 06:47 pts/1    00:00:00 ./bin/redis-cli
root      4140     1  0 08:02 ?        00:00:01 ./bin/redis-server 127.0.0.1:6379
root      4195  3763  0 08:10 pts/0    00:00:00 grep --color=auto redis
root@qiaozhi:/usr/local/redis# kill -9 4140
root@qiaozhi:/usr/local/redis# ./bin/redis-server redis.conf
4197:C 07 Nov 08:10:35.648 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4197:C 07 Nov 08:10:35.649 # Redis version=4.0.2, bits=32, commit=00000000, modified=0, pid=4197, just started
4197:C 07 Nov 08:10:35.649 # Configuration loaded

  (5卡塔尔国顾客端举办查看数据(数据依旧存在表达实行了数额的长久化操作卡塔尔

not connected> keys *
1) "lkey1"
2) "a"

  

 (5卡塔尔测量试验AOF文件的重写(对AOF文件进行减少,对数据开展管理卡塔尔(قطر‎

  •   客商端数12次操作redis

    127.0.0.1:6379> set int 1
    OK
    127.0.0.1:6379> incrby int 1
    (integer) 2
    127.0.0.1:6379> incrby int 1
    (integer) 3
    127.0.0.1:6379> incrby int 1
    (integer) 4
    127.0.0.1:6379> incrby int 1
    (integer) 5
    127.0.0.1:6379> incrby int 1
    (integer) 6
    127.0.0.1:6379> incrby int 1
    (integer) 7
    127.0.0.1:6379> incrby int 1
    (integer) 8
    127.0.0.1:6379> incrby int 1
    (integer) 9
    127.0.0.1:6379> incrby int 1
    (integer) 10
    127.0.0.1:6379> incrby int 1
    (integer) 11
    127.0.0.1:6379> incrby int 1
    (integer) 12
    127.0.0.1:6379> incrby int 1
    (integer) 13
    127.0.0.1:6379> incrby int 1
    (integer) 14
    127.0.0.1:6379> incrby int 1
    (integer) 15
    127.0.0.1:6379> incrby int 1
    (integer) 16
    127.0.0.1:6379> incrby int 1
    (integer) 17
    127.0.0.1:6379> incrby int 1
    (integer) 18
    127.0.0.1:6379> incrby int 1
    (integer) 19
    127.0.0.1:6379> incrby int 1
    (integer) 20
    127.0.0.1:6379> incrby int 1
    (integer) 21
    127.0.0.1:6379> incrby int 1
    (integer) 22
    127.0.0.1:6379> incrby int 1
    (integer) 23
    127.0.0.1:6379> incrby int 1
    (integer) 24
    127.0.0.1:6379> incrby int 1
    (integer) 25
    127.0.0.1:6379> incrby int 1
    (integer) 26
    127.0.0.1:6379> get a
    “test”
    127.0.0.1:6379> get int
    “26”

 

  •  服务器端查看appendonly.aof内容:

    root@qiaozhi:/usr/local/redis# more /var/redis/appendonly.aof
    2
    $6
    SELECT
    $1
    0
    3
    $3
    set
    $1
    a
    $4
    test
    5
    $5
    lpush
    $5
    lkey1
    $3
    aaa
    $3
    bbb
    $3
    ccc
    2
    $6
    SELECT
    $1
    0
    3
    $3
    set
    $3
    int
    $1
    1
    3
    $6
    incrby
    $3
    int
    $1
    1
    3
    $6
    incrby
    $3
    int
    $1
    1
    3
    $6
    incrby
    $3
    int
    $1
    1
    3
    $6
    incrby
    $3
    int
    $1
    1
    3
    $6
    incrby
    $3
    int
    $1
    ………….

  

  •   服务器端查看appendonly.aof大小:

亚洲必赢手机入口 21

 

 

(2)顾客端重写AOF文件:(收拾AOF文件,只保留AOF的结果,多次increby 变为结果卡塔尔(قطر‎

127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
127.0.0.1:6379> 

  

 (3State of Qatar服务端重新查看AOF文件大小与内容

大小:

 

亚洲必赢手机入口 22

 

剧情:(操作已经举行联合卡塔尔

root@qiaozhi:/usr/local/redis# more /var/redis/appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
SET
$3
int
$2
37
*5
$5
RPUSH
$5
lkey1
$3
ccc
$3
bbb
$3
aaa
*3
$3
SET
$1
a
$4
test

  

   注意:

    假若急需将redis数据库从黄金年代台服务器复制到另后生可畏台服务器,能够将aof文件和rdb文件举办拷贝,复制到另意气风发台机器的redis专门的学问目录上边,暗中同意优先加载aof文件。

亚洲必赢手机入口 23

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图