1.redis是用来干嘛的?

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

通过上面redis官网的说明可以看出,redis是一个可以对内存数据结构进行存储的东西,它可以用作数据库、缓存和消息代理。它支持数据结构,如字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具有半径查询和流的地理空间索引。Redis具有内置复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel提供高可用性并使用Redis Cluster自动分区。
在项目中主要用来用作数据的缓存,将数据缓存在redis中,减轻对底层数据库的访问压力,获得更高的并发和更快的请求响应速度。

2.在项目中如何使用?

我们知道,项目中的数据一般情况下都是存在于数据库当中的,而且数据库的并发性能不是特别高,如果同时接收到大量的请求,数据库可能就会崩掉,而且sql查询会消耗一定的时间,增加请求的响应时间,所以不用缓存会出现系统无法支撑大量的并发情况,请求响应时间会变长等问题。
如果我们在第一次访问某个数据的时候,比如根据一个订单id获取订单的详细信息,将这条数据再返回的时候,也放到缓存里面去,那么下次就可以直接在缓存里面返回数据,不必去查询数据库,这样就可以减轻数据库的访问压力,而且缓存在内存中,势必要比直接访问数据库的速度要快很多,这样也就减小了请求的响应时间,redis在项目中就主要使用来解决数据的缓存问题。

3.为啥要使用缓存?

使用缓存的目的主要有两个:
(1)高性能 比如说有一个很复杂的sql数据查询,这个查询要耗费大量的时间,如果每次都直接取数据查询,那必然会对请求响应时间造成很大的影响,如果能在第一次查询完毕之后,将其直接保存在缓存当中,下次查询的时候,直接在缓存中拿走现成的数据,这样就会大大缩短请求的响应时间。

(2)高并发 我们知道数据库能承受的并发是有限的,那么在流量高峰期(比如,抢购、打折、秒杀等等),会有大量的请求进入我们的系统,比如查询某个商品的详情,如果我们没有缓冲,那么给次查询都要走数据库,假如我们的数据库每秒只能接受2000个请求,结果一秒钟进来了5000个请求,那么数据库就直接崩掉了,毫无高并发可言,而如果我们中间具有缓存服务,那么在第一个用户查询商品详情时(或者提前将放好)我们可以直接将商品的详情信息数据放到缓存里面,这样在后续用户查询时就可以直接走缓存,不走数据库,缓存是基于内存的,它的访问速度快,并发高;因此就可以提供一个高并发的支持。

4.用了缓存会出现什么问题?

主要常见的有下面三个问题
1)缓存与数据库双写不一致
2)缓存雪崩
3)缓存穿透
4)缓存并发竞争

关于redis的几件小事(一)redis的使用目的与问题相关推荐

  1. 关于redis的几件小事(三)redis的数据类型与使用场景

    1.string 这是最基本的类型了,就是普通的set和get,做简单的kv缓存. 2.hash 这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对 ...

  2. 关于Redis的几件事 | 高并发和高可用

    如果你用redis缓存技术的话,肯定要考虑如何用redis来加多台机器,保证redis是高并发的,还有就是如何让Redis保证自己不是挂掉以后就直接死掉了. redis高并发:主从架构,一主多从,一般 ...

  3. python redis密码登录_Python远程连接Redis

    import redis r=redis.Redis(host='192.168.56.102',port=6379,db=0,password='jinxfredis' ) r.set('name' ...

  4. Day267.预约系统的性能瓶颈、营销活动无缝切换秒杀活动、预约系统数据迁移方案、高流量下预约系统搭建熔断机制、预约系统redis集群主从哨兵架构 -Redis的高并发预约抢购系统

    一.预约系统的性能瓶颈 1.预约系统应对热门爆品时的缺陷 用户进行预约会涉及到两个维度的数据变更一个是用户信息,一个是SKU信息,如图↓所示: 正常来说这么搞一点问题没有,即便涉及到写数据库,但是每个 ...

  5. Redis概述下载与安装使用redis

    一.Redis概述 1.1 互联网架构的演变历程 第一阶段 [ 1] 数据访问量不大,简单的架构即可搞定! 第二阶段 [ 1] 数据访问量大,使用缓存技术来缓解数据库的压力. [ 2] 不同的业务访问 ...

  6. c++ 多线程 类成员函数_为什么我说C/C++程序员都要阅读Redis源码之:通过Redis学习事件驱动设计

    0. 为什么我说C/C++程序员都要阅读Redis源码 主要原因就是『简洁』.如果你用源码编译过Redis,你会发现十分轻快,一步到位.其他语言的开发者可能不会了解这种痛,作为C/C++程序员,如果你 ...

  7. Redis学习(含 Springboot 整合 Redis)

    Redis NoSQL (not only sql) 在现代的计算系统上每天网络上都会产生庞大的数据量. 这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理. 1970年 E.F.Codd ...

  8. Redis是单线程的,但Redis为什么这么快?

    近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是"二八定律".什么是"热数据和冷数据",复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存 ...

  9. redis源码分析(beta版本)-redis实现的概述逻辑

    redis概述 redis作为一个高性能的kv数据库,基于c语言实现,数据主要基于内存存放,所以查询效率较高,并且支持较多的数据类型有字符串.字典.列表与集合等数据结构.另外redis叶支持持久化的日 ...

最新文章

  1. OpenCV数字图像处理(5) 像素访问之添加椒盐实例 通道分离与合并
  2. 在stm32上使用Arduino IDE(神舟I号为例)
  3. 数据库不完全恢复 以及恢复到测试环境:
  4. 数据库开发 - 事务 死锁分析与解决
  5. 【Monkey】Monkey基础概念
  6. 如何设置CentOS 7开机自动获取IP地址详解
  7. Linux 内存管理之 SLUB分配器(2) :kmalloc_cache 结构
  8. OpenCV简单应用(一、摄像头拍照)
  9. php yar call,php yar扩展在laravel中的使用
  10. (附源码)音乐播放小程序 毕业设计 031306
  11. mindspore 1.3.0版本GPU环境下源码编译前的准备工作——依赖环境的安装
  12. h5清理微信浏览器网页缓存
  13. goahead实现文件下载功能实例详解
  14. nginx缓冲区关闭导致下载失败问题
  15. Excel-vba打开word文件读取内容处理并保存至word中
  16. 为什么物理诺奖颁给量子信息科学?——量子信息的过去、现在和未来
  17. Lunch Time
  18. 《白帽子讲WEB安全》学习笔记之第9章 认证与会话管理
  19. php 上传加水印图片格式,用PHP实现给上传的图片加水印的代码_PHP
  20. 爱思服务器shsh文件类型,使用爱思助手备份/上传SHSH

热门文章

  1. SAP HANA是什么
  2. 【SSH网上商城项目实战17】购物车基本功能的实现
  3. WiresShark 使用方法
  4. Ubuntu10下MySQL搭建Amoeba_读写分离
  5. 每周一荐: Google Dictionary,The Polar Express
  6. 如何动态修改windows下的host文件
  7. Git Manual / Git使用手册 / Git, GitLab, Git Bash, TortoiseGit (建议全文复制到Word文档中通过导航窗格查看)...
  8. Java数据库——CallableStatement接口
  9. linux系统的sudo apt-get命令大全
  10. centos6.3下yum安装redis