Redis的汇总

 一 我们得知道为何会有Redis

简单的一句话就是: 现在是大数据时代,一般的数据库(Mysql等关系型数据库)无法进行分析处理了。

意识就是,使用数据库进行存 储数据,由于数据库持久化数据主要是面向磁盘的,但是磁盘的读/写比较慢。当遇到高并发下,往往需要瞬时的进行大量的读/写要求,这是极其容易让数据库宕机。

从而,就引进了一种新的技术NoSQL技术(非关系型数据库),其实也是一种简单的数据库,主要是基于内存的数据库,也提供一定的持久化功能。

而,Redis(KV键值对类型)和MongoDB(文档型数据库)是当前失眠上用的最为广泛的NoSQL。

NoSQL= not onli sql (不仅仅时SQL),泛指非关系型数据库的。

其实为何会有NoSQL的出现了,就是为了适应现在社会的 3V+3高

3V是指

  • 海量 Volume
  • 多样Variety
  • 实时Velocity

3高是指

  • 高并发
  • 高可扩 (随时水平拆分,机器不够了,可以扩展机器)
  • 高性能  (保证用户体验和产品的性能)

二 Redis的优点

1.运行速度快,因为是基于ANSIC语言编写的。

2.读写速度快,因为是基于内存读写的,而不是磁盘。   -------------- Redis一秒可以写8万次,读取11万

3数据结构较简单,因为只有6中数据类型


 三Redis能做什么

①内存存储、持久化,内存中是断电即失,所以持久化很重要(有两种,rdb,aof)

②效率高,用于告诉缓存

③发布订阅系统,也就是简单的消息队列系统

④地图信息分析

⑤计时器,计数器(浏览量)


四  Redis一般是基于Linux使用的

安装在了cd /usr/local/redis/bin

redies的启动(后端模式):

  先进入:cd /usr/local/redis/bin

  再启动: ./redis-server redis.conf

  查看是否启动:ps -aux | grep redis

启动客户端:

  先进入:cd /usr/local/redis/bin

  再启动:./redis-cli

 

redis的停止:

  方法1:在Linux命令行下输入 ./redis-cli shutdown

  方法2:在Redis客户端里面输入shutdown

性能测试

①100个并发连接 100000请求

  在linux开启redis后,输入

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

结果分析:

 


五  Redis的基本知识

  1. redis 默认有16个数据库,默认使用第0个数据库,可以使用select进行切换数据库: select 3 这样来切换到第几个数据库。
  2. 查看所有的key ----  key *
  3. 清除当前数据库直接输入 flushdb即可
  4. 清空所有数据库 flushAll
  5. redis是单线程的,是基于内存操作,cpu不是redis的性能瓶颈,redis的瓶颈是根据机器的内存和网络带宽
  6. 用一句话来概括Redis--- Redis是一种基于内存的,以键值存储来存储六种其数据类型的非关系数据库(NoSQL)的一种,并且提供了一定的持久化功能(rdb,aof),还支持一些事务,发布订阅消息模式,主从复制等功能

问:为何Redis是单线程的,运行速度还是很快呢?

这儿有两个误区:

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

  误区2:多线程(CPU会上下切换), 所以会比单线程快-❌

那为何Redis运行速度不慢呢,是因为Redis是将所有的数据全部存储在内存中的,所有说使用单线程去操作就是最快效率最高的,而多线程会cpu的切换,这是耗时操作!!!

总结:对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都在一个cpi上,在内存情况下,这是最优方案。


六 Redis 的五大数据类型

可能会有人好奇了,为何上面说是六大数据类型,这儿却是五大呢,因为前五个用的较多。

注意:这儿的数据类型指的是值的类型(Redis的数据是以键值形式存在的)

这儿列出六个数据类型:String(字符串), List(列表),set(集合), hash(哈希结构), zset(有序集合), tHyperLogLog(基数)

 

数据类型 数据类型存储的值 说明
String(字符串) 可以保存字符串,整数,浮点数

堆字符串进行操作,比如增加字符串或者求字串;

如果是整数或者浮点数,可以实现计算,比如自增等

List(列表) 它是一个链表,每一个节点都包含一个字符串

Redis支持从链表的两端插入或者弹出节点,或者通过偏移对它进行剪裁;

可以读取一个或多个节点;

根据条件来删除或查找节点等

set(集合) 是一个收集器,但是是无序的去重的,里面每一个元素都是一个字符串

可以新增,读取,删除单个元素;

检测一个元素是否在集合中;

计算它和其它集合的交集,并集和差集等;

随机从集合中读取元素

hash(哈希结构) 类似于Map,是一个键值对形式的无序不去重(只要键不同)列表

可以增删改查单个键值对,也可以

获取所有的键值对

zset(有序集合)

是一个有序集合,可以包含字符串,整数,浮点数,分值

各个值的排序是按照大小来决定的

可以增删改查元素,根据分值的范围或者成员来获得对于的元素

HyperLogLog(基数) 用来计算重复的值,以确定存储的数量 只提供基数的运算,不提供返回功能

 具体的Redis的六大类型的使用及其功能,请见另一个文章:

基于Redis的六大数据类型-----在Spring中如何使用

https://www.cnblogs.com/lanto/p/14255181.html

一个Java开发的菜鸟
原文地址:https://www.cnblogs.com/lanto/p/14254848.html