1.Redis基础杂项小节

1.是什么

Redis: Remote Dictionary Server(远程字典服务器)

是一个高性能的(key/value) 分布式内存数据库,是当前热门的NoSql数据库之一

 

2.能干嘛

  • 内存存储和持久化
  • 模拟类似于HttpSession这种需要设定过期时间的功能
  • 发布、订阅消息系统 (横向对比MQ,有一定差距,毕竟不是专门做消息系统的中间件)
  • 定时器、计数器

 

3.去哪下

redis官网

redis中文网

 

4.Redis启动后基础知识讲解

  • 单机版默认16个数据库,集群环境该配置不生效,只有一个数据库,默认Select 0;
  • Dbsize 查看当前数据库的key的数量
  • Flushdb 清空当前库
  • Flushall 通杀全部库
  • 端口号默认是6379
  • 单进程,单线程

 

2.Redis数据类型

1.常用的五大数据类型

(1). String

String是redis最基本的类型,可以理解成与Memcached一模一样的类型,一个key对应一个value。

String类型是二进制安全的。String类型的值最大能存储512MB

 

(2). Hash

Redis hash 是一个键值(key->value)对集合。

Redis hash 是一个string 类型的 field 和 value的映射表 , hash 特别适合用于存储对象

 

(3). List

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

 

(4).Set

Redis的Set是string类型的无序集合。它是通过哈希表来实现的。所以添加,删除,查找的复杂度都是O(1)

 

(5).Zset

Redis Zset和Set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大排序的。Zset的成员是唯一的,但分数(score)却可以重复。

 

小结

各个数据类型应用场景:

 

2.高级‘玩家’才知道的其他数据类型

(1).Bitmap

Redis从2.2.0版本开始新增了setbit,getbit,bitcount等几个bitmap相关命令。虽然是新命令,但是并没有新增新的数据类型,因为setbit等命令只不过是在set上的扩展。在bitmap上可执行AND,OR,XOR以及其它位操作。

 

(2).HyperLogLog

HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值:

  • 基数:集合中不同元素的数量。比如 {'apple', 'banana', 'cherry', 'banana', 'apple'} 的基数就是 3 。
  • 估算值:算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合

理的范围之内。

HyperLogLog 的优点是,即使输入元素的数量或者体积非常非常大,计算基数所需的空间总是固定的、并且是很小的。

每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基
数。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以
HyperLogLog 不能像集合那样,返回输入的各个元素。

使用HyperLogLog进行数据统计时,需要考虑三要素:

  • 是否需要很少的内存去解决问题
  • 是否能容忍一定误差
  • 是否需要单挑数据

首先,hyperloglog有一定的错误率,在使用hyperloglog进行数据统计的过程中,hyperloglog给出的数据不一定是对的
按照维基百科的说法,使用hyperloglog处理10亿条数据,占用1.5Kb内存时,错误率为2%其次,没法从hyperloglog中取出单条数据,这很容易理解,使用16KB的内存保存100万条数据,此时还想把100万条数据取出来,显然是不可能的

 

(3).GEO

GEO即地址信息定位

可以用来存储经纬度,计算两地距离,范围计算等

 

(4).PipeLine

流水线功能,允许客户端可以一次发送多条命令,而不等待上一条命令执行的结果,主要的核心就是降低了多命令交互时网络通信的时间。
 

3.Redis的持久化

1. RDB (Redis DataBase)

(1) 是什么

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

Redis会单独创建(fork)一个子进程来进行持久化,会将数据写入到一个临时文件,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行IO操作的,确保了极高的性能。

如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那么RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

 

(2) 配置位置 (redis.conf)

RDB 保存的是 dump.rdb 文件

 

(3) 触发与恢复

触发:配置、save/bgsave命令、flushall命令
  • 配置文件默认的快照配置
  • 手动执行 save 或者 bgsave 命令
  • 执行flushall 命令,也会产生dump.rdb文件,但里面是空的,无意义

SAVE: save时只管保存,其他不管,全部阻塞

BGSAVE: redis会在后台异步进行快照操作,快照同时可以响应客户端请求

恢复:将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可

 

2. AOF

(1) 是什么

以日志的形式来记录到每个写操作,将Redis执行过的所有写指令记录下来

 

(2) 配置位置

AOF保存的是 appendonly.aof文件

 

(3). AOF启动/修复/恢复 以及 Rewrite

正常恢复:

启动: 设置YES,修改默认的 appendonly no,改为yes

将有数据的 aof 文件复制一份保存到对应目录 (config get dir)

恢复:重启redis然后重新加载

异常恢复:

启动:设置YES,修改默认的 appendonly no,改为yes

备份被写坏的AOF文件

修复:Redis-check-aof --fix 进行修复

恢复:重启redis然后重新加载

Rewrite:

