参考:

https://juejin.im/post/5b4dd82ee51d451925629622?utm_source=gold_browser_extension

https://www.cnblogs.com/dongyongjing/archive/2007/06/29/800448.html

http://www.runoob.com/redis/redis-intro.html

https://www.cnblogs.com/firejava/p/6256788.html

一 缓存

概述

缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。

(提速和优化)

原理

将数据写入/读取速度更快的存储(设备);

将数据缓存到离应用最近的位置;

将数据缓存到离用户最近的位置。

 

分类:

从部署角度:

CDN缓存:(主要解决静态文件)

反向代理缓存

分布式Cache :主要指缓存用户经常访问数据的缓存,数据源为数据库,常用Memcache,Redis

本地应用缓存

从缓存位置:

客户端缓存:浏览器缓存

网关或代理服务器缓存

服务端缓存:页面缓存

数据缓存(ehcache、memcache)

数据库缓存

 

媒介:

常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等;

缓存的内容:文件,数据,对象;

缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式)

二 Redis(REmote Dlctionary Server)

概述:

内存高速缓存数据库;

可基于内存亦可持久化;

数据模型:key-value;

value(值)可以是String,Hash,List, 集合(sets) 和 有序集合(sorted sets)

特点:

支持持久化(RDB和AOF);

高性能;

丰富的数据类型;

所有操作都是原子性(要么成功执行要么完全不执行);

应用场景:

缓存(数据查询、短连接、新闻内容、商品内容等等);

分布式集群架构中的session分离;

聊天室的在线好友列表;

任务队列;

应用排行榜;

网站访问统计;

数据过期处理(可以精确到毫秒)

下载安装

(这个就不说了)

数据类型:

类型

简介

特性

场景

String

二进制安全

可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M

---

Hash

键值对集合,即编程语言中的Map类型

适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)

存储、读取、修改用户属性

List

链表(双向链表)

增删快,提供了操作某一段元素的API

1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列

Set

哈希表实现,元素不重复

1,添加、删除,查找的复杂度都是O(1) 2,为集合提供了求交集、并集、差集等操作

1,共同好友 2,利用唯一性,统计访问网站的所有独立ip 3,好用推荐时,根据tag求交集,大于某个阈值就可以推荐

Sorted Set

将Set中的元素增加一个权重参数score,元素按score有序排列

数据插入集合时,已经进行天然排序

1,排行榜 2,带权重的消息队列

1.String

是redis最基本的类型,可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512MB。

常用命令:set,get,decr,incr,mget。

例:-> SET key "value"

-> GET key   ------value

2.Hash

是一个键值对集合,适合用于存储对象。

常用命令:hget,hset,hgetall 。

例:-> HMSET myhash field1 "value1" field2 "value2"

-> HGET myhash field1    ------value1

-> HGET myhash field2    ------value2

ps:HGET 设置了两个field=>对,HGET 获取field对应的value。

每个 hash 可以存储 2^32 -1 键值对。

3. List

列表是简单的字符串列表,按照插入顺序排序。可以在头部或者尾部添加元素。

常用命令:lpush,rpush,lpop,rpop,lrange。

4.Set

集合是string类型的无序集合。

集合是通过Hash表实现的,所以添加,删除,查找的复杂度都是O(1)。

常用命令:sadd,spop,smembers,sunion。

5.Sorted set

有序集合(提供score)

常用命令:zadd、zrange、zrem、zcard。

其他

持久化的两种方式:(RDB和AOF)

RDB 在redis.conf配置文件里配置持久化触发器;

AOF指的是redis没增加一条记录都会保存到持久化文件中(保存的是这条记录的生成命令)

三 补充概念:

关系型数据库:Mysql、Oracle、SqlServer等,数据存储在部署数据库得机器得硬盘中。

(高并发处理、负载均衡和分布式数据库?)

优势:复杂查询

劣势:慢

非关系型数据库(Nosql)

高并发、高可用、高可扩展,大数据存储等一系列问题的数据库解决方案,存储于硬盘之中。

分类:

1.键值存储数据库:Redis ...

典型应用:内容缓存,主要用于处理大量数据的高访问负载。

数据模型:一系列键值对

优势:快速查询

