[Database] Redis 随笔
Redis 随笔
1. 特点
- 非关系数据库 non-relational database
- 内存数据库
- 高性能
- 主从复制
- 可持久化存储
- 发布与订阅
- 支持脚本
2. 数据类型5种
STRING
- 可以是字符串、整数、浮点数
- 操作
- 对整个字符串或都字符串的一部分执行操作;
- 对整数或浮点数执行自增或自减操作;
LIST
- 链表,每个节点都包含一个字符串
- 操作
- 从链表两端推入或弹出元素;
- 依据偏移量对链表进行修剪(trim);
- 读取单个或者多个元素;
- 依据值查找或移动元素;
SET
- 包含字符串的无序收集器,并且各字符串独一无二、各不相同
- 操作
- 添加、获取、移除单个元素;
- 检查一个元素是否存在于集合中;
- 计算交集、并集、差集;
- 从集合里面随机获取元素;
HASH
- 包含键值对的无序散列表
- 操作
- 添加、获取、移除单个键值对;
- 获取所有键值对;
ZSET
- 字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定
- 操作
- 添加、获取、删除单个元素;
- 依据分值范围或者成员来获取元素
3. 命令
- http://redisdoc.com
- SORT
- 过期
- EXPIRE
- EXPIREAT
- PERSIST
- TTL
- PTTL
- PEXPIRE
- PEXPIREAT
基本事务 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
- 非事务性流水线
- PyRedis
- conn.pipeline(False)
- PyRedis
性能测试工具
- 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 登录缓存
- 购物车
- 网页缓存
- 数据行缓存
- 基于搜索的应用
- 定向广告
- 社交网站
XMIND:

[Database] Redis 随笔的更多相关文章
- Redis随笔(一)Linux Redis 搭建
1.到官网下载redis上传服务器或者使用wget 下载 wget redis下载的路径 2.查看linux是否安装编译环境gcc,没有先安装 yum -y install gcc 3.解压redis ...
- 本地缓存google.guava及分布式缓存redis 随笔
近期项目用到了缓存,我选用的是主流的google.guava作本地缓存,redis作分布式 缓存,先说说我对本地缓存和分布式缓存的理解吧,可能不太成熟的地方,大家指出,一起 学习.本地缓存的特点是速度 ...
- 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主 ...
- Redis随笔(三)主从搭建
1.安装redis cd /root/svr/wget http://download.redis.io/releases/redis-3.2.9.tar.gz tar -zxvf redis-3.2 ...
- Redis随笔(二)redis desktop manager 安装并且连接redis服务器
1.首先在win10下安装redis desktop manager 2.查看虚拟机防火墙状态,启动状态,则关闭掉 查看防火墙状态: systemctl status firewalld.servic ...
- Redis随笔
dump.rdb:快照文件 删除这个文件 rm -f dump.rdb 第一步:创建6个redis实例,端口号从7001~7006 第二步:修改redis的配置文件 1.修改端口号 修改redis.c ...
- Redis随笔-rename效率问题
背景 rename是redis中给key重命名命令,rename key newkey的意思就是将key重命名为newkey.大部分文档在介绍rename的时候只将它描述成一个时间复杂度为O(1)的命 ...
- Redis随笔(六)RESP的协议规范
1.官网文档 https://redis.io/topics/protocol http://www.redis.cn/topics/protocol.html 2.协议介绍 redis协议规范(Re ...
- Redis随笔(五)Jedis、jedisCluster的使用
1.Jedis客户端 https://redis.io/clients 2.Jedis源码包与使用介绍 https://github.com/xetorthio/jedis 3.项目中使用 通过mav ...
随机推荐
- idea心得
概述 Intellij IDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜.出于对Intellij IDEA的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的Intel ...
- Flask:使用jsonify()转换为JSON的数据在Chrome显示为Unicode编码
Chrome 66,Flask 1.0.2,MongoDB 3.6.3, 创建了一个Flask应用,在将MongoDB中的数据使用PyMongo包获取后,再使用jsonify转换为JSON格式发送回请 ...
- 简单的TCP接受在转发到客户端的套接口
//功能:客服端发送tcp包,服务器接受到并打印出来,并将包转换为大写后到客户端//2015.9.10成功 #include <stdio.h>#include <sys/socke ...
- 云计算IaaS浅谈
(本篇文章仅仅是整理文档资料时,发现的一篇课程报告,感觉还挺有参考意义的) 最近几年云计算一直是IT业的热点,一股炽热的云计算浪潮席卷了世界,全世界都在讲云计算,都在搞云计算.虽然最初是由谷歌公司提出 ...
- POJ 3280 Cheapest Palindrome(区间DP求改成回文串的最小花费)
题目链接:http://poj.org/problem?id=3280 题目大意:给你一个字符串,你可以删除或者增加任意字符,对应有相应的花费,让你通过这些操作使得字符串变为回文串,求最小花费.解题思 ...
- JAVA复习笔记之GC部分
前言:垃圾回收机制,大家都知道JAVA的垃圾回收都是JVM自动回收的,不需要程序员去管理.但是我们还是得知道原理才能在适当时机进行JVM调优 原理:当我们new 一个对象时JVM堆区就会分配一块 ...
- Centos中查询目录中内容命名ls
首先解释下这块, root代表当前登录用户,localhost代表主机名, ~代表当前主机目录, #代表用户权限 #表示超级用户,$表示普通用户: 查询目录中内容命令 ls (list缩写) ...
- Asp.Net MVC Razor视图引擎与My97DatePicker插件的结合
using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System. ...
- 【LOJ】#2063. 「HAOI2016」字符合并
题解 dp[i][j][S]表示区间[i,j]内剩余的数位状压后为S的最大值 这样转移起来不就是\(n^3 2^8\)了吗 冷静一下,我们可以发现一段区间内剩下的数位的个数是一定的,也就是我们可以在枚 ...
- Django实战(6):对比RoR和Django的模板系统
scaffold的生成物虽然用处不大,但是给我们带来一些最佳实践.其中就有模板的继承和分区. 如果你深入使用过rails的模板体系,那么恭喜你:你有超强的忍耐力!而且更重要的是,你只需要3分钟就可以理 ...