Redis入门指南

1.Redis概述

Redis:高性能的键值对(key-value)数据库。

Key定义的注意点:

  1. 不要过长
  2. 不要过短
  3. 统一的命名规范

2.应用场景

  1. 缓存
  2. 任务队列
  3. 网站访问统计
  4. 数据过期处理(精确到毫秒)
  5. 分布式集群架构中的session分离

3.支持的数据类型

  • 字符串(String)(常用)
  • 哈希(hash)(常用)
  • 字符串列表(list)
  • 字符串集合(set)
  • 有序字符串集合(sorted set)

存储String

1.概述

  • 二进制安全的,存入和获取的数据相同
  • Value最多可以容纳的数据长度是512M

2.常用命令

  • 赋值(set key value)
  • 取值(get key)
  • 取旧值并设置新值(getset key value)
  • 删除(del key)
  • 数值增减
    • incr num 若num未赋初值,则将num初始化为0,并加1,当num为非整型时,抛出异常
    • decr num 若num未赋初值,则将num初始化为0,并减1,当num为非整型时,抛出异常
  • 扩展命令
    • incrby num 5 将num对应的value值在原来的基础上加5
    • decrby num 5 将num对应的value值在原来的基础上减5
    • append num 5 若存在当前的key(num),则在原来的value后追加5这个字符;若不存在当前的key,则创建一个新的key-value

存储Hash

1.概述

  • String Key 和 String Value 的 map 容器
  • 每一个Hash可以存储4294967295个键值对

2.常用命令

  • 赋值
    • hset key key1-value1 向集合key中添加key1-value1键值对
    • hmset key key1-value1 key2-value2 向集合中添加多个key-value值
  • 取值
    • hget key key1 获取集合key中对应的键为key1的value1值
    • hmget key key1 key2 获取集合key中对应的多组键的value值
    • hgetall key 获取集合key中所有的属性(键key和值value)
  • 删除
    • hdel key key1 key2 删除集合key中多组属性(key-value值)
    • del key 删除整个集合key
  • 增加数字
    • hincrby key key1 5 将集合key中键为key1的value值增加5
  • 自学命令
    • hexists key key1 判断集合key中是否存在属性key1,存在返回 1,否则返回 0
    • hlen key 返回集合key中的属性的个数
    • hkeys key 返回集合key中所有属性的键key
    • hvalues key 返回集合key中所有属性的值value

存储list

1.存储方式

  • ArrayList使用数组方式
  • LinkedList使用双向链表方式
  • 双向链表中增加数据
  • 双向链表中删除数据

2.常用命令

  • 两端添加(若链表不存在,则先创建,后添加元素)
    • lpush mylist a b c 从左边向链表中添加元素
    • rpush mylist a b c 从右边向链表添加元素
  • 查看列表
    • lrange mylist 0 5 查看链表中从0-5号的位置所对应的元素
    • 位置标号也可以为负数,若为负数则表示到链表的末尾第几个元素,例如(lrange mylist 0 -1 表示查询从0到链表末尾第一个元素)
  • 两端弹出(弹出后链表中不再包含该元素)
    • lpop mylist 从链表左端弹出末尾元素
    • rpop mylist 从链表右端弹出末尾元素
  • 获取列表元素个数
    • llen mylist
  • 扩展命令
    • lpushx/rpushx mylist x 若链表存在,则向指定的链表的头部/尾部插入数据x;若链表不存在,则不进行操作
    • lrem mylist count value 删除链表mylist中count个值为value的数据。若count > 0 则从头到尾遍历链表;若count < 0 则从尾到头遍历链表;若count = 0 则删除链表中所有值为value的数据
    • lset mylist index value 向指定的链表mylist中的index位置插入值value
    • linsert mylist before/after value1 value2 向指定的链表mylist中的第一个值为value1的元素前面/后面插入数据value2
    • rpoplpush mylist1 mylist2 将链表mylist1的尾元素弹出,添加到链表mylist2的头部
      rpoplpush的使用场景:
      在这里插入图片描述

存储Set

1.概述

  • 和List类型不同的是,Set集合中不允许出现重复的元素
  • Set可包含的最大元素数量是4294967295

2.常用命令

  • 添加/删除元素
    • sadd myset a b c 向集合myset中添加三个元素a b c
    • srem myset a b 删除集合myset中的元素a b
  • 获得集合中的元素
    • smembers myset 获取集合myset中的元素
    • sismember myset a 判断集合myset中是否包含元素a,若存在则返回 1;否则返回 0
  • 集合中的差集运算(与key的顺序有关)
    • sdiff mys1 mys2 这个我们假设有操作 sadd mys1 a b c,sadd mys2 a c 1 2,则执行差集运算后输出 b
  • 集合中的交集运算
    • sinter mys1 mys2 (同上),则输出结果为 c a
  • 集合中的并集运算
    • sunion mys1 mys2(同上),则输出 c 2 b a 1
  • 扩展命令
    • scard myset 返回集合中数据的个数
    • srandmember 随机返回集合中的一个元素
    • sdiffstore myset mys1 mys2 将集合mys1和mys2的差集存储到集合myset中
    • sinterstorre myset mys1 mys2 与上面一条指令类似,不同的是这里是交集
    • sunionstore myset mys1 mys2 并集

