Redis思维导图

Redis基本数据结构

1、String
1.1 数据结构
long len byte数组长度
long free 可用数组长度
char buff[] 数据内容
1.2 命令
键值:设置值通过字符串名
set:设置键值
setnx(set not exist):设置键值|若键不存在则可以存,否则返回0.
setex(set expire):设置键值(含过期时间),set key seconeds value
setrange:设置指定位置key的键值 例如setrange name diaodiao 2 haha-->dihahaao 从第二个位置开始替换
mset:设置多个键值
msetnx:设置多个不存在的键值
get:通过键获得值
getset:先通过键获得值,再设置值。
getrange(0~-1):获取指定范围的字符。范围|从左往右数从0开始 从右往左数-1开始。例如hello(0~4|-5~-1)
mget:获得多个键的值。 数字类型相关操作
set age 10(以下操作都是针对10操作)
incr 递增1 incr age-->11
incrby 递增指定数字-->incr age 5->16
decr 递减1
decrby 递减指定值 字符属性操作
set name "hello"
append:在尾部追加字符串 append name "Diaodiao"->helloDiaodiao
strlen: 获得字符串长度 strlen name ->5 2、hashes(存储键值对,类似于hashmap)
2.1 配置(redis.conf配置文件中)
默认:hash-max-zipmap-entries 配置字段最多64个(key的个数)
hash-max-zipmap-value 配置value最大为512字节
2.2 命令(参考String)
hset key field value
hset:若key不存在就创建,否则覆盖。
hsetnx:设置 hash field 为指定值,如果 key 不存在,则先创建。如果 field 已经存在,返回 0,nx 是not exist 的意思。
hmset:同时设置hash多个field
hget:获取指定的hash field
hmget:获取全部指定的hash field
hexists:测试指定field是否存在
hlen:返回指定的field的个数
hdel:删除指定field。
hkeys:查询指定key的所有field
hvals:获取指定key的所有value
hgetall:获得指定key的所有field以及值 3、lists
3.1 简介
list是基于双向链表的数据结构,操作就是入栈(push)、出栈(pop),包括左(头)入出栈、右(尾)入出栈,也含有超时阻塞的功能。
3.2 命令
lpush:在key对应的list的头部添加元素。
lrange:获得list范围的值。 lrange mylist start(0) stop(2)(获取0 1 2索引的值)
rpush:在key对应的list的尾部添加元素
linsert:在key对应的特定位置之前或者之后添加字符串元素 linsert mylist before “world” “hello”
lset:设置list指定下表的元素(从0开始)
lrem:从key对应的list里,删除count个value相同的元素。
ltrim:保留指定key的值范围内的数据。
lpop:从list的头部删除元素,并且返回删除元素
rpop:从list的尾部删除元素,并且返回删除元素
rpoplpush:第一个list的尾部移除元素并且添加到第二个list的头部
lindex:返回名称为key的list中index位置的元素
llen:返回key对应list的长度 4、sets
4.1 简介
sets是无序集合,是通过hashtable实现的。额外功能有并集、交集、差集。
4.2 命令
sadd:向名称为key的set当中添加元素
srem:删除名称为key的元素
spop:随机返回并且删除set中某key元素
sdiff:两个set的差集
sdiffstore:假设有set3、set1、set2-->set1与set2差集返回的元素,添加到set3中
sinter:两个set的交集
sinterstore:假设有set3、set1、set2-->set1与set2交集返回的元素,添加到set3中
sunion:两个set的并集
sunionstore:假设有set3、set1、set2-->set1与set2交集返回的元素,添加到set3中
smove:假设有set1、set2-->删除set1的某个key值,并且添加到set2
scard:返回set的元素个数
sismember:测试set中是否存在某member(元素)。
srandmember:随机返回一个元素,但是不删除 5、sorted set
5.1 简介
sorted set(skip list|双向链表和hashtable的结合体)是set的一个升级版本,升级版本的sets,有两个纬度,一个纬度用来存顺序,一个纬度用于存value。
5.2 命令
zadd:向名称为key的zset中添加元素member、score用于排序。如果该元素存在,则根据score更新该元素的顺序
zrem:删除名为key的zset的元素member
zincrby:如果在名称为 key 的 zset 中已经存在元素 member,则该元素的 score 增加 increment;否则向集合中添加该元素,其 score 的值为 increment
zrank:返回名称为 key 的 zset 中 member 元素的排名(按 score 从小到大排序)即下标
zrevrank:返回名称为 key 的 zset 中 member 元素的排名(按 score 从大到小排序)即下标
zrange:返回名称为 key 的 zset(按 score 从小到大排序)中的 index 从 start 到 end 的所有元素
zrevrange:返回名称为 key 的 zset(按 score 从大到小排序)中的 index 从 start 到 end 的所有元素
zrangebyscore:返回集合中 score 在给定区间的元素
zcount:返回集合中 score 在给定区间的数量
zcard:返回集合中元素个数
zscore:返回给定元素对应的 score
zremrangebyrank:删除集合中排名在给定区间的元素
zremrangebytscore:删除集合中 score 在给定区间的元素

