Redis速成


Redis速成

MySQL是关系型数据库,其涉及硬盘读写操作,当并发量大且读写频繁时,速度会变慢;

Redis是内存数据库,内存的读写速度远快于硬盘,由此学习了解一下Redis

基本操作

Redis中的数据以键值形式存储,默认情况下,连接的是0号数据库,默认总共有16个,我们可以通过对应的配置文件进行修改。

  1. 切换数据库

    select 序号
  2. 添加数据

    set key value
    
    -- 一次性设置多个
    mset key1 value1 key2 value2 ...
  3. 获取数据

    get key
  4. 设置过期时间

    set key value ex 秒数
    
    set key value px 毫秒数
  5. 单独设置过期时间

    expire key 秒数
  6. 查看剩余的过期时间

    ttl key -- 查看秒
    
    pttl key -- 查看毫秒
    
    persist key -- 转换为永久 (显示 -1 即为永久)
  7. 删除数据

    del key
  8. 查看所有的键

    keys *
  9. 查询是否存在对应的键

    exists key
  10. 随机取出某一个键

    randomkey
  11. 将一数据库数据移到另一数据库中

    move key 数据库序号
  12. 修改键

    rename key newkey
    
    renamex key newkey -- 会判断新键是否存在,不存在再更名
  13. 运算

    incr key  -- 对应的value若为数字会自增1
    
    incrby key x -- 对应的value若为数字会加 x
    
    decr key -- 自减
    
    decrby key x -- 减去 x
  14. 查看键的类型

    type key

数据类型

String

参考基本操作

Hash

类似Java中Map<String, Map<String, String>>

即Redis中对应的value是个Map<String, String>

  1. 设置数据

    hset key 字段 值
  2. 获取数据

    -- 获取相应字段对应的值
    hget key 字段
    
    -- 获取所有字段和值
    hgetall key
    
    -- 获取所有字段
    hkeys key
    
    -- 获取所有字段对应的值
    hvals key
  3. 是否存在相应的字段

    hexists key 字段
  4. 删除相应的字段

    hdel key 字段
  5. 查看一共多少键值对

    hlen key

List

  1. 添加数据

    -- 从头部添加
    lpush key element
    
    -- 从尾部添加
    rpush key element
    
    -- 在指定元素前/后插入元素
    linsert key before/after 指定元素 element
  2. 获取数据

    -- 根据下标获取元素
    lindex key 下标
    
    -- 获取并移除头部元素
    lpop key
    
    -- 获取并移除尾部元素
    rpop key
    
    -- 获取指定范围内的
    lrange key start end
    
    lrange key 0 -1 -- 获取全部元素(-1表示倒数第一个元素)
  3. 移动并获取

    -- 从当前数组尾部取出放到目标数组的头部中,并返回元素
       rpoplpush 当前数组 目标数组
  4. 支持阻塞操作,类似生产者、消费者

    blpop key timeout -- 若列表中无元素则等待,timeout为超时时间限制,若等待期间有元素则会马上获取

Set

  1. 添加元素

    sadd key value1,value2...
  2. 查看set中有多少个值

    scard key
  3. 判断集合中是否包含指定值

    sismember key value -- 是否包含指定值
    
    smembers key -- 列出所有值
  4. 相关运算

    sdiff key1 key2 -- 集合之间的差集
    sdiffstore 目标 key1 key2 -- 差集存到目标集合中
    
    sinter key1 key2 -- 交集
    sintersotre 目标 key1 key2 -- 交集存到目标集合中
    
    sunion key1 key2 -- 并集
    sunionsotre 目标 key1 key2 -- 并集存到目标集合中
  5. 移动指定值

    smove 原key 目标key value 
  6. 移除操作

    -- 随机移除
    spop key
    
    -- 移除制定
    srem key value

SortedSet

为每个值设定一个分数,分数大小决定值的位置,从而使其有序

  1. 添加数据

    zadd key value score -- score分数决定值的位置
  2. 查询

    zcard key -- 查看有多少个值
    
    -- 通过分数段查看
    zrangebyscore key start end [withscores][limit]
    
    -- 统计分数段内的数量
    zcount key start end
    
    -- 根据分数获取指定值的排名
    zrank key value
  3. 移除

    zrem key value
  4. 获取区间内所有

    zrange key start end

持久化

RDB(Redis DataBase)

当开启了RDB持久化机制后,在一定的时间间隔内,Redis会将内存中的数据保存在一个文件中。这个文件可以看作是Redis的“快照”,其中包含了某个时间点上Redis的所有数据。RDB的优点在于它是一个非常紧凑的表示,同时因为在恢复期间需要加载并解析一个单独的文件,所以速度也很快。

优点:加载速度快,数据体积小

缺点:存储速度慢,消耗资源多,会发生数据丢失

AOF(Append-Only File)

当开启了AOF持久化机制后,Redis会将每个写入的命令都追加到一个文件中。这意味着当Redis重新启动时,可以从上一次写入命令的位置开始重放命令确保数据的准确性。AOF的优点在于它可以提供粒度更细的持久化,因此可以避免在恢复时丢失太多数据。缺点在于它的文件通常比RDB生成的文件大,其速度会慢于RDB。

优点:存储速度快,消耗资源少,支持实时存储

缺点:加载速度慢,数据体积大

事务和锁

开启事务:multi

执行事务:exec

中途取消事务:discard


评论
  目录