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. 字符串匹配算法之 kmp算法 (python版)

    字符串匹配算法之 kmp算法 (python版) 1.什么是KMP算法 KMP是三位大牛:D.E.Knuth.J.H.MorriT和V.R.Pratt同时发现的.其中第一位就是<计算机程序设计艺 ...

  2. Windows 8 应用程序前后台切换事件监听

    在一些情况下,我们需要监听应用程序切换到后台或者从后台切换至前台的事件,从而进行相关处理操作.支付宝应用锁屏(IOS,Android平台)的处理中就需要监听此事件,在用户将应用切换至后台一段时间后再切 ...

  3. gbdt和xgboost api

    class xgboost.XGBRegressor(max_depth=3, learning_rate=0.1, n_estimators=100, silent=True, objective= ...

  4. js数据绑定(模板引擎原理)

    <div> <ul id="list"> <li>11111111111</li> <li>22222222222< ...

  5. invalid byte sequence for encoding "UTF8": 0xe99d2c

    服务器还原数据库数据出错,老规矩... 字符集编码的问题 http://blog.csdn.net/beiigang/article/details/39582583 over....

  6. jQuery对象与JS原生对象之间的转换

    1.将jQuery转换为dom对象的方法 [index] 或者.get(index): a.$(“#form”)[index] ,该方法获取form元素的dom对象 b.$(“#form”).get( ...

  7. STL容器读书笔记

    vector vector维护的是一个连续线性空间 vector是动态空间,随着元素的加入会自动扩容,扩充至当前size的两倍,然后将原内容拷贝,开始在原内容之后构造新元素,并释放空间 vector提 ...

  8. 使用odbc时报错,驱动程序和应用程序之间的体系结构不匹配

        当出现这个问题时说明:ODBC程序中使用的是32位的dsn,但本身机器是64位,所以要运行 C:\Windows\SysWOW64\odbcad32.exe来改变本身机器使用的odbc

  9. OneDrive开发入门

    OneDrive API提供了对存储在OneDrive上文件的访问能力,大多数API都遵循REST模式,少部分的API可以通过简单的函数来调用 在使用OneDrive API之前要先了解两个简单的概念 ...

  10. OpenJudge——0003:jubeeeeeat

    OpenJudge——0003:jubeeeeeat 描述 众所周知,LZF很喜欢打一个叫Jubeat的游戏.这是个音乐游戏,游戏界面是4×4的方阵,会根据音乐节奏要求玩家按下一些指定方块(以下称co ...