Redis之品鉴之旅(六)】的更多相关文章

Redis之品鉴之旅(一) 好知识就如好酒,需要我们坐下来,静静的慢慢的去品鉴.Redis作为主流nosql数据库,在提升性能的方面是不可或缺的.下面就拿好小板凳,我们慢慢的来一一品鉴. 1)redis号称是大数据高并发的利器,那么到底什么是redis? redis是nosql(not only sql,不仅仅是sql语句),它提供了各种操作的api,不像我们的关系型数据库使用sql语句来操作数据库. redis全称Remote Dictionary Server(远程字典服务),首先是一个字典…
持久化 快照的方式(RDB) 文件追加方式(AOF) 快照形式: save和bgsave能快速的备份数据.但是.........., Save命令:将内存数据镜像保存为rdb文件,由于redis是单线程模型,期间会阻塞redis服务进程,redis服务不再处理任何指令,直到rdb文件创建完成为止. Bgsave命令:父进程启动一个子进程,由子进程将内存保存在硬盘文件,期间不会影响其他的指令操作. redis 后台保存数据文件的线程只会有一个. 这里先做标题,后续补充内容…
分布式锁 1)阻塞锁: 尝试在redis中创建一个字符串结构缓存,方法传入的key,value为锁的过期时间timeout的时间戳. 若redis中没有这个key,则创建成功(即抢到锁),然后立即返回. 若已经有这个key,则先watch,然后校验value中的时间戳是否已经超过当前时间. 若已超过,则尝试使用提交事务的方式覆盖新的时间戳,事务提交成功(即抢到锁),然后立即返回: 若未超过当前时间或事务提交失败(即被别人抢到锁), 如果没有抢到锁,则进入 一个内部优化过的微循环,不断重试. //…
Redis事务 原子性:就是最小的单位 一致性:好多命令,要么全部执行成功,要么全部执行失败 隔离性:一个会话和另一个会话之间是互相隔离的 持久性:执行了就执行了,数据保存在硬盘上 典型例子:银行转账,A给B转账100万,首先要A的账户减去100万,然后B的账户增加100万,如果中间断了那就出问题了.所以我们人为的将这件事进行原子化,做成一个最小单位.要么一起成功要么一起失败. redis是一种简单的数据存储形式,redis的事务是不支持回滚的. 之前的sqlserver的事务,开了一个事务,去…
2)hash类型,上代码 using (RedisClient client = new RedisClient("127.0.0.1", 6379, "12345", 10)) { //删除当前数据库中的所有Key 默认删除的是db0 client.FlushDb(); //删除所有数据库中的key //client.FlushAll(); //大key string hashid = "pengbo"; #region 向hashid集合中添…
发布订阅,简单场景下的发布订阅完全可以使用. 可以简单的理解,将一个公众号视为发布者,关注公众号的人视作订阅者,公众号发布一条文章或者消息,凡事订阅公众号的都可以收到消息.一个人可以订阅多个公众号,一个公众号可以被多个人订阅. //创建一个公众号--创建一个主题 Console.WriteLine("发布服务"); IRedisClientsManager redisClientManager = new PooledRedisClientManager("127.0.0.1…
3)Set,可以去重的.无序的集合.可以取交集.并集.zset(sorted set),有序的.去重的集合,排序不是根据value排序,而是根据score排序. using (RedisClient client = new RedisClient("127.0.0.1", 6379, "12345", 10)) { //删除当前数据库中的所有Key 默认删除的是db0 client.FlushDb(); //删除所有数据库中的key //client.FlushA…
redis配置 为了码农在代码上只关心业务以及代码上的统一性,wenli.drive.redis内部使用配置来完成那些不同的场景,也就是说随便填填配置就能适应不同的场景! 当然配置多了码农也会受不了,所以配置里面很多都是默认项 实例代码点击这里查看 redis成长之路--(一) redis成长之路--(二) redis成长之路--(三) redis成长之路--(四) redis成长之路--(五) redis成长之路--(六) redis成长之路--(七)…
# -*- coding: utf-8 -*- import redis r = redis.Redis(host=") 1. Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略.假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合.当集合 key 不是集合类型时,返回一个错误. ",1) #输出的结果是1 ",2) #输出的结果是1 ",2) #因为2已经存在,不能再次田间,所以输出的结果是0 ",3,4) #输…
Redis源码阅读(六)集群-故障迁移(下) 最近私人的事情比较多,没有抽出时间来整理博客.书接上文,上一篇里总结了Redis故障迁移的几个关键点,以及Redis中故障检测的实现.本篇主要介绍集群检测到某主节点下线后,是如何选举新的主节点的.注意到Redis集群是无中心的,那么使用分布式一致性的算法来使集群中各节点能对在新主节点的选举上达成共识就是一个比较可行的方案. 在工程上,Raft一致性算法是比较易于实现和理解的分布式一致性算法:Redis也是使用了Raft来做主节点选举的.所以这里先简单…
之前的文章中我们意见分析了一级缓存.二级缓存的相关源码和基本原理,今天我们来分享下了mybatis二级缓存和redis的结合,当然mybatis二级缓存也可以和ehcache.memcache.OSCache.Hazelcast结合使用.二级缓存相关的源码分享请参考<Mybatis源码分析之Cache二级缓存原理>.我们通过两种方式来实战,一种是自己编写缓存.另外一种是官方给出的demo地址:http://www.mybatis.org/redis-cache/ 一:自定义mybatis缓存…
一.介绍      有时,Redis实例需要在很短的时间内加载大量先前存在或用户生成的数据,以便尽可能快地创建数百万个键.这就是所谓的批量插入,本文档的目标是提供有关如何以尽可能快的速度向Redis提供数据的信息.如果想查看英文原文,地址如下:https://redis.io/topics/mass-insert二.操作详解 话不多说,直接进入主题了.      1.使用协议,卢克(Use the protocol, Luke)           使用普通Redis客户端的方式执行批量插入的操…
摘自:http://www.mayou18.com/detail/o6M0v9mi.html Redis  HyperLogLog 结构讲解 Redis 在 2.8.9 版本添加了 HyperLogLog 结构. Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的.并且是很小的. 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^6…
发布订阅 相关命令:publish(发布)  subscribe(订阅)  psubscribe(支持通配符匹配) 发布者--频道--订阅者(发布和订阅都是客户端频道是服务端) 1.publish- subscribe 模式 开启一个命令窗体,redis订阅者: # redis-cli > subscribe channel_1 Reading messages... (press Ctrl-C to quit) ) "subscribe" ) "channel_1&q…
Arraylist和linkedlist的区别?? Arraylist是使用数组来存储数据,特点:查询快.增删慢 Linkedlist是使用双向链表存储数据,特点:增删快.查询慢,但是查询链表两端的数据也很快. Redis的list是采用来链表来存储的,所以对于redis的list数据类型的操作,是操作list的两端数据来操作的. 1> 向列表两端增加元素 向列表左边增加元素 语法:LPUSH key value [value -] 127.0.0.1:6379> lpush list 1 1…
Redis的高效可以说是轻量级的epoll模型和基于内存的读写共同组成的,关于epoll对于以前的select或者poll的性能优势这里不做介绍,本篇主要介绍领一个重点,Redis的内存分配原理. 获取内存信息命令:info memory used_memory: Redis分配器分配的内存总量,就是内部存储的所有数据内存占用量. used_memory_human: 以可读的格式返回used_memory. used_memory_rss: 以操作系统同的角度显示Redis进程占用的物理内存总…
1. 介绍 rails中就自带有cache功能,不过它默认是用文件来存储数据的.我们要改为使用redis来存储.而且我们也需要把sessions也存放到redis中.关于rails实现cache功能的源码可见于这几处: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/cache.rb https://github.com/rails/rails/tree/master/activesuppor…
原文地址:http://www.cnblogs.com/zhongweiv/p/node_redis.html 安装前准备 win64: Install python: http://www.python.org/getit/windows/Install Microsoft Visual Studio C++ 2012 Express version: http://go.microsoft.com/?linkid=9816758Install node-gyp: npm install -g…
一.redis安装 借鉴上篇博客:http://www.cnblogs.com/WJ--NET/p/8176071.html 二.集群搭建 2.1.创建文件夹 mkdir redis_cluster 2.2.复制redis.conf和redis-server mkdir 7001 cp /usr/local/redis/redis-4.0.6/redis.conf /usr/local/redis/redis_culster/7001/ cp /usr/local/redis/redis-4.0…
Redis 是一个使用 C 语言编写的 NoSql 的数据库,本篇就讲解在 Redis 中数据库是如何存储的?以及和数据库有关的一些操作. Redis 中的所有数据库都保存在 redis.h/redisServer 结构中的 db 数组中,如下: struct redisServer { ...... // 数据库 redisDb *db; ...... } Redis 默认会创建 16 个数据库,每个数据库互不影响. 切换数据库 每个 Redis 客户端也都有自己的目标数据库,默认情况下,Re…
对大多数 Java 开发来说,基于 web 的应用程序是我们主要的关注点. Spring 也提供了对于 web 的支持,基于 MVC 模式的 Spring MVC 能够帮助我们灵活和松耦合的完成 web 应用程序. Spring MVC 处理流程 第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HandlerMapping查找 Handler(可以根据xml配置.注解进行查找) 第三步:处理器映射器HandlerMapping向前端控制器返回Handle…
1.redis持久化的意义 redis持久化的意义,在于 故障恢复 . 如果没有对数据进行持久化,那么如果redis遇到灾难性的故障,就会丢失所有的数据. 如果通过redis的持久化机制将数据持久化到硬盘上面去,然后在定期将磁盘上的文件备份到一起其他的服务器上面(比如:云服务器),这样就可以保证即使redis遇到了灾难事故,也可以使用提前备份的文件对数据进行回复,之后丢失最近的一部分数据,而不会全部丢失数据. 2.redis的两种持久化方式 redis的持久化是跟高可用相关的.redis有两种持…
个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.常见问题目录 fork操作 进程外开销 AOF追加阻塞 单机多实例部署 二. fork 1.Fork操作 1.同步操作:Fork操作只是做内存页的拷贝,而不是做整个内存的拷贝,所以说,大部分情况下速度是非常快的,但是如果本身的fork操作比较慢,或者是卡在了某个地方,那么它就会阻塞redis的主线程. 2. 与内存量息息相关:内存越大,耗时越长(与机器类型有关) 3. Info:latest_fo…
消失了一段时间,我又回来啦.不多说,继续把哨兵看完. 检测主观下线状态 默认情况下,Sentinel会以每秒一次的频率向所有与他创建了命令连接的实例(主从服务器以及其他Sentinel)发送PING命令,并通过实例返回的PING命令回复来判断实例是否在线. 实例对PING命令的回复可以分为两种情况: 有效回复:实例返回+PONG.-LOADING.-MASTERDOWN三种回复的其中一种. 无效回复:实例返回除+PONG.-LOADING.-MASTERDOWN三种回复之外的回复或者规定时间内没…
通过前面的文章,你已经可以快速地搭建一个报警系统,并能正常的收到报警邮件了.不过在很多企业级环境下,邮件发送服务器往往放在外网,而zabbix server放置在内网,在这种情况下,zabbix的报警信息又如何能传送给邮件发送服务器呢? 其实也很简单,方法也很多,这里给出一个我们在实际生产环境中的例子,大致的流程是: 请求网络组的同事将邮件发送服务器的22端口开放给内网的zabbix机器: 前面提到的server报警脚本需要做改造,将报警信息封装成一个时间戳文件: 利用scp命令将时间戳文件传送…
前言 本篇介绍的不是什么新知识,而是对前面讲解的一些知识的综合运用.众所周知,递归是解决复杂问题的一个很有效的方式,也是函数式语言的核心,在一些函数式语言中,是没有迭代与while这种概念的,因为此类的循环通通可以用递归来实现,这类语言的编译器都对递归的尾递归形式进行了优化,而Java的编译器并没有这样的优化,本篇就要完成这样一个对于尾递归的优化. 什么是尾递归 本篇将使用递归中最简单的阶乘计算来作为例子 递归实现 /** * 阶乘计算 -- 递归解决 * * @param number 当前阶…
现在,创建一个新的类用来表示炮塔.添加新的类文件,名称为Tower,继承于CCNode. 替换Tower.h文件为如下内容: #import "cocos2d.h" #import "HelloWorldLayer.h" #define kTOWER_COST 300 @class HelloWorldLayer, Enemy; @interface Tower: CCNode { int attackRange; int damage; float fireRat…
面向对象三大特性 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强... 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用. 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数 一.什么是类&对象 类:可以理解为他是一个模板…
json和pickle 用于序列化的两个模块json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进行转换 json模块提供了四个功能:dumps.dump.loads.loadpickle模块提供了四个功能:dumps.dump.loads.load json dumps把数据类型转换成字符串 dump把数据类型转换成字符串并存储在文件中  loads把字符串转换成数据类型  load把文件打开从字符串转换成数据类型 pi…
前言 本篇介绍的不是什么新知识,而是对前面讲解的一些知识的综合运用.众所周知,递归是解决复杂问题的一个很有效的方式,也是函数式语言的核心,在一些函数式语言中,是没有迭代与while这种概念的,因为此类的循环通通可以用递归来实现,这类语言的编译器都对递归的尾递归形式进行了优化,而Java的编译器并没有这样的优化,本篇就要完成这样一个对于尾递归的优化. 什么是尾递归 本篇将使用递归中最简单的阶乘计算来作为例子 递归实现 /** * 阶乘计算 -- 递归解决 * * @param number 当前阶…