中间件
Redis:缓存插件:缓存数据库、减轻数据库的压力
nginx:web服务
php:转发动态请求
tomcat:web页面,也可以实现转发动态请求
springboot:自导tomcat
Redis:也是一个数据库 不单单是一个缓存工具。
Redis:非关系型数据库 nosql not only sql 不仅仅是sql
非关系型数据库特点
键值对形式
key value
test1=test2
test1=10
数据的类型不是定义好的类型。
test1=10 string
Redis简介
Redis:远程字典服务器
键值对
开源的,c语言写的nosql数据库
Redis基于内存运行,所有的数据都不是保存在银盘的,而是内存。
持久化----------------定期或者人为把数据保存到硬盘。
Redis的优点
1、极高的读写速度,读速度可以达到110000秒/s 写81000次/s
2、支持丰富的数据类型,键值可以定义多种数据类型string list hash set
3、支持数据持久化,内存当中的数据保存到磁盘
4、原子性,Redis所有操作都是原子性
5、支持主从模式和高可用模式(哨兵模式),以及集群
缓存雪崩
缓存击穿
Redis基于内存运行的数据库,缓存是最常应用的场景
排行榜
计数器
存储关系
实时分析记录,日志系统。
缓存的概念
缓存是一种用于存储临时数据副本的技术。目的就是提高访问速度和性能。
缓存通常位于数据的访问路径上,数据的必经之路。可以再不直接访问原始数据的情况下,可以直接获取数据。
缓存的应用场景
web缓存
数据库缓存
对象缓存(大数据应用)
安装Redis
安装 设置编译环境
yum install -y gcc gcc- c++ make
tar -xf redis-5.0.7.tar.gz
cd redis-5.0.7/src
make -j 4
/usr/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/
修改配置文件
添加本机ip地址
重启服务
查看
进入Redis
-h 指定IP地址
-p:指定端口
-a:密码(没有密码可以不加)
redis-cli 命令行工具
redis-server start stop restart 控制Redis
redis-benchmark 检测Redis在本机的运行效率
redis -check-aof 修复aof持久化的文件
redis -check-rdb 修复rdb持久化的文件
向Redis模拟发送100个并发连接,同时发送十万个请求
向Redis模拟储存100个数据包的测试
Redis数据库常用的命令
基础数据类型
string:字符串
list:列表
hash:散列
set:集合 不重复的无序集合
zet:集合,有序集合。
string数据类型
set 创建数据
get 获取数据
创建数据
查看库里所有数据
判断是否存在
set 修改数值
查看键的类型
删除
删除多个用空格隔开
对键进行重命名
rename
添加密码
config set requirepass 密码
密码登录两种方式
string数据类型
string 类型 是redis的基础类型最大能够存储512MB数据,
数字、图片等等都是string类型
keys *
append 追加
递增递减
20.0.0.14:6379> incr mykey
(integer) 22
20.0.0.14:6379> get mykey
"22"
20.0.0.14:6379> decr mykey
(integer) 21
20.0.0.14:6379> get mykey
"21"
指定加多少
指定减多少
20.0.0.14:6379> incrby mykey 10
(integer) 30
20.0.0.14:6379> get mykey
"30"
20.0.0.14:6379> decrby mykey 20
(integer) 10
设置生命周期
setex 键名 存活时间 键值
20.0.0.14:6379> setex test 10 10
OK
20.0.0.14:6379> ttl test
(integer) 8
20.0.0.14:6379> ttl test
(integer) 7
20.0.0.14:6379> ttl test
(integer) 6
20.0.0.14:6379> ttl test
(integer) 6
20.0.0.14:6379> ttl test
(integer) 3
20.0.0.14:6379> ttl test
(integer) 3
20.0.0.14:6379> ttl test
(integer) 2
20.0.0.14:6379> ttl test
(integer) 2
20.0.0.14:6379> ttl test
(integer) 1
20.0.0.14:6379> ttl test
(integer) 0
20.0.0.14:6379> ttl test
(integer) -2
20.0.0.14:6379> ttl test
(integer) -2
20.0.0.14:6379> ttl test
(integer) -2
库 每个库之间都是独立的,彼此之间互不影响
移动键的位置
move mykey
20.0.0.14:6379> move test 1
(integer) 1
20.0.0.14:6379> select 1
OK
20.0.0.14:6379[1]> keys *
1) "test"
20.0.0.14:6379[1]> mget test
1) "10"
清空
清空当前库:flushdb
清除所有库:flushall
一次性创建多个键值对
20.0.0.14:6379> mset test1 1 test2 2 test3 3
OK
20.0.0.14:6379> keys *
1) "test1"
2) "test3"
3) "test2"
4) "mykey"
查看多个
20.0.0.14:6379> mget test1 test2 test3
1) "1"
2) "2"
3) "3"
list列表类型
list 打印列表所有元素
-1 是列表最后一位
20.0.0.14:6379> LPUSH mykey a b c d
(integer) 4
20.0.0.14:6379> lrange mykey 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
添加元素 从头添加
20.0.0.14:6379> lpushx mykey e
(integer) 5
20.0.0.14:6379> lrange mykey 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
移除数据
20.0.0.14:6379> lrange mykey 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
20.0.0.14:6379> lpop mykey
"e"
20.0.0.14:6379> lpop mykey
"d"
20.0.0.14:6379> lpop mykey
"c"
20.0.0.14:6379> lpop mykey
"b"
20.0.0.14:6379> lrange mykey 0 -1
1) "a"
删除数据
20.0.0.14:6379> lrem mykey 1 c
(integer) 0
创建索引位置
更换索引
20.0.0.14:6379> lindex mykey 4
"b"
20.0.0.14:6379> lrange mykey 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
20.0.0.14:6379> lindex mykey 5
"a"
20.0.0.14:6379> lset mykey 5 10
OK
在指定的值的前后进行替换
在前替换
20.0.0.14:6379> linsert mykey before 10 9
(integer) 7
20.0.0.14:6379> lrange mykey 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "9"
7) "10"
在后面插入
20.0.0.14:6379> lrange mykey 0 -1
1) "f"
2) "e"
3) "8"
4) "d"
5) "c"
6) "b"
7) "9"
8) "10"
查找索引值
20.0.0.14:6379> lrange mykey1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
20.0.0.14:6379> lindex mykey1 0
"a"
20.0.0.14:6379> lindex mykey1 3
"d"
20.0.0.14:6379> lindex mykey1 4
"e"
Hash类型
hash类型 散列 用来存储对象,对象的类别和ID构成键名
hash存储的空间很小,占用的内存和持久化后的磁盘空间都很少
hash是一个键值对,包含多个对象和对象的值
myhash就是一个hash值,一个hash值可以存4294967295个键值对
20.0.0.14:6379> hset myhash id 3
(integer) 1
20.0.0.14:6379> hset myhash id1 1 id2 2 id3 3
(integer) 3
20.0.0.14:6379> hget myhash id1
"1"
20.0.0.14:6379> hget myhash id2
"2"
20.0.0.14:6379> hget myhash id3
"3"
查看多少个hash
20.0.0.14:6379> hlen myhash
(integer) 4
如何删除 删除多个用空格隔开
20.0.0.14:6379> hdel myhash id
(integer) 1
20.0.0.14:6379> hdel myhash id1 id2 id3
(integer) 3
20.0.0.14:6379> hlen myhash
(integer) 0
20.0.0.14:6379>
查看保存的内容
20.0.0.14:6379> hmget myhash id1 id2
1) "1"
2) "2"
20.0.0.14:6379> hgetall myhash
1) "id1"
2) "1"
3) "id2"
4) "2"
20.0.0.14:6379> hkeys myhash
1) "id1"
2) "id2"
20.0.0.14:6379> hvals myhash
1) "1"
2) "2"
添加
set类型
无序集合:元素类型只能是string,无序集合当中元素具有唯一性,不允许重复,应用场景,set的数据用来追踪唯一性的数据,比方说IP地址
或者根据不同客户的id区分不同客户购买的同一商品
设置查看
sadd myset a b b c
20.0.0.14:6379> sadd myset a b b c
(integer) 3
20.0.0.14:6379> SMEMBERS myset
1) "c"
2) "b"
3) "a"
添加 相同数值不在再次添加
20.0.0.14:6379> sadd myset a d e
(integer) 2
20.0.0.14:6379> smembers myset
1) "d"
2) "c"
3) "b"
4) "a"
5) "e"
查看元素
另一种随意查看一个值
随意删除一个 和指定删除
移动值
先创建一个
从源合集到目的合集
有序合集:Sorted set zset 有序合集
元素类型都是string 元素唯一,不能重复,每个元素都会关联一个doublel类型的分数score(表示权重),通过权重的大小进行排序,权重可以相同
按照权重大小来进行排序
权重可以相同 成员不能相同
获取权重范围的值
索引倒序排列
string 基本类型
list:列表
hash:一个hash可以存储多个对象和对象值,对象名不可重复
set:无序集合,没有重复,没有权重
zset:有序集合,没有重复,按照权重进行排序。string