目录
[一. redis 概述](#一. redis 概述)
[1. 定义](#1. 定义)
[2. 特点](#2. 特点)
[3. 为什么使用 redis](#3. 为什么使用 redis)
[二. Redis 安装](#二. Redis 安装)
[三. redis](#三. redis)
[1. 5 种基本常用结构](#1. 5 种基本常用结构)
[2. String(字符串)](#2. String(字符串))
[(1). 单值缓存](#(1). 单值缓存)
[(2). 计数器](#(2). 计数器)
[(3). Hash(哈希)](#(3). Hash(哈希))
[(4). List(列表)](#(4). List(列表))
[3. Set(集合)](#3. Set(集合))
[4. zset(sorted set:有序集合)](#4. zset(sorted set:有序集合))
[(2)设置key 值 后设置失效时间](#(2)设置key 值 后设置失效时间)
一. redis 概述
1. 定义
Redis 是一款内存中的 Key-Value 数据结构存储系统**, 开源, 支持网络交互和多种语言** ,主要作为数据库缓存和消息的中间件
2. 特点
Redis 将数据存储在内存 中,也支持数据的持久化(即可以将内存中的数据保持在硬盘中),重启的时候可以再次加载进行使用
读写效率高, Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s
Redis提供多种数据结构 , 例如 list,set,zset,hash 等数据结构的存储
原子 -- Redis所有操作都是原子性的,同时Redis 还支持对几个操作全并后的原子性执行
Redis 分布式集群化扩展性极高,即 master-slave(主-从)模式。
3. 为什么使用 redis
随着 web3.0 的时代到来 , 传统的关系型数据库在大量的访问的压力下出现了一些性能问题 , 例如 连接数量问题(MySQL服务连接压力大) , IO瓶颈问题(从磁盘查询IO成本高)......
在项目中可以将一些 改变较少的数据 (例如 商品分类信息) 以及访问量很大的数据 (例如 抢购 秒杀 买票), 临时存储在Redis中, 减少MySQL的访问压力 .还可以存储例如点赞 收藏的数量等数据
Redis一般称为非关系型数据库 ,对部分数据进行缓存, 减少对关系型数据库的访问压力 . 或者将某些数据直接存储在 redis 中. redis也可以称为nosql数据库(not only sql)
当然 redis 数据库也是不能完全替代关系型数据库的,他们是相互依赖的.
web1.0 2000年 静态网页 例如 hao123 ,物流信息网
web2.0 动态网页 后台新增数据----->数据库 由平台发布数据
web3.0 抖音 头条 用户也可以发布数据
二. Redis 安装
安装redis服务
安装redis客户端
三. redis
1. 5 种基本常用结构
string(字符串)
hash(哈希)
list(列表)
set(集合 )
zset(sorted set:有序集合)
2. String(字符串)
string 是 redis 最基本的类型,一个 key 对应一个 value。
string 类型是二进制安全的 意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储512MB
(1). 单值缓存
set key value
get key
del key
keys *
单值缓存值可以为 json 字符串
(2). 计数器
set news_views:1 0 设置文章访问量
incr news_views:1 文章访问量+1
decr news_views:1 文章访问量-1
get news_views:1 获得值
(3). Hash(哈希)
redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象.
存的是字符串和字符串值之间的映射,比如要存储用户购物车等信息.
hset key field value 属性名 属性值 存储一个哈希表 key 的键值
hget key field 获取哈希表 key 对应的 field 属性值
hdel key field 删除哈希表 key 中的 field 属性值
hlen key 返回哈希表 key 中的 field 的数量
hgetall key 返回哈希表 key 中所有 的属性值
hincrby key field 1 增1
hincrby key field -1 减1
(4). List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序. 可以添加一个元素到列表的头部(左边)或者尾部(右边)
lpush key value[value...] 在key 列表 从头(左) 插入一个或多个值
rpush key value[value...] 在key 列表 从尾(右) 插入一个或多个值
lpop key 删除 并返回 key 列表的头元素
rpop key 删除 并返回 key 列表的尾元素
lrange key start stop 返回列表key中**指定区间[start , stop]**内的元素,
常见用法
Stack = LPUSH + LPOP = FILO
Queue = LPUSH + RPOP
3. Set(集合)
Redis 的 Set 是无序集合,不能存储重复元素
sadd key value[value...] 往集合 key 中存入元素,元素存在则忽略,若 key 不存在则新建
srem key value[value...] 从集合 key 中删除元素
smembers key 获取集合 key 中所有元素
scard key 获取集合 key 的元素个数
4. zset(sorted set:有序集合)
redis zset 也是不允许重复 的成员,但是是有序的
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序 . zset 的成员是唯一的,但分数(score)却可以重复。
zadd key score value[[score value]..] 往有序集合 key 中加入带分值元素
zrem key value[value...] 从有序集合 key 中删除元素
zscore key value 返回有序集合 key 中元素 value的分数
zcard key 返回有序集合 key 中元素个数
5.设置失效时间
有时候我们并不希望 redis 的 key 一直存在。例如缓存,验证码等数据,我们希望它们能在一定时间内自动的被销毁。redis 提供了一些命令,能够让我们对 key设置过期时间,并且让 key 过期之后被自动删除.
(1)设置值时直接设置有效时间
set key value EX 表示以秒为单位
set key value px 表示以毫秒为单位
ttl key 查看剩余时间(秒)
pttl key 查看剩余时间(毫秒)
EX,PX 不区分大小写
举例: set name jim EX 30 设置key的自动失效时间为 30 秒
(2)设置 key 值 后设置失效时间
expire key 时间(秒)
pexpire key 时间(毫秒)