Redis入门

一、简介:

  • Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库,也称为内存缓存数据库,C/S架构,默认端口6379。

二、支持的数据类型

  1. String字符串
    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
    string类型是Redis最基本的数据类型,一个键最大能存储512MB。
  • 使用
set prop1 hello
get prop1
del prop2
  1. Hash(哈希)
    关联数组,是一个键值(key=>value)对集合。是一个string类型的field和value的映射表,hash特别适合用于存储对象。
  • 使用
hset myhash key1 value1
hset myhash key2 value2
#添加元素
hget myhash key1
#获取指定元素
hdel myhash key1
#删除指定元素
hexists myhash key2
#元素是否存在
  1. List(列表)
    线性数据结构,连续的存储单元,能够提供查找上一个,下一个;可以实现队列、栈
  • 使用
lpush name value
#在 key 对应 list 的头部添加字符串元素
rpush name value
#在 key 对应 list 的尾部添加字符串元素
lrem name index
#key 对应 list 中删除 count 个和 value 相同的元素
llen key
#返回 key 对应 list 的长度
lpop, rpop
# 弹出元素
  1. Set(集合)
    是不重复string类型的无序集合。
    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
  • 使用
sadd key value1 value2 value3
#添加
smembers key
#查看
srem key value1
#删除
sismember key value1
#是否在集合中
spop key
#随机获取一个集合元素
scard key
#统计集合元素
  1. zset(有序集合)
    是不重复string类型的无序集合。
    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。分数(score)却可以重复。
  • 使用
zadd key 0 value1
zadd key 3 value2
#添加集合元素
zincrby key 1 value1
zincrby key -1 value3
#增减元素的得分
zrange key 0 2 withscores
zrevrange key 0 1 withscores
#生序/降序,获取某个范围内的元素(索引范围内)withscores 显示分数
zrem key value1
#删除
zcard key
#统计基数

三、常用命令

  • 获取多个缓存项
    keys user* 获取以user开头的缓存项
  • 有效期设置
    expire user 10 设置user有效期10s
    expireat user 144... 以时间戳的方式设置有效期
    pexpire user 10 毫秒级设置
  • 获取有效期
    ttl key
    pttl key
  • 缓存项是否存在
    exists key
  • 查看类型
    type key

四、Redis持久化

什么是持久化
  • 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
  • redis.conf 设置
    dir表示当前数据库写入目录
    save t n t秒内n个缓存项被设置则存储
  • Redis 提供了两种持久化方式:RDB(默认) 和AOF,也可以使用save手动存储rdb
具体说明

RDB(Redis DataBase):
功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数
在这里插入图片描述
AOF(Append-only file):
在这里插入图片描述
每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作
aof写入保存:
WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件
SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。
存储结构:
内容是redis通讯协议(RESP )格式的命令文本存储。
比较:
1、aof文件比rdb更新频率高,优先使用aof还原数据。
2、aof比rdb更安全也更大
3、rdb性能比aof好
4、如果两个都配了优先加载AOF

五、Redis过期键处理

三种删除策略
  • 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作;
  • 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,那就返回该键;
  • 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于删除多少过期键,以及要检查多少个数据库,则由算法决定。
  • Redis服务器实际使用的是惰性删除和定期删除两种策略。
三种策略的优缺比较
  • 定时删除策略对内存是最友好的:通过使用定时器,定时删除策略可以保证过期键会尽可能快地被删除,并释放过期键所占用的内存;但另一方面,定时删除策略的缺点是,他对CPU是最不友好的:在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分CPU时间,在内存不紧张但是CPU时间非常紧张的情况下,将CPU时间用在删除和当前任务无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响;

  • 惰性删除策略对CPU时间来说是最友好的:程序只会在取出键时才对键进行过期检查,这可以保证删除过期键的操作只会在非做不可的情况下进行;惰性删除策略的缺点是,它对内存是最不友好的:如果一个键已经过期,而这个键又仍然保留在数据库中,那么只要这个过期键不被删除,它所占用的内存就不会释放;

    定时删除占用太多CPU时间,影响服务器的响应时间和吞吐量;惰性删除浪费太多内存,有内存泄漏的危险。定期删除策略是前两种策略的一种整合和折中

  • 定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响;通过定期删除过期键,定期删除策略有效地减少了因为过期键而带来的内存浪费;定期删除策略的难点是确定删除操作执行的时长和频率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值