redis学习笔记

redis知识笔记

数据表完整存储redis

用到string自增长,哈希id,队列的存储id

redis开机命令

  • 开启redis redis-server.exe redis.windows.conf
  • 连接redis redis-cli

服务端命令

  • 查看所有的keys

    • keys *
  • 判断某个keys是否存在

    • exists key “1表示存在”
  • 查看当前数据库中的key的数量

    • dbsize
  • 清除当前数据库所有的key

    • flushdb
  • 切换数据库

    • select 【/d+】
  • 清除所有数据库中的数据

    • flushall (慎用)

字符串(string)命令

  • set 用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型

    • set key value [ex 秒数]/[px 毫秒数] [nx]/[xx]
    • ex/px 缓存有效期 ex
  • 一次性设置多个键值

    • mset key1 value1 key2 value2
  • 查看value类型

    • type key
  • 重新设置key的过期时间

    • expire key 【\d+】
  • get 用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误

    • get key
  • 获取多个key的值

    • mget key1 key2 key3 …
  • 设置自增自减,也可直接用key,不用set,使用该命令自动创建

    • incrby key step # 指定步长的自增 可为负数
  • 追加key下的value

    • append key value

列表命令

  • 概述

    • 类似于PHP中的索引数组,列表中的值是可以重复的。可以用列表来实现简单的队列。

      可以实现先进后出,还可以实现先进先出

  • 把值插入到列表的头部

    • lpush key value 从右往左插入

    • rpush key value 从左往右插入

    • 使用lpush 和 rpop 实现了 先进先出。

  • 从列表右边(尾部)删除元素,并返回删除的元素值

    • rpop key 从右往左删除
    • lpop key 从左往右删除
  • 获取列表的长度

    • llen key
  • 返回指定区间内的元素,下标从0开始

    • lrange key startIndex endIndex (注: 默认从后面的加入的开始算,到前面的)
    • 查找所有的值 lrange key 0 -1
  • 移除列表的最后一个元素,并将该元素添加到另一个列表并返回

    • rpoplpush mylist(原数组) otherlist(目标组)

哈希(hash)操作命令

  • 类似于php的关联数组,一般用于存储数据中的一条记录值

  • 关于哈希的key的其名称:一般和数据表关联

    • key起名规范:表名:主键字段名:字段值
  • 设置把key中 field字段的值设置为 value,如果没有field字段,直接添加,如果有,则覆盖原field字段的值

    • hset key field value

    • 一次性设置多个

      • hmset key field1 value1 field2 value2 …
  • 获取key中指定field字段的值

    • hget key field
  • 一次性获取之个key中field字段的值

    • hmget key field1 field2 …
  • 获取key所有的值

    • hgetall key
  • 删除key

    • del key
  • 删除key中指定的field字段

    • hdel key field
  • 返回key中元素的数量

    • hlen key
  • 判断key中有没有field字段

    • hexists key field
  • 把key中field字段的值自增长

    • hincrby key field step 步长可以为负数
  • 返回所有key对应的field字段

    • hkeys key
  • 返回所有key对应field字段对应的值

    • hvals key

集合(set)操作命令

redis的set是无序集合。集合里不允许有重复的元素。

set元素最大可以包含(2的32次方-1)个元素。

场景:存放用户Id,不重复的信息 抽奖,好友关系

  • 向集合key中添加元素

    • sadd key value1 value2
  • 查找key集合中所有的元素

    • smembers key
  • 查找key集合中元素的个数

    • scard key
  • 删除key集合中为value1的元素

    • srem key value1
  • 判断value是否存在于key集合中

    • sismember key value
  • 把源集合中的value删除,并添加到目标集合中 【移动】

    • smvoe sSet dSet value
  • 求出key1,key2两个集合的交集,并返回

    • sinter key1 key2
  • 求出key1,key2两个集合的并集,并去重,并返回

    • sunion key1 key2
  • 求出key1与key2的差集

    • sdiff key1 key2 以key1集合为主,求出key1中和key2不同的元素并返回 a{1 2 3} b{2 3 4} echo 1

有序集合(zset)

和set一样有序集合,元素不允许重复,不同的是每个元素都会关联一个分值。

