redis 缓存中间件 (缓存数据库)

redis的简介

nginx web服务器

php 转发动态请求

tomcat web页面 ,也可以转发动态请求

springboot 自带tomcat

所有的数据库都不支持高并发,一旦访问量激增,数据库很快就会崩溃。

redis 也是一个数据库,不单单是一个缓存工具。

redis 非关系型数据库 nosql not only sql 不仅仅是sql

键值对形式

key value

test1=test2

test1=10

数据的类型不是定义好的类型

redis :远程字典服务器

键值对

开源的,c语言写的nosql数据库。

redis基于内存运行,所有的数据不是保存在硬盘,而是内存。

持久化------------定期或者人为的把数据保存到硬盘。

redis的优点:

1、极高的读写速度,读速度可以达到110000次/s 写81000次/s

2、支持丰富的数据类型,键值对可以定义多种数据类型 string list hash set

3、支持数据持久化,内存当中的数据保存到磁盘

4、原子性,redis所有操作都是原子性

5、支持主从模式和高可用模式(哨兵模式),以及集群。

redis应用的场景

redis基于内存运行的数据库,缓存是最常应用的场景

排行榜

计数器

存储关系

实时分析记录,日志系统。

缓存的概念:

缓存是一种用于存储临时数据副本的技术。目的就是提高访问速度和性能。

缓存通常位于数据的访问路径上,数据的必经之路。可以在不直接访问原始数据的情况下,可以直接获取数据。

缓存的应用场景;

web缓存

数据库缓存

对象缓存(大数据应用)


redis的类型以及命令

进入redis的命令

redis-cli -h 192.168.124.60 -p 6379

-h 指定ip地址

-p 指定端口

-a 密码(没有密码可以不加)

redis-cli 命令行工具

redis-server start stop restart 控制redis

redis-benchmark 检测redis在本机的运行效率

redis-check-aof 修复aof持久化的文件

redis-check-rdb 修复rdb持久化的文件

redis-benchmark -h 192.168.124.60 -p 6379 -c100 -n100000

向redis的主机模拟发送100个并发链接,同时发送十万个请求测试
redis-benchmark -h 192.168.124.60 -p 6379 -q -d 100

模拟存储100个数据包的性能测试

redis数据类型

string类型:字符串

list:列表

hash类型 hash值里面有多个对象和多个值,对象不能重复,值可以重复

set无序集合 不能重复,没有权重

zset有序集合 不能重复,有权重

进入redis数据库中:

set +键名+键值:创建数据(也可以更改已经存在键值对的值)

get +键名: 获取数据

keys * :查看库中有多少个键值对

exists + 键名 :判断当前库中键值对是否存在,存在返回码1,不存在返回码0

type +键名:查看键值对的类型

del +键名:删除键值对

rename +键名 :更改键值对键的名字

config set requirepass +密码 :给redis数据库设置密码

auth +密码 :进入已经设置密码的redis数据库

string类型,是redis的基础类型,最大能够存储512MB的数据

数字 图片 等等 都是默认string

append +键名:该键如果没有将会添加,如果有键会进行追加值

strlen +键名:显示值的长度

incr +键名:让值自增1

decr+键名:让值自减1

incrby+键名:指定加的值

decrby +键名 :指定减的值

setex+键名+数字(时间)+值:创建生命周期

ttl+键名:查看生命周期

dbsize:查看当前库中的键值对

config get databases :查看有多少个库

select +数字(库的标记):切换库 (每个库都是独立的,彼此之间互不影响)

move +键名 +库的标记:把当前库的键值移到其他库

flushdb:清除当前库

flushall:清除所有库

mset +键名 +键名+键名 :设置多个键值对

mget+键名+键名+键名 :查看多个键值对

list列表类型

lpush +键名 +值 :创建列表

lrange +键名 0 -1:打印所有列的值

0是起始位置,-1是最后一个位置

lpushx +键名+内容:针对已经有的列表进行添加内容(从头部开始插入内容)

lpop +键名 +内容:针对已经有的列表进行移除内容(也是从头部开始移除内容)

llen +键名:查看列表里面的内容

lrem +键名 2 a :删除两个等于a的值

lindex +键名+索引:使用索引查看值

lset +键名+索引 +替换的值 :根据索引来进行替换

linsert +键名 +before +10 +9:在10的前面插入一个9

