Redis 随笔

1. 特点

  • 非关系数据库 non-relational database
  • 内存数据库
  • 高性能
  • 主从复制
  • 可持久化存储
  • 发布与订阅
  • 支持脚本

2. 数据类型5种

STRING

  • 可以是字符串、整数、浮点数
  • 操作
    • 对整个字符串或都字符串的一部分执行操作;
    • 对整数或浮点数执行自增或自减操作;

LIST

  • 链表,每个节点都包含一个字符串
  • 操作
    • 从链表两端推入或弹出元素;
    • 依据偏移量对链表进行修剪(trim);
    • 读取单个或者多个元素;
    • 依据值查找或移动元素;

SET

  • 包含字符串的无序收集器,并且各字符串独一无二、各不相同
  • 操作
    • 添加、获取、移除单个元素;
    • 检查一个元素是否存在于集合中;
    • 计算交集、并集、差集;
    • 从集合里面随机获取元素;

HASH

  • 包含键值对的无序散列表
  • 操作
    • 添加、获取、移除单个键值对;
    • 获取所有键值对;

ZSET

  • 字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定
  • 操作
    • 添加、获取、删除单个元素;
    • 依据分值范围或者成员来获取元素

3. 命令

基本事务 transaction

  • MULTI
  • EXEC
  • UNWATCH
  • WATCH
  • DISCARD

4. 数据安全与性能保障

持久化

  • 快照 snapshotting

    • 将存在于某一时刻的所有数据都写入硬盘里面
    • 操作
      • 执行 BGSAVE
      • 执行 SAVE
      • 配置选项 save 60 10000 ; 可以多个条件,条件满足时执行一次BGSAVE
      • 收到SHUTDOWN 或 TERM信号时,会执行SAVE
      • 一个Redis连接另一个Redis 服务器,并发送SYNC 开始复制时,主服务器非刚执行完BGSAVE操作,就会执行BGSAVE
  • AOF 只追加文件 append-only file
    • AOF 持久化会将被执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化。
    • 重写/压缩AOF文件
      • 执行命令 BGREWRITEAOF
      • 设置选项
        • auto-aof-rewrite-min-size
        • auto-aof-rewrite-percentage

复制 replication

  • 让其他服务器拥有一个不断更新的数据副本,从而使拥有副本的服务器可以用于处理客户端发送的读请求。
  • slaveof host port
  • slaveof no one
  • 主从链
  • 检验硬盘写入
    • INFO命令输出结果aof_pending_bio_fsync 属性的值是否为0
  • 验证快照文件和AOF文件
    • redis-check-aof
    • redis-check-dump

事务

  • 事务型流水线

    • PyRedis

      • conn.pipeline()
      • conn.multi *** conn.exec
  • 非事务性流水线
    • PyRedis

      • conn.pipeline(False)

性能测试工具

  • reids-benchmark

分布式锁

Redis使用WATCH命令来代替对数据进行加锁,因为WATCH只会在数据被其他客户端抢先修改了的情况下通知执行了这个命令的客户端,而不会阻止其他客户端对数所进行修改,所以这个命令被称为乐观锁(optimistic locking)

发布、订阅

publish、subscribe


降低内存占用

短结构

Redis 为列表、集合、散列和有序集合提供了一组配置选项,可以让Redis以更节约空间的方式存储长度较短的结构。

在列表、散列、有序集合的长度较短或者体积较小的时候,Redis可以选择使用和种名为压缩列表(ziplist)的紧凑存储方式来存储这些结构。压缩列表以序列化的方式存储数据,这些数据每次被读取的时候都要进行解码,每次被写入的时候也要进行局部的重新编码,并且可能需要对内存里面的数据进行移动。

一般压缩列表的长度限制在 1024 个以内,每个元素体积不能超过 64字节,一般能同时兼顾内存占用和高性能这两方面优点。

配置使用

* list-max-ziplist-entries  512  #允许包含的最大元素数
* list-max-ziplist-value 64 #每个节点最大体积是多少个字节
* hash-max-ziplist-entries 512
* hash-max-ziplist-value 64
* zset-max-ziplist-entries 128
* zset-max-ziplist-value 64
* set-max-intset-entries 512

分片结构 sharding

  • 通过哈希环等算法,把列表、集合、散列分布到多处存储,来减小元素数,从而使用压缩列表减少内存占用。
  • 打包存储二进制位和字节
  • 对于简短并且长度固定的连续ID,可以用分片Redis字符串去存储。

扩展Redis

  • 增加从服务器

  • 使从服务器可写

  • slave-read-only

  • 分片扩展写性能和内存容量


解决实用案例

  • Web 登录缓存
  • 购物车
  • 网页缓存
  • 数据行缓存
  • 基于搜索的应用
  • 定向广告
  • 社交网站

相关链接:

Redis 1

Redis 2

XMIND:

