文章目录
1、Redis是什么
缓存的请求逻辑
什么是Redis
Redis是一个no sql的数据库
Redis是一个基于键值对的存储系统 key value Map结构
no sql 的数据库(非关系型的数据库)
非关系型数据库-----------------关系型的数据库
关系:表与表之间的关系 对象和表之间的映射关系
非关系型数据库:不存在表与表之间的关系 也不存在 对象和表之间的关系
在Redis中简单的说 啥都没有 所有数据 都是基于键值对来进行存储的
2、redis的工作场景
- 做数据缓存(缓存)
- 购物车数据
- 评论的存储
- 抽奖
- 商城中评分
- 最热的商品
- 秒杀
- 好友关注
- 实现session共享
- 分布式锁
3、Redis的特点
- Redis是基于内存的,速度快
- 如果出现了断电 那么内存数据会发生丢失
- Redis的使用场景 一定是对数据的要求不是严格的
- Redis的所有存储结构中都是以Key—Value的形式进行存储的
- 提供了五种不同的数据类型来满足不同的开发场景
- String Hash List Set Sorted Set
- Redis中还提供了3中持久化模式来保证数据的持久化(将内存的数据放到硬盘)
- Redis还提供多种淘汰策略来满足缓存的数据一定是最新的
- Redis中还提供了大量的命令集、来完成我们开发中的操作
- Redis从提供了三种架构(主从、哨兵、集群)
4、Redis五种数据结构
5、Redis的安装
不想去官网下载的,可以使用这个,版本:redis-5.0.7
链接:https://pan.baidu.com/s/1_htvybjGOUuZRiMY61FyZQ
提取码:slkx
这两个都是一样的
https://download.csdn.net/download/fan521dan/12232402
1、将redis的安装文件复制到 /usr/local目录下去
cp redis-5.0.7.tar.gz /usr/local/
2、下载Redis运行的时候所需要的运行环境
yum install gcc
3、解压上面的Redis文件
tar -zxvf redis-5.0.7.tar.gz
4、进入Redis的根目录进行编译
cd redis-5.0.7
make
5、进入到src目录下进行安装
cd /usr/local/redis-5.0.7/src
make install
6、创建运行的命令的目录和配置文件的目录
mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc
7、移动配置文件到 /usr/local/redis/etc目录下
cp redis.conf /usr/local/redis/etc/
8、将运行命令放到 /usr/local/redis/bin目录下去
cp redis-server /usr/local/redis/bin/
cp redis-cli /usr/local/redis/bin/
redis-server :Redis的服务端的启动程序
redis-cli:Redis的客户端的启动程序
客户端启动之后 就可以对数据库的数据进行操作
cd /usr/local/redis/bin
./redis-server /usr/local/redis/etc/redis.conf
netstat -apn | grep 6379 :查看6379的端口使用情况
6、Redis的基本命令
在Redis难道有多个数据库?
在redis中默认是16个数据库、怎么在这些数据库之间 进行切换呢?
这个数据库的下标 0----15
默认选中的是 第0号数据库 默认数据存储也是存储到第0号数据库的
1、key
keys * :查看当前数据库中存在的键
select 数据库的下标 选中某一个数据库
del key :删除某一条数据
exists key :判定某一个key是否存在
token需要使用
所有缓存的地方都需要使用这个命令
expire key 过期时间 :这个命令可以用在前后分离项目中token设置的过期时间 过期之后 key会被删除
ttl key :查看这个key剩余的时间
场景:这个主要就是key如果是需要续期的话 就可以使用这个命令
返回-2 这个key不存在
返回-1 表示没有过期时间永远都有效
move key 数据库索引 :将一个key--value移动到另外一个数据库中去
场景:一般情况下做数据库的迁移(基本用的很少)
randomkey 随机返回一个key
2、String
2.1、赋值取值
set key value :在数据库中设置一个键值对的数据
get key :获取某一个值
场景:存储对象的数据
set user:1:userName xiaobobo
set user:1:password 123
set user:1:count 300
get user:1:userName 只取用户名
2.2、同时设置多个值
mset k v k1 v1 :同时设置多个键值对
mget k1 k2 :通古斯获取多个键值对的数据
场景:存储一个对象的数据
mset user:1:userName xiaobobo user:1:password 123 user:1:count 100
mget user:1:userName user:1:password user:1:count
2.3、自增自减
incr key ;自增
decr key :自减
incrby key 步长 :一次性增加多少
decrby key 步长 :一次性减去多少
场景:评论量,转发量,点赞,在线人数
怎么使用?
set weibo-readcount-{文章id} 0
incr weibo-readcount-{文章id}
2.4、setnx
setnx key value:表示的是如果这个key不存在的话 那么就设置这个键值对
场景:主要是用在分布式的锁上面
3、Hash
赋值语法:
HSET KEY FIELD VALUE // 为指定的KEY,设定FILD/VALUE
HMSET KEY FIELD VALUE [FIELD1,VALUE1]…… // 同时将多个 field-value (域-值)对设置到哈希表 key 中。
取值语法:
HGET KEY FIELD // 获取存储在HASH中的值,根据FIELD得到VALUE
HMGET key field[field1] // 获取key所有给定字段的值
HGETALL key // 返回HASH表中所有的字段和值
HKEYS key // 获取所有哈希表中的字段
HLEN key // 获取哈希表中字段的数量
删除语法:
HDEL KEY field1[field2] // 删除一个或多个HASH表字段
其它语法:
HSETNX key field value
// 只有在字段 field 不存在时,设置哈希表字段的值
HINCRBY key field increment
// 为哈希表 key 中的指定字段的整数值加上增量 increment 。
HINCRBYFLOAT key field increment
// 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
HEXISTS key field // 查看哈希表 key 中,指定的字段是否存在
4、List
赋值语法:
LPUSH key value1 [value2] // 将一个或多个值插入到列表头部(从左侧添加)
RPUSH key value1 [value2] // 在列表中添加一个或多个值(从右侧添加)
LPUSHX key value // 将一个值插入到已存在的列表头部。如果列表不在,操作无效
RPUSHX key value // 一个值插入已存在的列表尾部(最右边)。如果列表不在,操作无效。
取值语法:
LLEN key // 获取列表长度
LINDEX key index // 通过索引获取列表中的元素
LRANGE key start stop // 获取列表指定范围内的元素
/*
描述: 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
start: 页大小*(页数-1)
stop : (页大小*页数)-1
*/
删除语法:
LPOP key // 移出并获取列表的第一个元素(从左侧删除)
RPOP key // 移除列表的最后一个元素,返回值为移除的元素(从右侧删除)
BLPOP key1 [key2 ] timeout
// 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
例: BLPOP list1 100
在以上实例中,操作会被阻塞,如果指定的列表 key list1 存在数据则会返回第一个元素,否则在等待100秒后会返回 nil 。
BRPOP key1 [key2 ] timeout
// 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
LTRIM key start stop
// 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
修改语法:
LSET key index value // 通过索引设置列表元素的值
LINSERT key BEFORE|AFTER world value // 在列表的元素前或者后插入元素
// 描述:将值 value 插入到列表 key 当中,位于值 world 之前或之后。
高级语法:
RPOPLPUSH source destination
// 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
示例描述:
RPOPLPUSH a1 a2 // a1的最后元素移到a2的左侧
RPOPLPUSH a1 a1 // 循环列表,将最后元素移到最左侧
BRPOPLPUSH source destination timeout
// 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
5、Set
赋值语法:
SADD key member1 [member2] // 向集合添加一个或多个成员
取值语法:
SCARD key // 获取集合的成员数
SMEMBERS key // 返回集合中的所有成员
SISMEMBER key member // 判断 member 元素是否是集合 key 的成员(开发中:验证是否存在判断)
SRANDMEMBER key [count] // 返回集合中一个或多个随机数
删除语法:
SREM key member1 [member2] // 移除集合中一个或多个成员
SPOP key [count] // 移除并返回集合中的一个随机元素
SMOVE source destination member
// 将 member 元素从 source 集合移动到 destination 集合
差集语法:
SDIFF key1 [key2] // 返回给定所有集合的差集(左侧)
SDIFFSTORE destination key1 [key2] // 返回给定所有集合的差集并存储在 destination 中
交集语法:
SINTER key1 [key2] // 返回给定所有集合的交集(共有数据)
SINTERSTORE destination key1 [key2] // 返回给定所有集合的交集并存储在 destination 中
并集语法:
SUNION key1 [key2] // 返回所有给定集合的并集
SUNIONSTORE destination key1 [key2] // 所有给定集合的并集存储在 destination 集合中
6、Sorted Set
赋值语法:
ZADD key score1 member1 [score2 member2]
// 向有序集合添加一个或多个成员,或者更新已存在成员的分数
取值语法:
ZCARD key // 获取有序集合的成员数
ZCOUNT key min max // 计算在有序集合中指定区间分数的成员数
ZRANK key member // 返回有序集合中指定成员的索引
ZRANGE key start stop [WITHSCORES]
// 通过索引区间返回有序集合成指定区间内的成员(低到高)
ZREVRANGE key start stop [WITHSCORES]
// 返回有序集中指定区间内的成员,通过索引,分数从高到底
删除语法:
del key // 移除集合
ZREM key member [member ...] // 移除有序集合中的一个或多个成员
ZREMRANGEBYRANK key start stop // 移除有序集合中给定的排名区间的所有成员(第一名是0)(低到高排序)
ZREMRANGEBYSCORE key min max // 移除有序集合中给定的分数区间的所有成员