Redis初学

Nosql概述

为什么要用Nosql

1.单机mysql的年代!

APP ---->DAL---->Mysql

90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够!

那个时候,更多的去使用静态网页Html~服务器根本没有太大的压力

网站的瓶颈是什么?

1.数据量太大,一个机器放不下

2数据的索引(B+Tree),一个机器内存也放不下

3.访问量(读写混合),一个服务器承受不了~

2 Memcached(缓存)+MySQL+垂直拆分

发展过程:优化数据结构和索引-->文件缓存(io)-->Memcached(当时最热门的技术!)

中国人,竞争对手并不是人才,而是那些图安稳的人

 

3.分库分表+水平拆分+mysql集群

技术和业务的发展的同时,对人的要求也越来越高了!

本质:数据库(读,写)

早些年MyISAM:表锁,十分影响效率!高并发下会出现严重的锁问题

转战Innodb :行锁

慢慢的就开始使用分表来解决写的压力!MYSQL在哪个年代推出了表分区!这个并没有多少公司使用!

mysql的集群,很好满足那个年代的所有需求

 

4.如今最近的年代

2010--2020十年之间,世界已经发生了翻天覆地的变化.(定位,也是一种数据,音乐,热榜!)

Mysql等关系型数据库就不够用了!数据量很多,变化很快~!

mysql有的使用它来村粗一些比较大的文件,博客,图片!数据库表很大,效率就低了!如果有一种数据来专门处理这种数据,Mysql压力就变得十分小(研究如何处理这些问题!)大数据的IO压力下,表几乎没法更大!

目前一个基本的互联网项目!

 

为什么要用NoSQL !

用户的个人信息,社交网络,地理位置.用户自己产生的数据,用户日志等等爆发式增长!

这时候我们就需要使用NoSQL数据库的,Nosql可以很好的处理以上的情况!

什么是NOSQL

NOSQL=Not Only SQl

关系型数据库:表格,行,列

泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付Web2.0时代!尤其是超大规模的高并发的社区!暴露出来很多难以克服的问题,NOSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的,而且是我们当下必须要掌握的一个技术!

很多的数据类型用户的个人信息,社交网络,地理位置.这些数据类型的存储不需要一个固定的格式!不需要多月的操作就可以横向扩展的!Map<String,Object>使用键值对来控制!

NoSQl特点

1.方便扩展(数据之间没有关系,很好扩展!)

2.大数据提高性能(Redis 一秒写8万次,读取11万,NOSQL的缓存记录级,是一种细粒度的缓存,性能会比较高!)

3.数据类型是多样型的!(不需要事先设计数据库!随取随用!如果是数据量十分大的表,很多人就无法设计了!)

4.传统RDBMS和NOSQL(安装数据)

传统的RDBMS

--结构化组织

--SQL

--数据和关系都存在单独的表中

--操作操作,数据定义语言

--严格的一至性

--基础的事务

--...

NOSQL1

--不仅仅是数据

--没有固定的查询语言

--键值对存储,列存储,文档存储,图形数据库(社交关系)

--最终一致性,

--CAP定理和BASE(异地多活)

--高性能,高可用,高可扩

--....

了解:3V+3高

大数据时代的3v:主要是描述问题的

1.海量Volume

2.多样Variety

3.实时Velocity

大数据时代的3高:主要对程序的要求

1.高并发

2.高可扩(随时水平拆分,搭建集群)

3.高性能(保证用户体验和性能!)

真正在公司的实践中:NoSQL+RDBMS一起使用才是最强的,阿里巴巴的架构演进!

 

 

 

 

大型互联网应用问题:

数据类型太多了!

数据源繁多,经常重构!

数据要改造,大面积改造?

 

 

NoSQL的四大分类

KV键值对:

新浪:Redis

美团:Redis+Tair

阿里.百度:Redis+memecache

文档型数据库(bson格式和json一样):

MongoDB(一般必须要掌握)

MongoDB 是一个基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档!

MongoDB 是一个介于关系型数据库和非关系型数据中中间的产品!MongoDB 是非关系型数据库中功能最丰富,最像关系型数据库的!

ConthDB

列存储数据库

1.HBase

2.分布式文件系统

图关系数据库

1.他不是存图片的,是存储关系的()

 

Redis入门

概念:

redis(Remote Dictionary Server),即远程字典服务

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

 

Redis能干嘛?

1.内存存储.持久化,内存中是断电即失,所以说持久化很重要(rdb,aof)

2.效率高,可以用于高速缓存

3.发布订阅系统

4.地图信息分析

5.计时器.计数器(游览量!)

6.........

特性

1.多样的数据类型

2.持久化

3.集群

4.事务

......

Redis推荐都是在Linux上搭建的.

windows安装

 

5.使用redis客户单位来接连redis

 

window下使用确实简单,但是redis推荐在linux下使用.

Linux安装

下载安装包!

2.解压redis安装包

tar -zxvf redis-6.2.2.tar.gz

进入解压后的文件

 

安装gcc-c++

yum install gcc-c++

make

 

查看gcc版本

 

 

再次使用make install

 

redis的默认安装路径 /usr/local/bin

 

 

7.redis默认不是后台启动的,修改配置文件!

vim redis.conf

改为后台启动

 

8.启动redis服务

redis-server config/redis.conf

查看连接

 

10.查看redis的命令是否开启

 

11.如何关闭redis服务? shutdown

 

12,再次查看进程

 

测试性能

redis-benchmark 是一个压力测试工具

官方自带的性能测试工具

redis-benchmark 命令参数!

 

#测试:100个并发连接 100000请求

redis-benchmark -h localhost -p 6379 -c 100 -n 1000000

 

基础的知识

redis有16个数据库 默认使用的是0个 可以使用select进行切换数据库!

 

 

 

 

Redis是单线程的!

明白Redis是很快的,官方表示,Redis是基于内存操作的,cpu不是Redis性能的瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了!所以就使用单线程了!

Redis 是C语言写的,官方提供的数据为 100000+ 的QPS,完全不比同样是使用key-vale的Memecache差!

Redis 为什么单线程还这么快?

1.误区1:高性能的服务器一定是多线程的?

2.误区2:多线程(CPU上下文会切换!)一定比单线程效率高!

先去CPU>内存>硬盘的速度要有所了解!

核心:redis是将所有的数据全部放在内存中,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!!!),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!

 

 

 

String(字符串)

90%的java程序员只会redis的一个string类型

 

 

 

替换:

 

setex (set with expire) # 设置过期时间

setnx(set if not exist) # 不存在在设置(在分布式锁中常常使用)

 

mset

mget

 

对象

set user:1{name:zhangsan,age:3} # 设置一个user:1 对象 值为 json字符来保存一个对象!

 

getset #先get然后在set

 

 

String 类似的使用场景:value除了是我们的字符串还可以是我们的数字!

1.计数器

2.统计多单位的数量

3.粉丝数

4.对象缓存存储

List

基本的数据类型,列表

 

移除

Lpop

Rpop

 

 

 最后:大家想要速成的话,可以选择去B站看---狂神说java的视频,个人感觉还是讲的不错的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值