Redis

PHP网站开发—网站架构优化性能概念

℡╲_俬逩灬. 提交于 2021-01-25 17:34:38
最开始的网站架构 最初业务量不大,访问量小,此时的架构,应用程序、数据库、文件都部署在一台服务器上,有些甚至仅仅是租用主机空间 1. 应用、数据、文件分离 将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。 2. 利用缓存改善网站性能 大部分网站访问都遵循28原则,即80%的访问请求,最终落在20%的数据上,所以我们可以对热点数据进行缓存,减少热点数据的访问路径,提高用户体验。缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理。 2.1 本地缓存 本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。 2.2 分布式缓存 分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Memcached、Redis。 2.3 反向代理 部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有缓存数据才会继续访问应用服务器获取,这样做减少了获取数据的成本。 2.4 CDN 假设我们的服务器都部署在杭州的机房,对于浙江的用户来说访问是较快的,而对于北京的用户访问是较慢的

redis操作数据-hashes

六月ゝ 毕业季﹏ 提交于 2021-01-25 07:47:55
为什么存储成hash会省内存? 之所以存成hash省内存,原因是新建一个hash对象开始是用zipmap(small hash)来存储的.这个zipmap其实并不是hash table,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销.尽管zipmap的添加,删除,查找都是o(n),但是由于一般对象field数量都不太多.所以使用zipmap也是很快的,也就是说添加删除平均还是o(1).如果field活着value的大小超出一定限制后,redis会在内部自动将zipmap替换成正常的hash实现.这个限制可以在配置文件中指定 hash-max-zipmap-entries 64 #配置字段最多64个 hash-max-zipmap-value 512 #配置value最大为512字节 数据操作命令 1.hset设置key和value值,如果不存在key则先创建 127.0.0.1:6379> hset myhash name tonva (integer) 1 myhash表示的是设置hash的名字 2.hsetnx设置key和value,如果field已经存在返回0,如果不存在返回1 127.0.0.1:6379> hsetnx myhash name "tonva" (integer) 0 3.hmset,同时设置hash的多个key

一款开源 SpringBoot+Vue 管理系统

荒凉一梦 提交于 2021-01-25 07:41:02
嗨喽 !Java后端编程的各位小伙伴们,由于公众号做了乱序推送改版,为了保证公众号的推文能够第一时间及时送达到大家手上,大家记得将公众号 加星标置顶 ,公众号每天会送上Java技术干货推文 ! 上篇推文: 开源 SpringBoot 商城系统,真香! 刚学习Java的同学,如果想要快速获得项目经验,最好的途径就是学习前辈的开源项目。编程君在大学也是去GitHub上搜索那些关注比较多的Java项目下来研究和学习,慢慢的懂得了一整套的开发所需要掌握的知识点和技能 。所以,后续公众号会慢慢跟大家推荐一些Java开源项目给大家,一起学习成长~ 项目简介 微人事 :这是一款 前后端分离的人力资源管理系统,项目采用 SpringBoot+Vue 开发,项目加入常见的企业级应用所涉及到的技术点,例如 Redis、RabbitMQ 等 。界面虽然不是很好看,但是还是很适合新手学习! 项目框架 后端技术栈 Spring Boot、Spring Security、MyBatis、MySQL、Redis、RabbitMQ、Spring Cache、WebSocket 。 前端技术栈 Vue、ElementUI、axios、vue-router、Vuex、WebSocket、vue-cli4 。 今天给大家介绍的这款Java开源项目,在GitHub已经标星19K了,非常不错。如果大家有兴趣的话

.net环境下跨进程、高频率读写数据

老子叫甜甜 提交于 2021-01-24 19:15:54
一、需求背景 1、最近项目要求高频次地读写数据,数据量也不是很大,多表总共加起来在百万条上下。 单表最大的也在25万左右,历史数据表因为不涉及所以不用考虑, 难点在于这个规模的热点数据,变化非常频繁。 数据来源于一些检测设备的采集数据,一些大表,有可能在极短时间内(如几秒钟)可能大部分都会变化, 而且主程序也有一些后台服务需要不断轮询、读写某种类型的设备,所以要求信息交互时间尽可能短。 2、之前的解决方案是把所有热点数据,统一加载到共享内存里边,到也能够支撑的住( 毫秒级的 ),但是由于系统架构升级,之前的程序(20年前的)不能兼容。 只能重新写一个,最先想到的是用redis,当时把所有API重写完成后,测试发现效率不行, 是的,你没有看错,redis也是有使用范围的。 3、 redis读写非常快,但是对于大批量读写操作我觉得支持不够, 虽然redis支持批量读写,但是效率还是不够快, 对于字符串(string)类型的批量读写,我测试过; 效率比较好的在每批次200 至 250条之间,处理20万条数据耗时5秒左右, (PC机,8G,4核) 而对于有序集合(sorted set)类型,批量写的操作用起来非常别扭, 而且没有修改API(如有其他方式请指教) ,我测试过,效率没string类型那么高 其他类型不适合我的业务场景,就没考虑使用了 4、所以项目组最后决定还是用回共享内存

Redis modeling reservations

淺唱寂寞╮ 提交于 2021-01-24 12:54:56
问题 I'm working on a personal project to learn about Redis. I'm trying to use it as the database for managing a hotel. I'm trying to wrap my head around how to manage reservations. The problem is, there are multiple rooms, and each room can have multiple reservations, storing date-from and date-to. I'm just unsure how i could model this, to efficiently be able to find an empty room for a given given period. Currently, I've been thinking of storing reservations, for each seperate room, in sorted