Redis常用命令

1、键值相关命令
keys *|key*|key???
exists key:确认一个 key 是否存在
del key:删除一个 key
expire key seconeds:设置一个 key 的过期时间(单位:秒)
move:将当前数据库中的 key 转移到其它数据库中。
persist:移除给定 key 的过期时间
ttl:查看过期还需要多长时间
randomkey:随机返回命名空间的一个key
renamekey:重命名key
type:返回值类型 2、元务器相关命令
ping:测试连接是否存活
echo:在命令行打印一些内容
select:选择数据库。Redis 数据库编号从 0~15,我们可以选择任意一个数据库来进行数据的存取。
quit:退出连接。
dbsize:返回当前数据库中 key 的数目。
info:获取服务器的信息和统计。
monitor:实时转储收到的请求。
config:获取服务器配置信息。
flushdb:删除当前选择数据库中的所有 key。
flushall:删除所有数据库中的所有 key。

Redis高级使用属性

1、安全性:设置每次命令之前都要确认密码|在redis.conf配置文件中修改 requirepass
2、主从复制
2.1 特点
(1)master可以拥有多个slave
(2)多个slave可以连接同一个master外,还可以连接其他slave
(3)主从复制不会阻塞master,同步数据,master可以继续处理client。
(4)提高系统的伸缩性
2.2、搭建过程
参考:http://www.cnblogs.com/qiuyong/p/6705689.html
3、事务控制
3.1 简单事务控制
multi-->事务begin
exec-->退出提交
3.2 事务回滚
muliti-->事务begin
discard-->事务回滚
4、持久化
4.1 snapshotting(默认)-快照方式
将数据以快照的方式写入到二进制文件中,也是dump.rpb。执行save、bgsave的时候会对dump.rpb
保存方式
save:手动存储、阻塞当前线程,把内存数据存到dump.rpb中。
bgsave:开启子线程、调用fork操作,后台将内存数据存到dump.rpb中。
redis.conf中默认设置为自动bgsave。
缺陷:
假设有client1、client2.
client1执行flushall、把内存数据全部清除。
client2执行的时候,因为之前数据在未知情况下被清除,这样就会造成很大的麻烦。
通常情况下,我们先把save之前,把相应dump.rpb转移到其他目录下进行保存,利于数据恢复。
4.2 aof(append-only file)-->如果应用要求不能丢失任何修改的话,可以采用 aof 持久化方式
机制:默认每隔一秒,redis会收到写命令,把内容追加到appendonnly.aof文件中。
配置redis.conf
appendonly yes //启用 aof 持久化方式
# appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
# appendfsync no //完全依赖 os,性能最好,持久化没保证
5、发布及订阅消息
5.1 订阅者 subscribe 通道(频道)例如tv1/tv2/tv3 psubscribe tv*例如tv开头的消息都能收到
5.2 发送者 publish tv1 message
5.3 退出订阅模式:unsubscribe、unpsubscribe
6、Pipeline 批量发送请求
1、普通方式
基于tcp的连接方式,每次都要等着回复才能执行
2、Pipeline方式
多个命令执行完以后,然后把执行结构返回给客户端。
7、虚拟内存相关配置
vm-enabled yes #开启 vm 功能
vm-swap-file /tmp/redis.swap #交换出来的 value 保存的文件路径
vm-max-memory 1000000 #redis 使用的最大内存上限
vm-page-size 32 #每个页面的大小 32 个字节
vm-pages 134217728 #最多使用多少页面
vm-max-threads 4 #用于执行 value 对象换入换出的工作线程数量

