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. 栈应用之 背包问题(Python 版)

    栈应用之 背包问题 背包问题描述:一个背包里可以放入重量为weight的物品,现有n件物品的集合s,其中物品的重量为别为w0,w1,...,wn-1.问题是能否从中选出若干件物品,其重量之和正好等于w ...

  2. ubuntu 安装chrome 和chromedriver

    1. chromedriver 下载地址:  https://npm.taobao.org/mirrors/chromedriver 在这里找到对应的驱动 2. 安装谷歌浏览器 2.1 安装依赖 ap ...

  3. POJ 2195 Going Home(KM算法模板)

    题目链接:http://poj.org/problem?id=2195 题目大意: 给定一个N*M的地图,地图上有若干个man和house,且man与house的数量一致. man每移动一格需花费$1 ...

  4. (三)HtmlUnit 实践

    第一节: htmlunit 爬取百度云资源

  5. python 常用的标准库及第三方库

    标准库Python拥有一个强大的标准库.Python语言的核心只包含数字.字符串.列表.字典.文件等常见类型和函数,而由Python标准库提供了系统管理.网络通信.文本处理.数据库接口.图形系统.XM ...

  6. c语言双向循环链表

    双向循环链表,先来说说双向链表,双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继 ...

  7. Fedora下Eclipse/MyEclipse崩溃的解决方案

    Fedora19下使用myeclipse2013时,打开不到一分钟就异常关闭. 默认在home目录下生成一个log文件,里面显示的错误信息,说是libsoup.so文件导致出错.第一个想法是删除这个文 ...

  8. CentOS 6.5通过yum安装和配置MySQL

    0x00 说明 Linux安装MySQL一共有两种方式,一种是下载安装包离线安装,另一种就是通过yum在线安装,这里先介绍在线安装的方式,此方法简单方便,出错最少,但是无法控制安装的MySQL版本,如 ...

  9. NSPredicate用法总结(Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取)

    简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 定义(最常用到的方法): NSPredicate *ca = [NSPred ...

  10. Action(8):Error -27728:Step download timeout(120 seconds)has expired when downloading

    Action(8):Error -27728:Step download timeout(120 seconds)has expired when downloading   出现如下图所示对话框上的 ...