3.使用场景

  • 跟踪一些唯一性数据
  • 用于维护数据对象之间的关联关系

存储Sorted-Set

1.概述

  • Sorted-Set和Set的区别
  • Sorted-Set中的成员在集合中的位置是有序的

2.常用命令

  • 添加元素
    • zadd mysort 70 zs 80 ls 90 ww 这里数字对应为所添加的元素的分数,字母为索要添加的元素。若集合中已经存在该元素,则判断元素的分数是否与几何中的相同,若不同,则覆盖原来的值
  • 获得元素
    • zscore mysort zs 获取集合中某个具体元素的分数
    • zcard mysort 获得集合中的元素个数
  • 删除元素
    • zrem mysort zs ww 删除集合中的某个具体元素
  • 范围查询
    • zrange mysort 0 -1 (withscores)查询从集合头到尾的所有元素(带分数显示),默认升序排列
    • zrevrange mysort 0 -1(withscores)按降序排列查询结果
    • zremrangebyrank mysort 0 4 按排名范围删除元素
    • zremrangebyscore mysort 80 100 按分数范围删除元素
  • 扩展命令
    • zrangebyscore mysort 0 100 (withscores)按照分数范围查询元素
    • zrangebyscore mysort 0 100 (withscores)limit 0 2 按照分数范围查询元素,并返回前两条记录
    • zincrby mysort 3 ls 给指定的元素 ls 的分数加 3
    • zcount mysort 80 90 返回分数80到90之间的元素的个数

3.使用场景

  • 如大型在线游戏积分排行榜
  • 构建索引数据

4.Redis的通用命令

Keys通用操作

  • keys * 查看 Redis 中的所有的 key
  • keys my?查询 Redis 中所有以 my 开头的 key
  • del my1 my2 my3 删除 Redis 中具体的 key
  • exists my1 判断 Redis 中是否存在某个key,若存在,返回 1,否则返回 0
  • rename name newname 将 Redis 中的某个 key 进行重命名
  • expire newname 1000 设置过期时间为 1000s
  • ttl newname 查询每个 key 的剩余存活时间,若未设置过期时间,则返回 -1
  • type newname 获取某个具体的 key 的类型

5.Redis特性

1.多数据库

  • 一个 redis 实例最多可以提供16个数据库,下标分别从0-15,客户端默认连接的是第 0 号数据库,也可以通过 select 命令选择连接哪个数据库

select 1 客户端选择连接 1 号数据库
在 1 号库中执行操作 move myset 0,则会将 1 号库中的 key (myset)移动到 0 号库

2.Redis事务

  • multi(开启事务)
  • exec(提交事务)
  • discard(回滚事务)

6.Redis持久化

一、介绍

  1. 两种持久化方式

    • RDB方式
    • AOF方式
  2. 持久化使用的方式

    • 单独使用RDB持久化(默认支持,不需要配置):在指定的时间间隔内,将内存中的数据集快照写入到磁盘
    • 单独使用AOF持久化:以日志的形式记录服务器所处理的每一个操作,在 Redis 服务器启动之初,它会读取该文件,然后去重新构建数据库,以此保证数据库数据的完整性
    • 无持久化:通过配置禁用 Redis 的持久化功能,从而将 Redis 看作为一个缓存机制
    • 同时使用RDB和AOF

二、RDB

  1. 优势
    • Redis 数据库只包含一个文件,利于文件备份
    • 易于灾难性恢复(比如拷贝到其它地方,需要恢复时直接利用备份进行恢复)
    • 性能最大化
    • 启动效率高
  2. 劣势
    • 可能会丢失数据
    • 当数据集过大时,整个服务器可能会需要停止几百毫秒,甚至是一秒钟
  3. 配置(默认)
    在这里插入图片描述
    • save 900 1 表示每900秒至少有一个key发生变化,此时会触发一次持久化操作
    • save 300 10 表示每300秒至少有十个key发生变化,此时会触发一次持久化操作
    • save 60 10000 表示每60秒至少有一万个key发生变化,此时会触发一次持久化操作

三、AOF

  1. 优势
    • 带来更高的数据安全性;
    • 对日志文件的写入操作是append追加模式,若出现宕机情况,也不会破坏日志文件中已经存在的内容;
    • 若日志过大,Redis 可以自动启动重写机制
    • 包含一个格式清晰易于理解的日志文件,来记录所有的修改操作
  2. 劣势
    • 对于相同数量的数据集,文件相对于RDB方式要大一些
    • 根据同步策略的不同,效率相对于RDB要低一些
  3. 配置
    在这里插入图片描述
    默认情况下是关闭的,即默认使用RDB方式
    三种同步策略方式:
    在这里插入图片描述
    • always 每修改一次,执行一次同步操作进行持久化
    • everysec 每秒中执行一次同步进行持久化
    • no 不同步
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值