是什么: AOF采用文件追加的方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过设定的阀值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof

重写机制: AOF文件持续增长而过大时,会fork出一条新进程来将文件重写 (也就是先写临时文件最后再rename),遍历新进程的内存中的数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式,重写了一个新的aof文件,这点和快照类似

触发机制: Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发

每修改同步:appendfsync always 同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差

每秒同步:appendfsync everysec 异步操作,每秒记录 如果一秒内宕机,有数据丢失

不同步:appendfsync no 从不同步

 

3.总结

  • RDB 持久化方式能够在指定的时间间隔能对你的数据进行快照存储

  • AOF持久化方式记录每次对服务器写的操作,当体积过大时会触发重写机制

  • 只做缓存:当然也可以不使用任何持久化方式

  • 同时开启两种持久化的方式:

    在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.

    RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。

Redis 基础特性讲解的更多相关文章

  1. Redis基础用法、高级特性与性能调优以及缓存穿透等分析

     一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...

  2. 1、redis 基础

    1.1 导言 如果你从来没使用过 Redis 数据库,那你肯定会问,为什么我们要学 Redis数据库,我只使用 MySQL 或 Oracle 就够了.其实 Redis 虽叫数据库,可又不是传统意义上的 ...

  3. windows下使用redis,Redis入门使用,Redis基础命令

    windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...

  4. [.net 面向对象程序设计深入](14)Redis——基础

    [.net 面向对象程序设计深入](14)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...

  5. [.net 面向对象程序设计深入](36)Redis——基础

    [.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...

  6. Redis高级特性介绍及实例分析

    转自:http://www.jianshu.com/p/af7043e6c8f9   Redis基础类型回顾 String Redis中最基本,也是最简单的数据类型.注意,VALUE既可以是简单的St ...

  7. 小程序基础知识点讲解-WXML + WXSS + JS,生命周期

    小程序基础 小程序官方地址,小程序开发者工具,点击此处下载.在微信小程序中有一个配置文件project.config.json,此文件可以让开发者在不同设备中进行开发. 微信小程序共支持5种文件,wx ...

  8. linux基础(2)-基础命令和基础特性

    基础命令 命令历史 命令历史的管理 登陆 shell 时,会读取命令历史文件中记录下的命令: ~/.bash_history . 登陆进 shell 后,新执行的命令只会记录在缓存中,这些命令会在用户 ...

  9. Redis基础知识点面试手册

    Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...

随机推荐

  1. codeforces 659C C. Tanya and Toys(水题+map)

    题目链接: C. Tanya and Toys time limit per test 1 second memory limit per test 256 megabytes input stand ...

  2. Windows下使用vim编写代码,使用nmake编译代码,使用vs来调试代码

    1.编写代码 2.编写Makefile,如果要调试, 2.1.需要在编译的时候加上/Zi ( Generates complete debugging information),编译由cl.exe来完 ...

  3. Gym - 101341I:Matrix God(随机算法)

    题意:给出N,以及三个矩阵A,B,C,大小都为N*N.问是否满足A*B=C: N<1000: 思路:由于矩阵乘法的复杂度为O(N^3):而部分验证又不能保证结果正确.我们巧妙地利用矩阵乘法的结合 ...

  4. PowerDesigner根据SQL文件生成PDM数据字典

    当PowerDesigner不能直接连接到数据库的时候,可以用到下面这个方法生成数据字典(直接连接数据库生成数据字典在上次随笔中有介绍). 具体操作步骤截图: ↓↓↓这里选择的sql文件是从数据库导出 ...

  5. BZOJ_2111_[ZJOI2010]Perm 排列计数_树形DP+组合数学

    Description 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic ...

  6. Python手记

    字符串的拼接 1.“+”,如果是字符和数字相连,要使用str()函数对于数字进行字符转化: 2.join() 3.",",链接的两个字符串之间用空格做关联 4.占位符 tmp += ...

  7. 蓝桥杯Log大侠(线段树单点区间更新)

    标题:Log大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力... 变换的规则是: ...

  8. 网络编程 recv()函数

    recv()是编程语言函数. 函数原型int recv( _In_ SOCKET s, _Out_ char *buf, _In_ int len, _In_ int flags); 这里只描述同步S ...

  9. [poj3107/poj2378]Godfather/Tree Cutting树形dp

    题意:求树的重心(删除该点后子树最大的最小) 解题关键:想树的结构,删去某个点后只剩下它的子树和原树-此树所形成的数,然后第一次dp求每个子树的节点个数,第二次dp求解答案即可. 此题一开始一直T,后 ...

  10. win10 ObservableCollection 排序自动收缩问题

    ObservableCollection本身是没有排序Sort功能的,不过我们可以通过冒泡排序来实现,以下是扩展功能: public static void Sort<T>(this Ob ...