可以通过它的分值来进行排序。如实现手机APP市场的软件排名等需求的实现。

  • 给key有序集合中添加元素
    • zadd key score(分值) value
  • 删除key有序集合中指定的元素
    • zrem key value1
  • 返回有序集中,指定区间位置内的成员 (相当于分值就是索引)
    • zrange key startIndex endIndex [withscores] # 从小到大排列 默认
    • zrevrange key startIndex endIndex [withscores] # 从大到小排列
  • 按照分值来删除元素,删除score在 min<=score<=max之间的
    • zremrangebyscore key min max
  • 返回集合元素个数
    • zcard key
  • 返回min <= score <= max分值区间内元素的数量
    • zcount key minScore maxScore
  • 返回有序集中,成员的分数值
    • zscore key value
  • 对有序集合中指定成员的分数加上增量 把value的分数+score值
    • zincrby key score 元素

发布与订阅

Redis发布订阅(publish/subscribe)是一种消息通信模式,发送者(publish)发送消息,订阅者(subscribe)订阅后接受频道消息。

开启两部redis,一个订阅,一个发布,即可以完成发布订阅。
  • 订阅频道
    • subscribe 频道1[,频道2…]
  • 支持通配符
    • psubscribe 名称*
  • 发布频道
    • publish 频道 发送消息

数据持久化操作

数据持久化就是在服务重启或服务器重启后数据不丢失。实现持久化,就需要把数据存储到磁盘中。

Redis的持久化有2种方式

Ø 快照(rdb)默认就开启

Ø aof日志方式(需要手动开启)

两种的持久化的机制不相同,rdb在某一个时间点把内存中的数据整体保存下来。aof是把用户操作的命令全部记录下来。记录全部命令会对性能有一定的损耗,所以默认redis就没有开启,有条件化建议开启

rdb快照

  • 相关配置选项 vi /usr/local/redis/redis.conf

  • #    秒    命令次数
    save 900 1        # 900秒内,有1条写入,则产生快照 
    save 300 10       # 300秒内有10次写入,则产生快照
    save 60 10000     # 60秒内有10000次写入,则产生快照
    
    dbfilename dump.rdb  //导出来的rdb的默认文件名
    dir ./  // 持久化文件存放路径
    
  • 更该配置操作,出发快照条件和存放位置

    • 创建一个数据快照存储目录
    • 关闭redis服务,再删除原来的dump.rdb
    • 更改快照生成文件所在的目录路径
    • 保存配置文件后,重启redis服务。使用redis提供的压测命令来生成10001个key

aof日志持久化

相关配置 vi /usr/local/redis/redis.conf

appendonly no # 是否打开 aof日志功能 no不打开 yes打开


#appendfsync always   # 每1个命令,都立即同步到aof. 安全,速度慢
appendfsync everysec  # 推荐方案,每秒写1次
#appendfsync no        # 写入工作交给操作系统,数据同步性没有保证,同步频率低,速度快
  • 进入到redis命令客户端中,执行几次set操作,就可以在指定的日志目录中查看到对应的日志文件

redis事务操作

Redis支持简单的事务,事务就是:当同一个操作需要多条命令执行,一条执行有误,其它操作将回滚到之前的状态。

例如:银行转账工作,从一个账号扣款并在另一个账户增款,要么都执行,要么都不执行。

执行的步骤:
开始事务
命令入队
执行事务

Redis事务实现
watch key1 key2  # 监听key的变化
multi  事务开始
	普通命令(string list hash set zset中的命令)
exec  # 执行 / discard   # 取消   exec和discard两个只能执行一个
unwatch  # 解除监听
  • 手动事务(只有命令错误才会混滚,逻辑错误不会回滚)
    • 开启事务 multi
    • 操作的命令
    • 回滚操作 discard
  • key的监听 watch 监听key是否有改变,如果有改变,则执行的事务将会不会成功执行。只有监听的在事务没有执行成功前没有改变,事务才能完成执行。

设置密码

  • 配置文件修改:requirepass 密码
  • 重启
  • 使用auth来进行登录操作 auth 密码

Redis主从设置

当数据量变得庞大的时候,读写分离还是很有必要的。redis提供了主从复制的机制,从服务器可以复制主服务器的数据信息,就可以实现读写分离,从而降低单台服务器的压力。

windows下面根据端口号设置主从分离

略过,还不会

扩展

laravel安装扩展

  • composer require predis/predis

  • use Illuminate\Support\Facades\Redis;  //引入类,.env文件配置后既可以使用
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值