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. java基础50 配置文件类(Properties)

    1. 配置文件类Properties的概念 主要生产配置文件与读取配置文件的信息 2.Properties要注意的细节 1.如果配置文件一旦使用了中文,那么在使用store方法生产的配置文件额时候字符 ...

  2. mac系统安装redis

    1.下载 打开官网:https://redis.io/ Download---Stable---Download3.2.8,下载最新稳定版,这里是3.2.8 2.安装 下载完成后,打开命令行工具,执行 ...

  3. CF614A 【Link/Cut Tree】

    题意:求出所有w^i使得l<=w^i<=r 输入为一行,有三个数,分别是l,r,w.意义如题目所描述 输出为一行,输出所有满足条件的数字,每两个数字中间有一个空格 如果没有满足条件的数字则 ...

  4. 用命令对sql进行备份

    利用T-SQL语句,实现数据库的备份与还原的功能 体现了SQL Server中的四个知识点: 1. 获取SQL Server服务器上的默认目录 2. 备份SQL语句的使用 3. 恢复SQL语句的使用, ...

  5. set IDENTITY_INSERT on 和 off 的设置

    qlserver 批量插入记录时,对有标识列的字段要设置 set IDENTITY_INSERT 表名 on,然后再执行插入记录操作;插入完毕后恢复为 off 设置 格式:  set IDENTITY ...

  6. OutLook中添加Exchange失败问题

    问题: 在邮件中添加账户后,打开outlook时报出错误:无法启动 Microsoft Outlook. 无法打开 Outlook 窗口. 无法打开此文件夹集合. 必须先使用当前的配置文件连接到 Mi ...

  7. Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件

    前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果:      因为此效果实现的步骤 ...

  8. SqlServr性能优化性能之层次结构(十五)

    1.添加根节点: hierarchyid  GetRoot()方法 --创建数据库 create table Employeeh(EmployeeID int,Name varchar(500),Ma ...

  9. mysql热数据加载管理

    5.6版本之后,提供了一个新特性来快速预热buffer_pool缓冲池.在my.cnf里面加入几个参数: innodb_buffer_pool_dump_at_shutdown = 1   --在关闭 ...

  10. .size和.empty

    坑爹的list容器size方法--为了splice居然把复杂度设计为O(N)? 能用empty的时候,不要用size empty可以保证常量复杂度,但list的size不保证 链表长度必须要遍历全部的 ...