Redis 缓存中间件 缓存数据库
nginx web服务
PHP 转发动态请求
tomcat web页面也可以转发动态请求
springboot 自带tomcat
所有的数据库不支持高并发,一旦访问量激增,数据库很快就会崩溃。
Redis 非关系型数据库 nosql not only sql 不仅仅是sql
键值对形式:
key value
数据的类型不是定义好的类型。根据自定义,系统自动识别。
Redis简介:
Redis 远程字典服务器
键值对
开源的,C语言写的nosql数据库。
Redis基于内存运行,所有的数据不是保存到硬盘,而是内存。
持久化: 定期或者人为的把数据保存到硬盘上
安装步骤:
yum -y install gcc gcc-c++ make
tar -xf redis-5.0.7.tar.gz
cd redis-5.0.7/
ls
make -j 4
make PREFIX=/usr/local/redis install
cd utils/
./install_server.sh
/usr/local/redis/bin/redis-server
#4次回车,输入安装目录/usr/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/
vim /etc/redis/6379.conf
#70行加入自己本机的地址
/etc/init.d/redis_6379 restart
/etc/init.d/redis_6379 status
netstat -antp | grep 6379
Redis的优点:
1、极高的读写速度,读速度可以达到11万次/秒,写入:81000次/秒
2、支持丰富的数据类型,键值对可以定义多种数据类型 string list hash set
3、支持数据持久化,内存当中的数据保存到磁盘
4、原子性,Redis所有操作都是原子性。要么都成功,要么都失败。
5、支持主从模式和高可用模式(哨兵模式),以及集群。
Redis基于内存运行的数据库,缓存是最常应用场景。
排行榜
计数器
存储关系
实时分析记录,日志系统。
缓存的概念:
缓存是一种用于存储临时数据副本的技术。
目的:提高访问速度和性能。
缓存通常位于数据的访问路径上,数据的必经之路。可以在不直接访问原始数据的情况下,可以之间获取数据。
缓存应用场景:
1、web登录缓存
2、数据库缓存
3、对象缓存(大数据应用)
redis-cli -h 192.168.11.146 -p 6379
-h 指定地址
-p 指定端口 (必须加端口)
-a 指定密码 (没密码可以不加)
redis-cli 命令行工具
redis server start stop restart 控制redis
redis-benchmark 检测redis在本机的运行效率
redis-check-aof 修复AOF持久化的文件
redis-check-rbd 修复RDB持久化的文件
redis-benchmark -h 192.168.11.147 -p 6379 -c 100 -n 100000
向redis的主机模拟发送100个并发连接,同时发送100000个请求测试
redis-benchmark -h 192.168.11.146 -p 6379 -q -d 100
模拟存储100个数据包的性能测试
vim /etc/redis/6379.conf #主要配置文件
70 监听端口配置
89 保护模式
93 端口配置
172 日志路径 /var/log/redis_6379.log
/etc/init.d/redis_6379 restart #控制Redis状态
进入redis
[root@myslq4 utils]# redis-cli -h 192.168.11.147 -p 6379 -a 123456
CONFIG SET requirepass "" #无法重启故障解决
redis 数据库常用命令
1、基础数据类型:
string 字符串
list 列表型
hash 散列,键值对
set 集合,不重复的无序集合
zset 有序集合
创建键值对
set test1 10
获取数据
get test1
"10"
查看是否存在
(存在返回1,不存在返回0)
EXISTS test1
查看存在的键值对
keys *
查看类型
type test1
删除键值对
del test4
del test1 test2
修改键值对名称
RENAME test1 FBB
设置登录密码
CONFIG SET requirepass 123456
auth 123456
CONFIG GET requirepass
redis-cli -h 192.168.11.146 -p 6379 -a 123456 #登录
1、string类型
string是redis的基础类型 ,最大能存储512MB的数据。
数字,图片等等都是默认string类型。
追加
192.168.11.146:6379> append FBB niu
(integer) 3
STRLEN FBB 查看长度
(integer) 12
自增、自减
192.168.11.146:6379> incrby myket 10 自增 10
192.168.11.146:6379> decrby mykey 5 自减 5
设置生命周期
192.168.11.146:6379> SETEX mykey 15 hello 创建一个生命周期为15秒 key:mykey value:hello
移值到其他库
192.168.11.146:6379> get mykey
"10"
192.168.11.146:6379> move mykey 1 转移到目标库
(integer) 0
创建多个键值对
192.168.11.146:6379> mset test1 1 test2 2 test3 3 #创建多个键值对
OK
192.168.11.146:6379> keys *
1) "test3"
2) "test2"
3) "test1"
192.168.11.146:6379> mget test1 test2 test3
1) "1"
2) "2"
3) "3"
2、list类型
创建列表
192.168.11.146:6379> LPUSH mykey a b c d 创建列表
192.168.11.146:6379> LRANGE mykey 0 -1 查看列表全部信息
192.168.11.144:6379> LRANGE mykey 2 -1
1) "b"
2) "a"
192.168.11.144:6379> LRANGE mykey 1 2
1) "c"
2) "b"
插入数据
192.168.11.144:6379> LPUSHx mykey e #插入新的(只能插入已存在的列表)从头插
(integer) 5
删除
192.168.11.144:6379> LPOP mykey 从头删除
指定删除
192.168.11.144:6379> lrem mykey 2 a #删除两个a的值
查看元素数量
192.168.11.144:6379> llen mykey
(integer) 4
查看指定位置元素
192.168.11.144:6379> LPUSH mykey a b c d e f #创建表(倒序排序)
(integer) 6
192.168.11.144:6379> LINDEX mykey 4 #查看指定值的信息
"b"
192.168.11.144:6379> LSET mykey 5 10 #替换指定的值
192.168.11.144:6379> LINSERT mykey before 10 9 在10前加一个数值9
(integer) 7
192.168.11.144:6379> LINSERT mykey after 10 9 在10后面加一个数值9
(integer) 7
192.168.11.144:6379> RPUSH mykey1 a b c d #正序排序
3、hash 散列
用来存储对象,对象类别和ID构成一个键名
hash存储的空间很小,占用的内存和持久化后的磁盘空间都很少
hash是一个键值对,包含多个对象和对象的值。
myhash就是一个hash值,一个hash值可以存42亿个键值对。
创建
192.168.11.144:6379> hset myhash id1 1 id1 2
添加hash值
192.168.11.144:6379> hsetnx myhash id3 3 (key不能和表中的重复)
(integer) 1
查看hash
192.168.11.144:6379> hset myhash qq 1 qq2 2 qq3 3
(integer) 3
192.168.11.144:6379> HGET myhash qq
"1"
192.168.11.144:6379> hmget myhash id1 id2 #查看多个值
192.168.11.144:6379> hgetall myhash #查看所有的key对应的值
192.168.11.144:6379> hkeys myhash #只看key
192.168.11.144:6379> hvals myhash #只看对象的值(value)
删除hash
192.168.11.144:6379> hdel myhash qq
4、set 无序集合
无序集合中元素类型只能是string,无序集合当中元素具有唯一性,不允许重复
**应用场景:**可以使用set数据,追踪唯一性的数据,比如ip地址,或者根据客户的id区分不同客户购买的同一产品。
创建
192.168.11.144:6379> sadd myset a b b c
(integer) 3
查看集合元素
192.168.11.144:6379> smembers myset
1) "b"
2) "a"
3) "c"
添加值
192.168.11.144:6379> sadd myset a d e
(integer) 2
获取集合元素数量
192.168.11.144:6379> scard myset
(integer) 5
随机获取
192.168.11.144:6379> srandmember myset
删除
192.168.11.144:6379> spop myset 随机删除
"b"
192.168.11.144:6379> srem myset a 指定删除一个
(integer) 1
192.168.11.144:6379> srem myset e c 指定删除多个
(integer) 2
不同集合元素移动
192.168.11.144:6379> smove myset myset2 d
移出集合 移入集合 需要移出的值
(integer) 1
5、 zset 有序集合
元素类型都是string类型,元素唯一,不能重复
每个元素都会关联一个doublel类型的分数score(表示权重),通过权重的大小进行排序,权重可以相同。
创建
192.168.11.144:6379> zadd myzet 1 "one"
(integer) 1
192.168.11.144:6379> zadd myzet 2 "two"
(integer) 1
192.168.11.144:6379> zadd myzet 3 "three" 4 "four"
(integer) 2
排序
192.168.11.144:6379> zrange myzet 0 -1 withscores #按照权重大小进行排序
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "four"
8) "4"
查看
192.168.11.144:6379> zrange myzet 0 -1 #集合内对象
1) "one"
2) "two"
3) "three"
4) "four"
192.168.11.144:6379> zrangebyscore myzet 2 5 获取权重在2--5之间的值 2<=x<=5
1) "two"
2) "three"
3) "five"
4) "four"
删除
192.168.11.144:6379> zrem myzet "one"
(integer) 1