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 数据库。
主要特点包括:
- 高性能:Redis 数据存储在内存中,读写速度极快,能够支持每秒数十万次的读写操作。
- 例如,在高并发的 Web 应用中,Redis 可以用于存储频繁访问的热点数据,以减少对后端数据库的压力,提高响应速度。
- 丰富的数据结构:支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等多种数据结构。
- 比如,使用列表可以实现消息队列,使用有序集合可以实现排行榜功能。
- 支持持久化:可以将数据定期或在特定条件下保存到硬盘,保证数据的安全性和可靠性。
- 常见的持久化方式有 RDB(快照)和 AOF(日志)。
- 支持主从复制:实现数据的备份和读写分离,提高系统的可用性和扩展性。
- 主节点负责写操作,从节点负责读操作,分担了服务器的压力。
- 原子性操作:Redis 的操作都是原子性的,这确保了在并发环境下数据的一致性。
应用场景广泛:
- 缓存:存储经常被访问的数据,减少对数据库的查询次数,提高性能。
- 计数器:如网站的访问量、点赞数等。
- 消息队列:利用列表数据结构实现简单的消息队列功能。
- 分布式锁:保证在分布式环境下资源的互斥访问。
总之,Redis 以其出色的性能、丰富的数据结构和强大的功能,在现代 Web 开发和大数据处理等领域发挥着重要作用。