
redis、memcache、mongodb
do better myself
学无止境、只有不断的学习,你才不会被社会淘汰!加油吧!少年!
展开
-
redis5种数据类型使用场景
原创 2021-11-26 13:19:39 · 603 阅读 · 0 评论 -
redis hash 集合使用
//hash使用 $key='vv'; $num = Cache::store('redis')->handler()->hset($key,'2021-01-14',1.6); $a = Cache::store('redis')->handler()->hgetall($key); print_r($a);return 555; //集合使用 $num =...原创 2021-01-22 17:13:01 · 298 阅读 · 0 评论 -
redis 有序集合使用
//有序集合使用Cache::store('redis')->handler()->ZADD('hxyg_btc_price',0.17,'2021-01-20');Cache::store('redis')->handler()->ZADD('hxyg_btc_price',0.15,'2021-01-19');Cache::store('redis')->handler()->ZADD('hxyg_btc_price',0.14,'2021-01-18');.原创 2021-01-22 16:31:09 · 358 阅读 · 0 评论 -
redis底层 调用的实现机制
redis的源码底层是使用socket套接字,浏览器发起一个请求的时候会调用操作系统内核里面的epoll,epoll的目的是负责对sockek套接字的管理,同时监听有输入流的话,会通知redis的服务,去操作写入数据操作...原创 2020-04-07 11:17:27 · 201 阅读 · 0 评论 -
redis的各种类型的使用场景
1. hash 类型 存储购物车,key是用户的id,value是对应的商品的id和商品数量 mset pro1:1,pro2:3 ,llen获取购物车的数量2.list 实现队列,lpush,rpop(先进先出), lpush,lpop(先进后出)3.集合,抽奖实现, key是活动的id,value是抽奖的用户的id,spop 2 随机出来2个中奖的用户且剔除里面重复的元素,或者是给用户...原创 2020-04-07 11:13:31 · 136 阅读 · 0 评论 -
linux 如何启动redis
https://blog.youkuaiyun.com/qq_37503483/article前提:安装好redis第一步:转到redis安装目录(/usr/local/redis)安装目录与bin同级的redis.conf文件中没有信息第二步:cd bin之前安装的时候复制过来的redis.conf文件第三步:编辑redis.conf...转载 2020-04-01 14:07:12 · 351 阅读 · 0 评论 -
Redis实现分布式锁 php
一、分布式锁的作用: redis写入时不带锁定功能,为防止多个进程同时进行一个操作,出现意想不到的结果,so...对缓存进行插入更新操作时自定义加锁功能。二、Redis的NX后缀命令 Redis有一系列的命令,其特点是以NX结尾,NX的意思可以理解为 NOT EXISTS(不存在),SETNX命令 (SET IF NOT EXISTS) 可以理解为如果不存在则插入,...转载 2020-03-17 17:38:09 · 185 阅读 · 0 评论 -
Redis 与 Memcached 的比较如下图
原创 2019-04-03 09:55:52 · 189 阅读 · 0 评论 -
PHP实现多服务器SESSION共享
为什么要session共享?现在稍微大一点的网站基本上都有好几个子域名,比如www.feiniu.com, search.feiniu.com, member.feiniu.com,这些网站如果需要共用用户登录信息,那么就需要做到session共享,当然前提是有相同的主域名。PHP的session原理?客户端访问php页面,执行session_start,生成session_i...原创 2019-06-21 17:30:08 · 264 阅读 · 0 评论 -
分布式锁之Redis实现
一、分布式锁分布式锁,是一种思想,它的实现方式有很多。比如,我们将沙滩当做分布式锁的组件,那么它看起来应该是这样的:加锁在沙滩上踩一脚,留下自己的脚印,就对应了加锁操作。其他进程或者线程,看到沙滩上已经有脚印,证明锁已被别人持有,则等待。解锁把脚印从沙滩上抹去,就是解锁的过程。锁超时为了避免死锁,我们可以设置一阵风,在单位时间后刮起,将脚印自动抹去。分布式锁的实现有很多,...转载 2019-02-22 16:01:49 · 218 阅读 · 0 评论 -
php swoole 使用消息队列的例子
https://blog.youkuaiyun.com/shooke/article/details/72851759 https://blog.youkuaiyun.com/star_hacker/article/details/79557504原创 2018-08-25 11:17:38 · 3249 阅读 · 0 评论 -
redis 单线程架构
Redis是一种基于键值对(key-value)的NoSQL数据库,包含多种数据结构。官网上给出的数字是读写性能可以达到10万/秒,可见速度之快。 做个简单的例子,同时开启5个redis客户端,同时执行下面的命令:<span style="color:#000000"><code>incr <span style="color:#4f4f4f"&...转载 2018-08-15 11:16:44 · 204 阅读 · 0 评论 -
rabbitmq和kafka的对比
由于Kafka采用解耦的设计思想,并非原始的发布订阅,生产者负责产生消息,直接推送给消费者。而是在中间加入持久化层——broker,生产者把数据存放在broker中,消费者从broker中取数据。这样就带来了几个好处:1 生产者的负载与消费者的负载解耦2 消费者按照自己的能力fetch数据3 消费者可以自定义消费的数量另外,由于broker采用了主题topic-->分区的思想,使得某个分区内...转载 2018-06-08 11:07:47 · 4142 阅读 · 2 评论 -
Redis学习笔记 — Sentinel系统
Redis学习笔记 — Sentinel系统一、Sentinel系统的工作内容 Sentinel系统是由一个或多个sentinel实例组成的Sentinel系统。sentinel实施Redis的高可用性解决方案。这个系统主要做的工作是监视多个主服务器以及从服务器的工作状态,当某个主服务器下线时,sentinel系统会进行故障转移操作,自动的将下线服务器的从服务器升级为新的主服...转载 2018-06-07 10:55:17 · 182 阅读 · 0 评论 -
10个常见的Redis面试"刁难"问题
Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行各种刁难。作为一名在互联网技术行业打击过成百上千名【请允许我夸张一下】的资深技术面试官,看过了无数落寞的身影失望的离开,略感愧疚,故献上此文,希望各位读者以后面试势如破竹,永无失败!Redis有哪些数据结构?字符串String、字典Hash、列表List、集合Set、有序集合S...转载 2019-05-08 18:40:29 · 174 阅读 · 0 评论 -
redis管道
所谓的redis的管道就是redis针对批处理数据的一种技术。我们正常的操作是: 请求--网络IO--redis响应--网络IO--答复通过管道pipLined后相当于跟redis服务端建立了一个通道,不是每个访问的数据都走上边的正常流程,而是将一批数据塞到管道中一次性发送给redis服务端,这样的好处是极大的减少了网络IO的耗时,从而提高了效率。管道在关闭之前或者说在数据未完全访问完...原创 2019-05-07 18:49:25 · 405 阅读 · 0 评论 -
redis的数据类型之-有序集合
sort set和set类型一样,也是string类型元素的集合,也没有重复的元素,不同的是sort set每个元素都会关联一个权,通过权值可以有序的获取集合中的元素sort set的操作:sort set类型适合场景: 获得排名最前的5个热门帖子信息(通过帖子回复量标识热门帖子),用sql的做法:select * from messageorder by ba...转载 2019-06-20 09:53:27 · 281 阅读 · 0 评论 -
nginx统计访问量最高的ip
cat /home/wwwlogs/qaapi.nickfee.com.access.log| grep "20/Jun/2019" | awk '{print $1}'| sort | uniq -c | sort -k 1 -n -r| head -5 |awk '{print $2}' >output1.txt转载 2019-06-21 18:38:45 · 700 阅读 · 0 评论 -
Redis-List和MQ的区别
容错机制容错机制需要保证出错后信息还会被重新插入队列,在redis中需要手动trycatch处理。在其他消息队列中都有提供容错机制,比如消息取出变为挂起状态,一定时间内没有删除就会重新插入队列。消息延迟消息队列中有延迟的概念,取出后判断是否在延迟时间内,如果在则重新插入队列,达到延迟效果。推送redis的推送方式注重快速而不保证推送成功部分MQ可以做到虽然有延迟,但是保证推...转载 2019-07-15 17:42:17 · 810 阅读 · 0 评论 -
redis过期键的删除策略
如果一个键是过期的,那它到了过期时间之后是不是马上就从内存中被被删除呢??如果不是,那过期后到底什么时候被删除呢??其实有三种不同的删除策略:(1):立即删除。在设置键的过期时间时,创建一个回调事件,当过期时间达到时,由时间处理器自动执行键的删除操作。(2):惰性删除。键过期了就过期了,不管。每次从dict字典中按key取值时,先检查此key是否已经过期,如果过期了就删除它,并返回nil,...转载 2019-07-12 10:07:34 · 168 阅读 · 0 评论 -
IO多路复用之select、poll、epoll详解
多路I/O复用模型是利用 select、poll、epoll可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉。当有一个或多个流有 I/O事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程...转载 2019-08-07 14:25:11 · 865 阅读 · 0 评论 -
linux 下启动redis 客户端操作的步骤
1. 查找redis 安装所在的目录 whereis redis /usr/local/redis进入到 /usr/local/redis/bin 目录下输入命令 ./redis-cli 后就可以进入了原创 2019-08-23 15:10:58 · 2692 阅读 · 0 评论 -
分布式缓存--序列4--缓存更新策略/缓存穿透/缓存雪崩
缓存更新策略被动更新设置key过期的时间,让其自动失效。主动更新更新DB的时候,同时更新缓存。一般业务都是主动更新和被动更新结合使用。先更新DB,后更新缓存对于主动更新来说,存在一个问题:你是先更新缓存,后更新DB;还是反过来? 下面分别分析以下2个场景,假设有2个线程,t1, t2: (1) 先更新缓存,后更新DB。假设有如下的执行系列:t1更新缓存; t2读缓存,因为t1把缓存更新了,导致t2...转载 2016-12-22 09:16:15 · 1488 阅读 · 1 评论 -
Redis 的操作为什么是的原子性的详解
原子性原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。Redis操作原子性的原因Redis的操作之所以是原子性的,是因为Redis是单线程的。由于对操作系统相关的知识不是很...转载 2018-05-31 10:35:05 · 51513 阅读 · 6 评论 -
使用 Redis 连接池的原因
总结:Redis 是基于内存的数据库,使用之前需要建立连接,建立断开连接需要消耗大量的时间。使用连接池可以实现在客户端建立多个连接,需要的时候从连接池拿过来,用完了再放回去。这样就节省了建立、断开连接所消耗的时间。Jedis resource = jedisPool.getResource();1这段代码返回的是一个 Redis 实例多个连接中的一个。转载内容:为什么使用连接池?首先Redis也是...转载 2018-06-21 15:40:04 · 848 阅读 · 0 评论 -
Redis集群实现的原理
Redis 集群中内置了 16384个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。...原创 2018-05-24 10:22:03 · 501 阅读 · 0 评论 -
Redis为什么这么快?
今天我在一个技术群里提出一个问题:Redis为什么这么快,Redis的那些特性能够支持了它的高并发?之前的我,也只是知道Redis是内存数据库,所以读取速度快;IO使用的是多路复用,使用一个线程来轮询描述符,减少了线程上下文的切换,将数据库的开、关、读、写都转化成了时间,所以IO时也有加速。虽然理解上就是这些(当然还有一些数据结构的原因,全程使用hash结构,加速读写) 突然转载 2016-11-21 16:50:43 · 864 阅读 · 0 评论 -
Redis常见7种使用场景(PHP实战)
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。本篇文章,主要介绍利用PHP使用Redis,主要的应用场景。简单字符串缓存实战$redis->connect('127.0.0.1', 6379);$strCacheKey = 'Test_bihu';//SET 应用$arrCac转载 2017-05-08 16:00:00 · 4009 阅读 · 0 评论 -
详细讲解redis数据结构(内存模型)以及常用命令
Redis数据类型与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多, 常用的数据类型主要有五种:、List、Hash、Set和Sorted Set。Redis数据类型内存结构分析Redis内部使用一个redisObject对象来表示所有的key和value。 redisObject主要的信息包括数据类型(type)、编转载 2017-01-16 09:32:39 · 580 阅读 · 0 评论 -
Memcached分布式布置方案--一致性Hash分布机制及其改进
memcache使用key-value的形式存储和访问数据,在内存中维护一张巨大的HashTable,使得对数据查询的时间复杂度降低到O(1),保证了对数据的高性能访问。内存的空间总是有限的,当内存没有更多的空间来存储新的数据时,memcache就会使用LRU(LeastRecently Used)算法,将最近不常访问的数据淘汰掉,以腾出空间来存放新的数据。一致性哈希方式最关键的区别就是,对节点和...转载 2016-12-22 10:28:30 · 303 阅读 · 0 评论 -
redis、memache 乐观锁和进程
Memcached乐观锁Memcached提供了2个命令 gets + cas。gets取出数据的时候,同时返回版本号;修改之后, cas回去的时候,会比较该版本号和服务器上最新的版本号。如果不等,则cas失败。Redis乐观锁Redis提供了watch命令,如下所示: watch key1 //修改数据之前,执行watch,意思监听此key mu原创 2016-12-21 17:37:18 · 494 阅读 · 0 评论 -
windows版本的redis下载地址
windows版本的redis下载地址 : https://github.com/MSOpenTech/redis/releases更改redis的配置需要修改redis.conf文件,以下是它一些主要的配置注释:#是否作为守护进程运行daemonize no#Redis 默认监听端口port 6379#客户端闲置多少秒后,断开连接timeout 300#日原创 2016-12-21 13:48:10 · 2650 阅读 · 0 评论 -
memcache内存分配原理和分享
曾经我也看过很多剖析memcached内部机制的文章,有一点收获,但是看过之后又忘记了,而且没有什么深刻的概念,但是最近我遇到一个问题,这个问题迫使我重新来认识memcache,下面我阐述一下我遇到的问题 问题:我有几千万的数据,这些数据会经常被用到,目前来看,它必须要放到memcached中,以保证访问速度,但是我的memcached中数据经常会 有丢失,而业务需求是memcache转载 2016-11-21 15:09:37 · 367 阅读 · 0 评论 -
memcache的原理总结
1 Memcache是什么Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自治理这些HashTable。 为什么会转载 2016-11-21 14:56:01 · 342 阅读 · 0 评论 -
使用beanstalk搭建队列服务
一. 应用场景在web后端服务的交互中很多场景上游和下游处理的时间不匹配,比如上游处理的快,下游处理的慢。这时候就需要队列服务来缓冲服务以达到更高的吞吐率(扛过高峰) 延迟处理请求,比如:延迟添加用户奖励,延迟写入mysql等等。逻辑可以只关注主流程即返回。二. 我们现在的解决方案-beanstalk队列服务项目介绍http://kr.github.io/beanstalk转载 2016-11-17 10:18:02 · 2695 阅读 · 0 评论 -
解决Redis持久化之大数据服务暂停问题
以前做过实验,但是不及这个文章详细。转载记录。Redis持久化是有两种方式:RDB和AOF对这两种方式的官方文档的翻译请看:http://latteye.com/2011/11/redis-persistence.htmlRDB就是快照存储,比如“每1个小时对redis进行快照存储”。那么,save这个参数就应该设置save 3600 1转载 2017-09-18 18:03:50 · 1189 阅读 · 0 评论 -
redis参数优化
vim /etc/sysctl.confvm.overcommit_memory = 1 #最好不要设置为0,Linux的OOM机制在内存不足的情况下,会自动选择性Kill进程点数过高的进程,0会中招。sysctl vm.overcommit_memory=10:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存转载 2018-01-11 17:00:20 · 411 阅读 · 0 评论 -
为什么MongoDB采用B树索引,而Mysql用B+树做索引
先从数据结构的角度来答。题主应该知道B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据。从Mysql(Inoodb)的角度来看,B+树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上。那...转载 2018-05-16 16:57:56 · 2254 阅读 · 1 评论 -
MongoDB体系结构
MongoDB是一个可移植的数据库,它在流行的每一个平台上都可以使用,即所谓的跨平台性,在不同的操作系统上虽然略有差别,但是从整体架构上来看,MongoDB在不同的平台上是一样的,如数据逻辑结构和数据存储等等。一个运行着的MongoDB数据库就可以看成是一个MongoDB Server,该Server由实例和数据库组成,在一般情况下,一个MongoDB Server机器上包含一个实例或者多个与之对...转载 2018-05-15 17:20:32 · 336 阅读 · 0 评论 -
redis,mongodb的使用场景及区别
什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象主要特点 MongoDB...转载 2018-05-15 16:44:58 · 2629 阅读 · 0 评论