linsert +键名 +after +10 +11 :在10的后面插入一个11

rpush +键名+a b c d :从左往右来排序创建列表

hash类型 (散列)用来存储对象

特点:对象类别和id构成键名

hash存储的空间很小,占用的内存和持久化后的磁盘空间很少。

hset myhsah id 1:创建键值对

hget +键名+对象+键值:查看键值对

hansh是一个键值对,包含多个对象和对象的值

myhash就是一个hash值,一个hash值可以存4294967295个键值对

hlen myhash :查看对象值(对像的名称不能相同)

hdel myhash +对象:删除对象

hmget myhash:获取对象的值

hgetall:获取所有的信息

hkeys myhash:只获取对象

hvals myhash :只获取对象值

hsetnx myhash :只添加不存在的对象,添加存在的对象会报错

set集合 无序集合

元素类型只能是string,无序集合当中元素具有唯一性,不允许重复

应用场景:可以用set的数据来追踪唯一性的数据,如ip地址,或者根据客户的id区分不同客户购买的统一产品

sadd myset :创建无序集合

smembers myset :查看无序集合

scard myset :获取元素的数量

srandmember myset:随意获取一个值

spop myset:随意删除一个值

srem myset:指定删除

smove myset myset2 a :把集合1的a值移到集合2里面

zest有序集合

元素类型都是string 元素唯一,不能重复

每个元素都会关联一个doublel类型的分数score(表示权重),通过权重的大小来进行排序,权重可以相同。

zadd myzet 1 "one"

zadd myzet 2 "two"

zadd myzet 3 "three"

zrange myzet 0 -1 withscores :按照权重大小进行排序,不仅仅显示成员,还会显示权重分数

zrangebyscore myzet 2 5 min max :获取大于等于2小于等于5的权重

zrevrange myzet:按照索引的倒序进行排列


redis总结

Redis 是一个开源的、使用 C 语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库。

主要特点包括

  1. 高性能:Redis 数据存储在内存中,读写速度极快,能够支持每秒数十万次的读写操作。
    • 例如,在高并发的 Web 应用中,Redis 可以用于存储频繁访问的热点数据,以减少对后端数据库的压力,提高响应速度。
  2. 丰富的数据结构:支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等多种数据结构。
    • 比如,使用列表可以实现消息队列,使用有序集合可以实现排行榜功能。
  3. 支持持久化:可以将数据定期或在特定条件下保存到硬盘,保证数据的安全性和可靠性。
    • 常见的持久化方式有 RDB(快照)和 AOF(日志)。
  4. 支持主从复制:实现数据的备份和读写分离,提高系统的可用性和扩展性。
    • 主节点负责写操作,从节点负责读操作,分担了服务器的压力。
  5. 原子性操作:Redis 的操作都是原子性的,这确保了在并发环境下数据的一致性。

应用场景广泛

  1. 缓存:存储经常被访问的数据,减少对数据库的查询次数,提高性能。
  2. 计数器:如网站的访问量、点赞数等。
  3. 消息队列:利用列表数据结构实现简单的消息队列功能。
  4. 分布式锁:保证在分布式环境下资源的互斥访问。

总之,Redis 以其出色的性能、丰富的数据结构和强大的功能,在现代 Web 开发和大数据处理等领域发挥着重要作用。

相关推荐
xo198820112 分钟前
鸿蒙人脸识别
redis·华为·harmonyos
drebander7 分钟前
MySQL 查询优化案例分享
数据库·mysql
初晴~23 分钟前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
盖世英雄酱5813628 分钟前
InnoDB 的页分裂和页合并
数据库·后端
YashanDB2 小时前
【YashanDB知识库】XMLAGG方法的兼容
数据库·yashandb·崖山数据库
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍11基于XML的SQL注入(XML-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw·xml注入
风间琉璃""3 小时前
bugkctf 渗透测试1超详细版
数据库·web安全·网络安全·渗透测试·内网·安全工具
drebander3 小时前
SQL 实战-巧用 CASE WHEN 实现条件分组与统计
大数据·数据库·sql
IvorySQL3 小时前
IvorySQL 4.0 发布:全面支持 PostgreSQL 17
数据库·postgresql·开源数据库·国产数据库·ivorysql
18号房客3 小时前
高级sql技巧进阶教程
大数据·数据库·数据仓库·sql·mysql·时序数据库·数据库架构