劣势:存储的数据缺少结构化

...

...

...

(其他数据库就不介绍了,可以参考下面这个网址)

https://www.cnblogs.com/bldly1989/p/6721758.html

初步了解Redis的更多相关文章

  1. 初步使用redis

    1.导入jar包 2.新建类: public class JedisAdapter { private static final Logger logger = LoggerFactory.getLo ...

  2. 07.初步学习redis哨兵机制

    [ ] 一.哨兵(sentinal)的介绍 哨兵是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个re ...

  3. C# Redis实战

    转自  :http://blog.csdn.net/qiujialongjjj/article/details/16945569 一.初步准备 Redis 是一个开源的使用ANSI C 语言编写.支持 ...

  4. redis入门指南学习笔记

    redis的常见命令 set key hello get key incr num get num set foo lorem incr foo hset car price 500 hset car ...

  5. 基于redis的延迟消息队列设计

    需求背景 用户下订单成功之后隔20分钟给用户发送上门服务通知短信 订单完成一个小时之后通知用户对上门服务进行评价 业务执行失败之后隔10分钟重试一次 类似的场景比较多 简单的处理方式就是使用定时任务 ...

  6. redis 安装实战(10步完成安装)

    1 下载zip :https://redis.io/download   ---->redis-4.0.6 2 上传:利用wcp 上传到/usr/local/soft/ 3 解压:tar -zv ...

  7. C# Redis实战(一)

    一.初步准备 Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库.Redis的出现,很大程度补偿了memcached这类key/va ...

  8. 剑指架构师系列-Redis集群部署

    初步搭建Redis集群 克隆已经安装Redis的虚拟机,我们使用这两个虚拟机中的Redis来搭建集群. master:192.168.2.129 端口:7001 slave:192.168.2.132 ...

  9. Redis 5.0.3集群部署

    参考文章 https://blog.csdn.net/yyTomson/article/details/85783753 https://www.cnblogs.com/zy-303/p/102731 ...

随机推荐

  1. 二维码APP后台开发记录

    先是搭建环境,我们采用spring4.2.1+hibernate5.0.1进行搭建,从官网上下载框架必用jar包. 在MyEclipse里,创建web项目,创建lib包,将相关jar包放入,别忘了my ...

  2. struts2注解返回json

    Struts2使用注解方式返回Json数据 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Geek_Alex/article/details/788 ...

  3. Python中使用gflags

    安装命令pip install python-gflags 使用示例: import gflags FLAGS = gflags.FLAGS gflags.DEFINE_string('name', ...

  4. 在vue中使用Element的message组件

    在vue中使用Element的message组件 在vue文件中使用 this.$message({ message: "提示信息", type: "success&qu ...

  5. js简单图片切换

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  6. bzoj1029题解

    [解题思路] 贪心,先按结束时间排序,从左到右扫描过去,如果当前建筑可以修复则入大根堆,否则,若其修复时间比堆顶小则弹出堆顶并入堆,处理完堆后则更新总时间.复杂度O(nlog2n). [参考代码] # ...

  7. 线性dp——hdu6578经典dp

    多校第一场第一题,这种类型的dp之前做过两题,状态转移一般是从当前状态往后推的 很经典的dp,不过很卡时间 /* 定义 dp[t][i][j][k]代表填完前 t 个位置后,{0, 1, 2, 3} ...

  8. NOIp2018集训test-9-2(pm)

    其实这套题我爆0了,T1define 写成ddefine编译错误 T2有两个变量爆int 但是我看zwh不在悄悄地改了,我心里还是十分愧疚(没有)的.主要是林巨已经虐我125了要是再虐我200分我大概 ...

  9. NOIp2018集训test-9-1(pm)

    欢乐%你赛,大家都AK了. 1. 小澳的方阵 吸取了前几天的教训,我一往复杂的什么二维树状数组上想就立刻打住阻止自己,就可以发现它是超级大水题了.记录每一行每一列最后一次的修改,对每个格子看它所在行和 ...

  10. 原生js实现文件下载并设置请求头header

    原生js实现文件下载并设置请求头header const token="自行定义";//如果有 /** * 向指定路径发送下载请求 * @param{String} url 请求路 ...