Redis
1.什么是Redis
Redis是一个用C语言编写, 开源高性能非关系型(NoSQL)的键值对数据库
Redis五种基本数据类型
2 Redis为什么这么快
- 数据存在内存中: 内存的读写操作是磁盘(数据库)的一百倍左右
- 使用C语言实现: C语言更底层, 执行速度更快
- 单线程执行
- 没有多线程竞争锁的性能消耗。
- 没有多线程导致的切换而消耗CPU
3.Redis有哪些数据类型
3.1 string
3.1.1 可以存储的值
- 字符串
- 整数
- 浮点型
当我们将整数、浮点数存储为String类型时, Redis会将其转换为字符串形式(浮点数不会发生精度丢失)
3.1.2 操作
- 对字符串或者字符串的一部分进行操作
- 对整数、浮点数执行自增或者自减操作
3.1.3 命令
- 基本操作
set (key) (value)
:设置键值对setnx (key) (value)
:设置键值对(防止覆盖)- 如果key存在, 不设置, 返回0
- 如果key不存在, 设置, 返回1
get(key)
: 获取key对应的valuegetset (key) (value)
: 先get再set, 返回旧值, 如果没有旧值则返回nilappend (key) (value)
: 向指定的key的value后追加字符串del (key)
: 删除keystrlen (key)
: 获得key对应值的字符串的长度
- 数字value的加减
incr (key)
:value + 1decr (key)
:value - 1incrby (key) (number)
:value + numberdecrby (key) (number)
:value - number
- 获取或者设置指定范围内的值
getrange (key) (begin) (end)
:获取[begin,end]下标范围内的值,如果是(0,1)就是获取所有值setrange (key) (begin) (xxxx)
:从begin下标开始设置xxx值,将原有的替换掉
- 设置键值过期时间
setex (key) (seconds) expire
:设置键过期时间ttl (key)
:查看key剩余存活时间
- 同时设置或获取多个key-value
mset (key1) (value1) (key2) (value2)
:用于同时设置一个或多个 key-value 对mget (key1) (key2)
:返回所有(一个或多个)给定 key 的值(如果某个key不存在,不存在的key返回null)msetnx(key1) (value1) (key2) (value2)
:当所有 key 都成功设置,返回 1 。 如果有一个key设置失败,所有的key设置都会失败,返回 0 。原子操作
3.1.4 使用场景
1.缓存
最常见的使用场景, 主要得益于其高性能(内存操作)、灵活的数据结构(支持5种结构)等等
- 频繁读取的数据库查询: 当某个数据库查询被频繁执行, 可以将查询结果缓存到Redis中, 较少对数据库的访问
- 会话缓存: 将用户会话存储到Redis中, 特别是大规模的web应用, 这可以提高会话管理的性能和可扩展性
- 用户身份证验证信息缓存: 缓存用户的身份证令牌或者其他身份验证信息, 减少身份验证请求对数据库的负担
- 页面内存缓存: 对于动态生成的页面内容, 可以将完整的HTML缓存到Redis中, 降低渲染时间, 提高网站性能
哪些内容适合进行缓存
- 频繁访问: 通常是应用中频繁访问的数据
- 相对稳定: 在一段时间内不经常变化
- 持续时间长: 通常具备较长的生命周期
2.计数器
Redis是基于内存的键值对存储系统, 读写速度非常快, 性能很高, 能以非常低的延迟处理大量的计数请求, 同时Redis是单线程的, 一个命令执行完才会执行下一个, 不会出现线程安全问题
- 网站访问计数: 统计网站、特定页面的点击次数, 每当用户访问网站或点击某个页面时, 通过Redis的INCR递增
- 用户行为计数: 跟踪用户在应用中的各种行为, 例如发布文章、点赞、评论等. 对每种行为创建一个计数器, 可以方便记录用户活动
- 实时统计: 在实时应用中,需要快速地获取某个指标的实时统计数据,例如活跃用户数、实时销售额等。使用Redis的计数器可以很容易地实现这些实时统计。
3.session共享
session + redis实现session共享