[Database] Redis 随笔的更多相关文章

  1. Redis随笔(一)Linux Redis 搭建

    1.到官网下载redis上传服务器或者使用wget 下载 wget redis下载的路径 2.查看linux是否安装编译环境gcc,没有先安装 yum -y install gcc 3.解压redis ...

  2. 本地缓存google.guava及分布式缓存redis 随笔

    近期项目用到了缓存,我选用的是主流的google.guava作本地缓存,redis作分布式 缓存,先说说我对本地缓存和分布式缓存的理解吧,可能不太成熟的地方,大家指出,一起 学习.本地缓存的特点是速度 ...

  3. Redis随笔(四)Centos7 搭redis3.2.9集群-3主3从的6个节点服务

    1.虚拟机环境 使用的Linux环境已经版本: Centos 7   64位系统 主机ip: 192.168.56.180 192.168.56.181 192.168.56.182 每台服务器是1主 ...

  4. Redis随笔(三)主从搭建

    1.安装redis cd /root/svr/wget http://download.redis.io/releases/redis-3.2.9.tar.gz tar -zxvf redis-3.2 ...

  5. Redis随笔(二)redis desktop manager 安装并且连接redis服务器

    1.首先在win10下安装redis desktop manager 2.查看虚拟机防火墙状态,启动状态,则关闭掉 查看防火墙状态: systemctl status firewalld.servic ...

  6. Redis随笔

    dump.rdb:快照文件 删除这个文件 rm -f dump.rdb 第一步:创建6个redis实例,端口号从7001~7006 第二步:修改redis的配置文件 1.修改端口号 修改redis.c ...

  7. Redis随笔-rename效率问题

    背景 rename是redis中给key重命名命令,rename key newkey的意思就是将key重命名为newkey.大部分文档在介绍rename的时候只将它描述成一个时间复杂度为O(1)的命 ...

  8. Redis随笔(六)RESP的协议规范

    1.官网文档 https://redis.io/topics/protocol http://www.redis.cn/topics/protocol.html 2.协议介绍 redis协议规范(Re ...

  9. Redis随笔(五)Jedis、jedisCluster的使用

    1.Jedis客户端 https://redis.io/clients 2.Jedis源码包与使用介绍 https://github.com/xetorthio/jedis 3.项目中使用 通过mav ...

随机推荐

  1. linux创建新用户

    服务器只用root账号会有风险,最好是每个人使用一个账号. 1. 添加用户名 adduser linuxidc 2. 给这个用户名设置新密码 passwd linuxidc 3.授权 个人用户的权限只 ...

  2. Hadoop(二):MapReduce程序(Java)

    Java版本程序开发过程主要包含三个步骤,一是map.reduce程序开发:第二是将程序编译成JAR包:第三使用Hadoop jar命令进行任务提交. 下面拿一个具体的例子进行说明,一个简单的词频统计 ...

  3. sublime Text快捷键(超级全)

    sublime Text快捷键(超级全) Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中的文件 Ctrl+G:跳转到第几行 Ctrl+W:关闭当前打开文件 Ctrl+Shift+W: ...

  4. 你真的了解js伪数组吗?深入js伪数组

    关于js伪数组 具有length属性: 按索引方式存储数据: 不具有数组的push().pop()等方法: 你可能知道怎么把伪数组转换为数组,但是你知道这里边的原理吗? 假如页面有一组li元素 < ...

  5. less常用样式集,清除浮动、背景自适应、背景渐变、圆角、内外阴影、高度宽度计算。

    .clear-float() { content: ''; display: block; clear: both; height:; } //伪元素清除浮动 .after-clear() { &am ...

  6. JSTL使用

    1.标签函数库 核心标签库                 c I18N格式标签库   fmt SQL标签库  sql XML标签库  xml 函数标签库 fn 2.JSTL支持EL 二:表达式标签 ...

  7. pandas实战——对星巴克数据的分析

    一.实验对象 实验对象为星巴克在全球的门店数据,我们可以使用pandas对其进行简单的分析,如分析每个国家星巴克的数量,根据门店数量对国家进行排序等. 二.数据分析 1.读取数据并获取数据行列数 首先 ...

  8. php读取文件内容的4钟常用方法函数

    这四种方法根据不同情况使用,可以实现对文件的任何操作,下面有详细介绍. 1.把整个文件读入一个字符串中 file_get_contents(); 2.把整个文件读入一个数组中,一行就是一个数组元素 f ...

  9. Onenet学习笔记

    中国移动物联网开放平台:https://open.iot.10086.cn/ 一.平台概述 简介 OneNET是中国移动物联网有限公司响应“大众创新.万众创业”以及基于开放共赢的理念,面向公共服务自主 ...

  10. SpringMVC源码解读 - HandlerMapping - RequestMappingHandlerMapping初始化

    RequestMappingHandlerMapping ,用于注解@Controller,@RequestMapping来定义controller. @Controller @RequestMapp ...