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文件配置后既可以使用