Redis 学习笔记

在这里插入图片描述

NoSQL

什么是NoSQL

NoSQL = not only sql

泛指非关系型数据库

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

为什么用NoSQL

用户的个人信息、地理位置、用户数据等爆发式增长,这些数据类型的存储不需要一个固定的格式,不需要多余的操作就可以横向扩展,就需要用NoSQL数据库。

特点

1、方便扩展,数据之间无关系

2、大数据量高性能

3、数据类型多样型,不需事先设计数据库

4、没有固定的查询语言

5、一致性

四大分类

KV键值对

Redis

文档型数据库

BSON格式,和JSON一样

MongoDB,一个基于分布式文件存储的数据库,主要用于处理大量的文档,是一个介于关系型数据库和非关系型数据库中间的产品,是非关系型数据库中功能最丰富、最像关系型数据库的产品

列存储

HBase

分布式文件系统

图形关系数据库

不是存图形,放的是关系,比如社交网络、广告推荐

Neo4j,InfoGrid

Redis

官网:https://redis.io/

文档:https://redis.io/docs/about/

安装

安装教程:https://www.runoob.com/redis/redis-install.html

Windows

下载地址:https://github.com/tporadowski/redis/releases

Linux

wget http://download.redis.io/releases/redis-7.2.4.tar.gz
或
#下载文件重命名为redis-7.2.4.tar.gz
wget https://github.com/redis/redis/archive/7.2.4.tar.gz

tar -zxvf redis-7.2.4.tar.gz
cd redis-7.2.4

#安装依赖环境
# yum install gcc-c++

#安装服务
#redis默认安装目录/usr/local/bin
make
# make install

#redis默认不是后台启动,需修改配置
vi redis.conf
	daemonize yes

用处

1、内存存储、持久化。内存中是断电即失的,所以持久化很必要(机制:rdb、aof)

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

3、发布订阅系统

4、地图信息分析

5、计时器、计数器(浏览量)

特性

1、多样的数据类型

2、持久化

3、集群

4、事务

命令/Redis Key

https://redis.io/commands/

#测试连接
ping

#存
set key value

#取
get key

#查看数据库所有key
keys *

#清空当前数据库
flushdb

#清空全部数据库
flushall

#判断key是否存在,返回1存在0不存在
exists key

#删除key
del key

#移动key到指定数据库,1表示目标数据库,返回1表示移动成功
move key 1

#设置过期时间,10s后过期
expire key 10

#展示key剩余过期时间,返回-2表示已过期
ttl key

#查看key是什么类型
type key

性能测试

redis-benchmark

redis-benchmark [option] [option value]
选项 描述 默认值
-h 指定服务器主机名 127.0.0.1
-p 指定服务器端口 6379
-s 指定服务器 socket
-c 指定并发连接数 50
-n 指定请求数 10000
-d 以字节的形式指定 SET/GET 值的数据大小 2
-k 1=keep alive 0=reconnect 1
-r SET/GET/INCR 使用随机 key, SADD 使用随机值
-P 通过管道传输 请求 1
-q 强制退出 redis。仅显示 query/sec 值
–csv 以 CSV 格式输出
-l(小写字母L) 生成循环,永久执行测试
-t 仅运行以逗号分隔的测试命令列表。
-I(大写字母i) Idle 模式。仅打开 N 个 idle 连接并等待。
redis-benchmark -h localhost -p 6379 -c 100 -n 100000

====== SET ======
  100000 requests completed in 1.46 seconds			#对10w个写入请求进行测试
  100 parallel clients								#100个并发客户端
  3 bytes payload									#每次写入3个字节
  keep alive: 1										#只有1台服务器处理请求,单机性能

89.61% <= 1 milliseconds
99.58% <= 2 milliseconds
99.70% <= 8 milliseconds
99.73% <= 9 milliseconds
99.77% <= 10 milliseconds
99.81% <= 11 milliseconds
99.86% <= 12 milliseconds
99.90% <= 13 milliseconds
99.90% <= 18 milliseconds
99.92% <= 19 milliseconds
99.95% <= 20 milliseconds
100.00% <= 21 milliseconds
100.00% <= 21 milliseconds							#所有请求在21ms处理完成
68540.09 requests per second						#每秒处理68540.09个请求

基础知识

Redis默认有16个数据库

redis.conf

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

默认使用第0个数据库,可以使用select进行切换

127.0.0.1:6379> select 3		#切换数据库
OK
127.0.0.1:6379[3]> dbsize		#查看数据库大小
(integer) 0

Redis是单线程的

Redis是基于内存操作,CPU不是Redis的性能瓶颈。Redis的瓶颈是根据机器的内存和网络带宽

Redis 不同版本之间采用的线程模型是不一样的,Redis4.0 版本之前使用的是单线程模型,4.0 版本之后增加了多线程的支持。

在4.0之前虽然Redis是单线程,也只是说它的网络 I/O 线程以及 Set 和 Get 操作是由一个线程完成的。持久化、集群同步还是使用其他线程来完成。

4.0 之后添加了多线程的支持,主要是体现在大数据的异步删除功能上,例如 unlink key、flushdb async、flushall async 等

核心:Redis将所有的数据全部放在内存中,所以说单线程去操作效率是最高的。多线程会产生CPU上下文切换,耗时。对于内存系统来说,没有上下文切换的效率是最高的。多次读写都是在一个CPU上

五大数据类型

String/字符串

使用场景:value可以是字符串、数字

  • 计数器
  • 统计多单位的数量
  • 粉丝数
  • 对象缓存存储

命令

https://redis.io/commands/?group=string

#追加字符串,返回字符串长度,key不存在则set
append key value

#获取字符串长度
strlen key

#截取字符串,[start,end]
getrange key start end

#替换指定位置开始的字符串
setrange key offset value

#########################

#i++
incr key

#i--
decr key

#i+10
incrby view 10

#i-5
decrby view 5

#########################
#设置过期时间,set with expire
setex key seconds value

#不存在再设置,set if not exist,常用在分布式锁中
setnx key value

#########################

#批量设置
mset key value

#批量获取
mget key

#批量,原子性操作,同时成功或失败
msetnx key value

#########################

#先get再set
getset key value

List/列表

基本的数据类型:列表

可以用作栈、队列、阻塞队列

实际上是一个链表 before node after,left、right都可以插入值

  • key不存在,则新建链表
  • key存在,则新增
  • 移除所有值,链表为空,则不存在
  • 在两边插入或修改,效率最高;中间元素,效率相对低

消息队列:lpush,rpop

栈:lpush,lpop

命令

https://redis.io/commands/?group=list

#存,插入到列表头部
lpush key value [value ...]
#存,插入到列表尾部
rpush key value [value ...]

#取
lrange key start stop

#移除列表第一个元素
lpop key
#移除列表最后一个元素
rpop key

#########################

#通过下标获取list中某一个值
lindex key index

#获取列表长度
llen key

#########################
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值