Redis高级命令与特性以及单点模式的介绍

高级命令

  • keys * 返回满足条件的所有key,可以模糊匹配
  • exists 是否存在指定的key
  • persist 取消过期时间
  • select 选择数据库 (0-15,总共16个数据库)
  • move key index 将当前数据库的 key 移动到给定的数据库 db 当中
  • randomkey 随机返回数据库里的一个key
  • rename 重命名key
  • echo 打印命令
  • dbsize 查看数据库key的数量
  • info 获取数据库的信息
  • config get 获取配置信息
  • flushdb 清空数据库

Redis安全

  • 定期打补丁
  • 禁止一些高危命令
  • 以低权限运行 Redis 服务
  • 禁止外网访问 Redis
  • 设置访问密码 足够复杂,防止暴力破解 
  • 访问权限 内网通过acl限制可以访问redis的ip和端口

Redis部署方式-

单点模式

  • 安装完以后直接启动 ./redis-server ../redis.conf

主从模式

  • 一个master可以拥有多个slave,多个slave同时连接一个master,节点在复制时不会影响master对外提供服务,提供系统的伸缩性。
  • 主从复制的过程 :slave与master建立连接,发送sync同步命令; master开启一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存;后台完成保存后,就将文件发送给slave ;slave将此文件保存到硬盘上
  • 配置 :修改redis.conf, 增加slaveof配置,设置masterauth

哨兵模式

  • 概述 :支持集群
  • 版本 :运行Sentinel
  • 配置 :Sentinel 选举 ;版本以及版本传机制播
  • 一致性
  • 持久化

Redis Cluster

  • Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。
  • 数据分布理论: 分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。常见的分区规则有哈希分区和顺序分区。Redis Cluster采用哈希分区规则,因此接下来会讨论哈希分区规则。
  • 常见的哈希分区有以下几种: 节点取余分区 ;一致性哈希分区 ;虚拟槽分区

Redis集群数据分区

Redis集群功能限制

  • key批量操作支持有限。如:MSET``MGET,目前只支持具有相同slot值的key执行批量操作。
  • key事务操作支持有限。支持多key在同一节点上的事务操作,不支持分布在多个节点的事务功能。
  • key作为数据分区的最小粒度,因此不能将一个大的键值对象映射到不同的节点。如:hash、list。
  • 不支持多数据库空间。单机下Redis支持16个数据库,集群模式下只能使用一个数据库空间,即db 0

Redis集群模式

  • 安装ruby(大于2.2.2)
  • 安装redis
  • 集群配置
  • 安装gem
  • 安装ruby的redis包
  • redis-trib.rb构建集群

Redis事务详解

  • MULTI、EXEC、DISCARD和WATCH命令是Redis事务功能的基础。Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项:
  • Redis会将一个事务中的所有命令序列化,然后按顺序执行。Redis不可能在一个Redis事务的执行过程中插入执行另一个客户端发出的请求。这样便能保证Redis将这些命令作为一个单独的隔离操作执行
  • 在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行。因此,Redis事务能够保证原子性。EXEC命令会触发执行事务中的所有命令
  • MULTI 用于标记事务块的开始
  • EXEC 在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态
  • DISCARD 清除所有先前在一个事务中放入队列的命令,然后恢复正常的连接状态
  • WATCH 当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的
  • UNWATCH 清除所有先前为一个事务监控的键

Redis持久化机制

  • RDB 持久化 RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,也是默认的持久化方式
  • save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
  • save 300 10 #300秒内如超过10个key被修改,则发起快照保存
  • save 60 10000
  • AOF 持久化 aof是redis的一种记录数据库写操作的持久化方案,他会忠实的记录所有的写操作,并且以redis协议的格式存储在一个.aof文件中,在重启redis的时候,redis可以根据.aof文件的内容来恢复数据集
  • appendfsync always //收到写命令就立即写入到磁盘,效率最慢,但是保证完全的持久化
  • appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
  • appendfsync no //完全依赖os 性能最好 持久化没保证

redis实战

  • 整合Springboot (单机版 、哨兵模式 、cluster )
  • 消息队列
  • session共享

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为副总裁徐家骏离职:年薪千万工作感悟十二条

从普通的公司职员,到年薪千万的华为副总裁,再到离开华为转战百度,徐家骏的十年从业经历和经验可资借鉴,我们从中也可以一窥华为的运作过程。徐家骏是华为数据中心的头,技术超级牛人,一级部门总监&#xff0…

Redis持久化之RDB和AOF

Redis持久化之RDB和AOF Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File); RDB 详解 RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作&#…

同为程序员 为什么我的工资最低

我看着工资单上每一个开发团队成员的薪水,慢慢地我不能保持淡定了。 而当我看到我的工资排名是倒数的时候——靠近最后一名——我不由得倒抽一口冷气。就像圣诞故事中的那个可爱的小男孩Ralphie ,想买气枪却被忽悠会有危险一样,我也不断忽悠…