Redis modeling reservations

穿精又带淫゛_ 提交于 2021-01-24 12:54:13
问题 I'm working on a personal project to learn about Redis. I'm trying to use it as the database for managing a hotel. I'm trying to wrap my head around how to manage reservations. The problem is, there are multiple rooms, and each room can have multiple reservations, storing date-from and date-to. I'm just unsure how i could model this, to efficiently be able to find an empty room for a given given period. Currently, I've been thinking of storing reservations, for each seperate room, in sorted

小D课堂

懵懂的女人 提交于 2021-01-24 12:46:41
笔记 4、Redis工具类封装讲解和实战 简介:高效开发方式 Redis工具类封装讲解和实战 1、常用客户端 https://redisdesktop.com/download 2、封装redis工具类并操作 开始 主要讲开发中的技巧 Redis 桌面管理工具 RedisDesktopManager 2019.2 发布 https://www.oschina.net/news/108331/redis-desktop-manager-2019-2-released?p=2 redis默认有16个库 我们默认操作的是第一个库。这是我们刚才放进去的值 封装redis工具类并操作 JsonUtils工具类,对象要转换为字符串。 主要是通过Jsckson这个包去操作的 封装RedisClient类 注入StringRedisTemplate,添加set方法 在家一个获取的方法 controller里面使用 启动应用进行测试 调用add方法 获取值 对象放到redis 可以的命名规则,用冒号分隔开。用冒号分开后,通过工具查看redis里面会有一层层的文件夹格式 再加一个获取值的方法 启动应用 每个冒号前面形成一个文件夹 查找效率会比 所有的key都放在一起更快 取值 单元测试 直接运行测试方法 来源: oschina 链接: https://my.oschina.net/u/4386338

数据库春风得意,一文看尽花落何方

血红的双手。 提交于 2021-01-24 11:34:35
2020年,新冠疫情既带给我们伤痛和教训,也带给我们很多启迪和机会。 毫无疑问,疫情加速了企业与整个社会的数字化,数据作为一种资产,逐渐成为至关重要的生产要素。连带数字化科技普遍看涨,包括微软、苹果、亚马逊、谷歌、英伟达等美国7家大科技公司市值一年增长了3.4万亿美元。 管理数据资产离不开数据库,甚至可以说每个应用都需要数据库。数据库也已经从传统的关系型数据库,发展出十几种新的类型,如关系、非关系(文档/键值/宽列/图)、地理空间、时间序列及其他数据模型等,满足用户越来越多的应用需求。 一篇文章写不完数据库的未来,但是循着2020年以及过往数据库的发展脉络,中国软件网想抓住2021年甚至更远未来数据库发展的几个方向,与我们的用户、读者一起赢。 01 向云转移趋势加快 数据库向云转移的大趋势势不可挡,在2021年的表现就更加强劲。 第一,超过一半的数据库应用将被部署或迁移到云平台。 数据库本地部署还是上云托管,以前对大多数用户而言,都是一个大问题,这么关键的数据资产放到云上,是否会安全呢?云能保证数据库实时运营吗? 事实证明,云上的数据库托管不但安全,而且用户应用的成本大大降低。 2020年12月2日, AWS就宣称使用AWS数据库迁移服务(DMS)将30多万个数据库迁移到了其云平台上。 Amazon DMS早在2016年推出,使亚马逊的客户可以将传统的关系数据库

分布式锁的性质jedis

戏子无情 提交于 2021-01-24 09:43:41
可靠性。首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。 代码实现 组件依赖 首先我们要通过Maven引入Jedis开源组件,在pom.xml文件加入下面的代码: redis.clients jedis 2.9.0 加锁代码 正确姿势 Talk is cheap, show me the code。先展示代码,再带大家慢慢解释为什么这样实现: public class RedisTool { private static final String LOCK_SUCCESS = "OK"; private static final String SET_IF_NOT_EXIST = "NX"; private static final String SET_WITH_EXPIRE_TIME = "PX"; /** * 尝试获取分布式锁 * @param jedis Redis客户端 * @param lockKey 锁 * @param requestId 请求标识

如何保持Redis和MySQL数据一致

若如初见. 提交于 2021-01-24 06:56:20
原文:https://blog.csdn.net/thousa_ho/article/details/78900563 1. MySQL持久化数据,Redis只读数据   redis在启动之后,从数据库加载数据。   读请求:不要求强一致性的读请求,走redis,要求强一致性的直接从mysql读取   写请求:数据首先都写到数据库,之后更新redis(先写redis再写mysql,如果写入失败事务回滚会造成redis中存在脏数据) 2.MySQL和Redis处理不同的数据类型   MySQL处理实时性数据,例如金融数据、交易数据。   Redis处理实时性要求不高的数据,例如网站最热贴排行榜,好友列表等。   在并发不高的情况下,读操作优先读取redis,不存在的话就去访问MySQL,并把读到的数据写回Redis中;写操作的话,直接写MySQL,成功后再写入Redis(可以在MySQL端定义CRUD触发器,在触发CRUD操作后写数据到Redis,也可以在Redis端解析binlog,再做相应的操作)。   在并发高的情况下,读操作和上面一样,写操作是异步写,写入Redis后直接返回,然后定期写入MySQL。 几个例子:   1.当更新数据时,如更新某商品的库存,当前商品的库存是100,现在要更新为99,先更新数据库更改成99,然后删除缓存,发现删除缓存失败了