Redis 持久化磁盘 IO 方式及其带来的问题
1. 根据业务需要选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。
2. 当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能以及最大的内存使用量。
3. 如果需要使用持久化,根据是否可以容忍重启丢失部分数据在快照方式与语句追加方式之间选择其一,不要使用虚拟内存以及 diskstore 方式。
4. 不要让你的 Redis 所在机器物理内存使用超过实际内存总量的3/5。
Redis思维导图的更多相关文章
- redis基础知识思维导图
看到一张redis的基础知识思维导图,比较清晰, 但是没有标明来源,希望知道的给个地址,我也好说明来源 图大小有1M多.在博客上看比较模糊,可以先下载下来查看,或者在浏览器新标签中打开图片查看,就比较 ...
- 面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1.什么是 Redis?. 2.Redis 的数据类型? 3.使用 Redis 有哪些好处? 4.Redis 相比 Memcached 有哪些优势? 5.Memcache 与 Re ...
- 【转】面试还搞不懂redis,快看看这40道Redis面试题(含答案和思维导图)
———————————————— 版权声明:本文为CSDN博主「程序员追风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog. ...
- 浅谈Java的主要学习要点_上海尚学堂java培训课程思维导图
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于PC.数据中心.游戏控制台.科学超级计算机.移动电话和互联网,同时拥 ...
- 18道kafka高频面试题哪些你还不会?(含答案和思维导图)
前言 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处 ...
- 精心整理「服务器Linux C/C++」 成长路程(附思维导图)
前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的.当事人非常后悔没有在大学期间知道这个道理- ...
- SpringBoot图文教程「概念+案例 思维导图」「基础篇上」
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 每个知识点配套自测面试题,学完技术自我测试 本文初学向,所以希望文中所有的代码案例都能敲一遍 大哥大姐 ...
- RabbitMQ面试题集锦(精选)(另附思维导图)
1.使用RabbitMQ有什么好处? 1.解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 2.异步,将消息写入消息队列,非必要的业务逻辑以异步的 ...
- .NET 技术栈 思维导图
背景介绍 根据网上招聘网站的一些.NET技能需求,画了一个图,便于在自修和学习的过程当中有一个方向. 技能栈 Web front-end o 框架技术 ▣ Vue ▣ Bootstrap ▣ LayU ...
随机推荐
- ES6之Class类
一.Class的基本语法 1.简介 基本上,ES6的class可以看作只是一个 语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让 对象原型 的写法更加清晰.更像面向对象编程的语法而 ...
- ES6 ... 展开&收集运算符
...展开&收集运算符,也就是说他可以干两件事情,展开和收集 一:收集,顾名思义把散列东西收集到一个地方,这个地方ES6规定收集在数组中 例如:下面函数fn将传递的参数收集在arg变量中,打印 ...
- MTK Recovery 模式横屏修改(适用于6.0 + 8.1)
修改前 修改后 6.0 Recovery 模式横屏修改方法 修改相关文件 bootable\recovery\minui\Android.mk bootable\recovery\minui\mt_g ...
- Mac Pro 2017款自带php与用brew重装PHP后的地址
mac pro 2017款自带PHP与apache位置: [apache]apache配置文件 :/etc/apache2/httpd.confDocumentRoot : /Library/WebS ...
- 再看Java之温故知新(体系篇)
一 数据类型 1.1 8种基本数据类型 1.2 引用数据类型 1.3 java内存机制 1.3.1 寄存器 1.3.2 栈 1.3.3 堆 1.3.4. 静态区/方法区 1.3.5. 运行时常量池(R ...
- Spring整合JMS消息中间件
1. 点对点模式 1.1消息生产者 (1)创建工程springjms_producer,在POM文件中引入SpringJms .activeMQ以及单元测试相关依赖 (2)在src/main/reso ...
- [20191127]探究等待事件的本源4.txt
[20191127]探究等待事件的本源4.txt --//昨天使用ash_wait_chains.sql脚本把各个生产库执行1遍,才发现我对一套系统性能理解错误.--//我一直以为这套系统存储有点问题 ...
- git上传本地项目到github或者gitlib(两个是一样的)。
第一步:在github上面创建一个repository 点击create就好了.然后会出现下面的页面. 第三步:打开你所在文件夹,或者是新建的文件夹(用来做仓库的)右键会出现下面 选用git B ...
- PyCharm 快捷键失效解决办法
PyCharm快捷键用着用着失效了 ......修改设置如下 重新启动Pycharm即可 原博客地址:https://blog.csdn.net/jacke121/article/details/82 ...
- Centos 7.5私有域名服务器部署(coredns+etcd)
单机配置: 一.安装etcd: 1.安装 yum install etcd -y 2.启动 systemctl start etcd 3.设置开机启动 systemctl enable e ...