Docker安装Redis以及配置Redis环境

1,下载Redis镜像 首先拉取 Redis 镜像, 这里我选择的是 redis:alpine 轻量级镜像版本 docker pull redis:alpine 下载完成后,通过 docker images 查看我们已经下载的镜像,看看是否已经下载到本地 2,运行 Redis 容器 docker run …

.NET程序性能的基本要领

摘要:本文分享了性能优化的一些建议和思考,比如不要过早优化、好工具很重要、性能的关键,在于内存分配等。开发者不要盲目的没有根据的优化,首先定位和查找到造成产生性能问题的原因点最重要。 【编者按】Bill Chiles&#xff08…

redis.conf配置文件详解

基本配置 daemonize no #是否以后台进程启动databases 16 #创建database的数量(默认选中的是database 0)save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化save 300 10 #必须是300秒之后至少10个关键字发生变…

什么原因成就了一位优秀的程序员?

这些年我曾和很多程序员一起工作,他们之中的一些人非常厉害,而另一些人显得平庸。不久前因为和一些技术非常熟练的程序员工作感觉很愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序员那么优秀,糟糕的…

Redis的哨兵模式Sentinel

sentinel功能 redis的sentinel系统用于管理多个redis服务器,该系统主要执行三个任务:监控、提醒、自动故障转移。 1、监控(Monitoring): Redis Sentinel实时监控主服务器和从服务器运行状态,并且实现自动…

csdn 到底怎么了?不准转载?

我转载了20多文章,很多人阅读过,但是今天看到阅读量是0, csdn 到底怎么了? 对用户这样?请大家看看是不是这样?

python3之后版本读取网页的内容

import urllib.request url "http://helloworldbook2.com/data/message.txt" #直接通过url来获取网页数据 print(第一种) response urllib.request.urlopen(url) code response.getcode() html response.read() mystr html.decode("utf8") response.c…

三十功名尘与土——资深程序员生涯自白

摘要:作者Codist(网名)在程序员岗位上工作了三十多年,在这期间他悟出了一些真理,比如,成功来自对失败的总结学习;条条大路通罗马,罗马并不在乎你用什么方式到达。你在生活中积累了哪…

linux/unix核心设计思想

1) 程序应该小而专一,程序应该尽量的小,且只专注于一件事上,不要开发那些看起来有用但是90%的情况都用不到的特性; 2) 程序不只要考虑性能, 程序的可移植性更重要,shell和perl&…

操作系统环境变量

在 Java中,许多类都是 Iterable ,主要包括所有的 Collection 类(但不包括各种 Maps )。 例如,下面的代码可以显示所有的操作系统环境变量: // collections/EnvironmentVariables.java // {VisuallyInspect…

用Unix的设计思想来应对多变的需求

摘要:无论是Unix设计,还是面向对象设计,还是别的什么如SOA,ECB,消息,事件,MVC,网络七层模型,数据库设计,等等,他们都在干三件事——解耦&#xff…

学习较底层编程:动手写一个C语言编译器

动手编写一个编译器,学习一下较为底层的编程方式,是一种学习计算机到底是如何工作的非常有效方法。 编译器通常被看作是十分复杂的工程。事实上,编写一个产品级的编译器也确实是一个庞大的任务。但是写一个小巧可用的编译器却不是这么困难。…

Arrays.deepToString() 方法同时适用于基元数组和对象数组

Arrays.deepToString() 方法同时适用于基元数组和对象数组: import java.util.*;public class MultiDimWrapperArray {public static void main(String[] args) {Integer[][] a1 { // Autoboxing{ 1, 2, 3, },{ 4, 5, 6, },};Double[][][] a2 { // Autoboxing{ {…

高效程序员的7个共同特征

要想成为高效的程序员,你需要具备一定的综合素质才能够让你用你所掌握的技能、经验和知识编写出有效的代码。有一些开发人员在技术方面具备一定的技巧,但他们永远无法成为高效的程序员,就是因为他们缺乏所需的其它几项特质。本文将给出成为一…

java.util.Array中的方法

概述 asList(): 获取任何序列或数组,并将其转换为一个 列表集合 (集合章节介绍了此方法)。 copyOf():以新的长度创建现有数组的新副本。 copyOfRange():创建现有数组的一部分的新副本。 equals():比较两…

有关编程的12个猜想

摘要:编程世界的将来如何目前仍难预料,但可以肯定的一点是技术一直在加速发展。本文搜罗出12个独特的编程视角猜想,一起来看看有哪些猜想在不久的将来就能变为现实。 编程世界的将来如何目前仍难预料,但可以肯定的一点是技术一直…

面试中如何剔除“鱼目混珠”程序员?

公司招聘面试事宜是一个耗时耗钱的项目,从挑选简历开始,还要花更多的时间面试候选人。有的时候这些人才机构会向你保证这些人都是Java天才、SQL专家、堆栈开发者等等,但实际上真实情况远不及你想想的。对于一个公司来说,执行招聘面…