Redis 的简单学习与整理
Redis 的简单学习与整理
背景
最近一直进行Redis性能调优和高可用的课题
但是不管什么课题,第一步应该是学习与使用redis
之前总结过 rdb 与 rdr 分析 键值对等内容.
但是发现想要深入进行分析时 掌握的知识是非常不足的
今天计划进行一下简单学习.
Redis服务与客户端
Redis是世界上最流行的键值对数据库.
他的编译和使用也非常简单(开源版, 企业版我没搞定,比较麻烦)
一般实际上只需要3个文件就足够了
redis-cli 是客户端工具
redis-server 是服务器端工具
redis.conf 是配置工具
Redis配置文件简介
redis.conf 是redis的核心配置文件
主要需要注意的配置项目是:
bind 127.0.0.1 或者 0.0.0.0
# 注意 127.0.0.1 仅允许本机访问. 0.0.0.0 可以外部访问
requirepass password
# 设置访问密码
save aof dump 等参数
# 设置持久化
protected-mode
# 建议关闭保护模式.
connection
# 默认10000个连接,可以改大, 但是不建议太多.
# redis 7 以后可以有 io多线程参数.
daemonize yes
#后台作为驻留服务运行.
服务启动与关闭
redis-server /path/to/redis.conf
#启动服务就可以了.
lsof -i:6379
#查询进程相关的信息
#注意监听如果是 localhost 的话 外部无法访问.
kill -9 xxxx
#或者是执行shutdown 关闭服务也可以.
登录Redis服务器
redis-cli
#就可以默认登录 本机 6379 端口的服务
redis-cli -a Yourpassword -p Yourport
#可以明文指定密码 -p 可以单独指定端口号.
redis-cli -c
#集群模式登录的命令.
#可以选择任意一个集群的端口进行登录与访问.
进入机器后可以查询服务器的状态
info
# 可以查看redis服务器的信息.
info keyspace ; info memory; info clients
# 可以查看不同的服务器信息.
dbsize
#也可以查看当前数据库的键值对数量.
Redis的键值对类型
String: 字符串
Hash: 散列
List: 列表
Set: 集合
Sorted Set: 有序集合
Ridis关于key的命令简介
keys *查看当前库所有key (匹配:keys *1)
# 注意这个命令不能常用,会导致严重的性能问题, 会hang住系统.
exists key判断某个key是否存在
type key 查看你的key是什么类型
del key 删除指定的key数据
unlink key 根据value选择非阻塞删除
仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。
expire key 10 10秒钟:为给定的key设置过期时间
ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
select命令切换数据库
dbsize查看当前数据库的key的数量
flushdb清空当前库
flushall通杀全部库
Redis String类型key说明
set key value
#设置键值对
*NX:当数据库中key不存在时,可以将key-value添加数据库
*XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥
*EX:key的超时秒数
*PX:key的超时毫秒数,与EX互斥
get key
# 获取键对应的键值.
append key value
# 添加指定的值到末尾
setnx key value
# 只有键值对不存在时才会设置具体的值.
Redis List类型的说明
lpush/rpush key value1 value2 value3 ....
#从左边/右边插入一个或多个值。
lpop/rpop key
#从左边/右边吐出一个值。值在键在,值光键亡。
rpoplpush key1 key2
#从 key1 列表右边吐出一个值,插到 key2 列表左边。
lrange key start stop
#按照索引下标获得元素(从左到右)
len key
#获得列表长度
linsert key before value newvalue
#在 value 的后面插入 newvalue 插入值
lrem key n value
#从左边删除n个value(从左到右)
lset key index value
#将列表key下标为index的值替换成value
Redis Set类型的说明
Redis set对外提供的功能与list类似是一个列表的功能,
特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,
又不希望出现重复数据时,set是一个很好的选择,
并且set提供了判断某个成员是否在一个set集合内的重要接口,
这个也是list所不能提供的。
Redis的Set是string类型的无序集合。
它底层其实是一个value为null的hash表,
所以添加,删除,查找的复杂度都是O(1)。
Redis Set类型的说明
sadd key value1 value2
# 添加 value1 value2 key中. 如果已经存在会就行插入,并且排重.
smembers key
# 取出该集合的所有值.
sismember key value
# 检查key 是否存在于set中.
scard key
# 检查key值的数量
srem key value
# 删除key中value的项目
spop key
# 随机吐出一个项目
sinter / sunion / sdiff
# 交集 并集 差集
Redis Hash类型的说明
Redis hash是一个string类型的field和value的映射表,
hash特别适合用于存储对象。
hgetall key
# 获取hash 所有的field 和value的映射表信息.
hset key field value
#给 key 集合中的 field 键赋值 value
hget key1 field
#从 key1 集合 field 取出 value
hmset key1 field1 value1 field2 value2 ...
#批量设置hash的值
hexists key1 field
#查看哈希表 key 中,给定域 field 是否存在。
hkeys key
# 出该hash集合的所有field
hvals key
# 列出该hash集合的所有value
hincrby key field increment
#为哈希表 key 中的域 field 的值加上增量 1 -1
hsetnx key field value
#将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 .
Redis Zset类型的说明
Redis有序集合zset与普通集合set非常相似,
是一个没有重复元素的字符串集合。
不同之处是有序集合的每个成员都关联了
一个评分(score),这个评分(score)
被用来按照从最低分到最高分的方式排序集合中的成员。
集合的成员是唯一的,但是评分可以是重复了 。
Redis Zset类型的说明
zadd key score1 value1 score2 value2 …
# 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
zrange key start stop [WITHSCORES]
#返回有序集 key 中,下标在 start stop 之间的元素
#带WITHSCORES,可以让分数一起和值返回到结果集。
zrangebyscore key minmax [withscores] [limit offset count]
#返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
#有序集成员按 score 值递增(从小到大)次序排列。
zrevrangebyscore key maxmin [withscores] [limit offset count]
#同上,改为从大到小排列。
zincrby key increment value
#为元素的score加上增量
zrem key value
#删除该集合下,指定值的元素
zcount key min max
#统计该集合,分数区间内的元素个数
zrank key value
#返回该值在集合中的排名,从0开始。
Redis 持久化相关
RDB(Redis DataBase)
AOF(Append Of File)
RDB
Redis会单独创建(fork)一个子进程来进行持久化,
会先将数据写入到 一个临时文件中,待持久化过程都结束了,
再用这个临时文件替换上次持久化好的文件。
整个过程中,主进程是不进行任何IO操作的,
这就确保了极高的性能 如果需要进行大规模数据的恢复,
且对于数据恢复的完整性不是非常敏感,
那RDB方式要比AOF方式更加的高效。
RDB的缺点是最后一次持久化后的数据可能丢失。
save : save时只管保存,其它不管,全部阻塞。
手动保存。不建议。
bgsave:Redis会在后台异步进行快照操作,
快照同时还可以响应客户端请求。
save 900 1
表示 15分钟内有一次变化就落盘
RDB的优缺点
优点:
1. 适合大规模的数据恢复
2. 对数据完整性和一致性要求不高更适合使用
3. 节省磁盘空间
4. 恢复速度快
缺点:
1. Fork的时候,内存中的数据被克隆了一份,
大致2倍的膨胀性需要考虑
2. 虽然Redis在fork时使用了写时拷贝技术,
但是如果数据庞大时还是比较消耗性能。
3. 在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,
就会丢失最后一次快照后的所有修改。
AOF
以日志的形式来记录每个写操作(增量保存),
将Redis执行过的所有写指令记录下来(读操作不记录),
只许追加文件但不可以改写文件,
redis启动之初会读取该文件重新构建数据,
换言之,redis 重启的话就根据日志文件的内容将
写指令从前到后执行一次以完成数据的恢复工作
启动方式: 修改默认的appendonly no,改为yes
appendfsync always|everysec|no
优缺点
优点:
1. 备份机制更稳健,丢失数据概率更低。
2. 可读的日志文本,通过操作AOF稳健,可以处理误操作。
缺点:
1. 比起RDB占用更多的磁盘空间。
2. 恢复备份速度要慢。
3. 每次读写都同步的话,有一定的性能压力。
4. 存在个别Bug,造成恢复不成功.
未完待续
Redis 的简单学习与整理的更多相关文章
- redis的简单学习记录
安装 1 brew install redis 启动redis服务 1 redis-server & 启动命令 1 redis-cli -h 127.0.0.1 -p 6379 利用gored ...
- mongodb,redis简单学习
2.mongodb安装配置简单学习 配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作 ...
- 超全PHP学习资源整理:入门到进阶系列
PHP是少数几门在语言层面饱受诟病,但在实际开发和应用上却又让人无法撒手的语言之一.就好比路边摊小吃,一遍骂人家不卫生,一遍却又说:真香.所谓接地气,不外如此,大道理不说,PHP光是轮子多.市场占有率 ...
- 第二弹:超全Python学习资源整理(进阶系列)
造一个草原要一株三叶草加一只蜜蜂.一株三叶草,一只蜂,再加一个梦.要是蜜蜂少,光靠梦也行. - 狄金森 "成为编程大牛要一门好语言加一点点天分.一门好语言,一点点天分,再加一份坚持.要是天分 ...
- Deep Learning(深度学习)学习笔记整理系列之(五)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(七)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(六)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(四)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(三)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Redis源码学习:字符串
Redis源码学习:字符串 1.初识SDS 1.1 SDS定义 Redis定义了一个叫做sdshdr(SDS or simple dynamic string)的数据结构.SDS不仅用于 保存字符串, ...
随机推荐
- PreSTU:一个专门为场景文本理解而设计的简单预训练模型
摘要:在视觉与语言(V&L)模型中,阅读和推理图像中的文本的能力往往是缺乏的.我们如何才能学习出强大的场景文本理解(STU)的V&L模型呢? 本文分享自华为云社区<场景文本理解预 ...
- 鸿蒙轻内核源码分析:MMU协处理器
摘要:本系列首先了解下ARM CP15协处理器的知识,接着介绍下协处理器相关的汇编指令,最后分析下MMU相关汇编代码. 本文分享自华为云社区<鸿蒙轻内核A核源码分析系列六 MMU协处理器> ...
- Plus版SBOM:流水线物料清单PBOM
相信大家对软件物料清单(SBOM)并不陌生,它是指用于构建软件解决方案的所有软件组件(开源或商业)的列表.但在软件物料清单中,并不包括用于部署软件的微服务和其他组件.为了更全面了解所用的组件,我们需要 ...
- 1024程序员节献礼,火山引擎ByteHouse带来三重产品福利
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流. 随着信息技术飞速发展,互联网.Web3.物联网.人工智能相继出现. 在这近三十年的高速发展中,"程序 ...
- Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级
Jenkins Pipeline 流水线 - K8S kubectl 升级 使用代理节点 Remote SSH 远程执行命令进行升级 Remote SSH 方式 安装插件 SSH Pipeline S ...
- Dom4j 保存XML HL7-V3
dom4j selectNodes 取不到值 因为XML带有命名空间 HL7 Dom4j 保存XML String xmlPath = "D:\\BS004.xml"; Strin ...
- OpenFeign 各种用法、 logger 日志记录
<spring-cloud-openfeign.version>2.2.6.RELEASE</spring-cloud-openfeign.version>对应的SpringB ...
- MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
一套代码,多家部署时,在SQL脚本升级时,通过一个SQL文件给运维,避免出现SQL执行序顺出错及漏执行SQL SQL Server 项目中 SQL 脚本更新方式 Oracle 项目中 SQL 脚本更新 ...
- 【PS算法理论探讨三】 Photoshop中图层样式之 颜色叠加/渐变叠加/图案叠加 算法原理初探讨。
这三个表面上看上去很简单,我们就先描述简单的部分. 颜色叠加:这个和编辑菜单下的填充 颜色 基本是一个意思,相当于在原有的图层上部添加了一个纯实色的虚拟图层,选项里的不透明度和混合模式和普通的概念是一 ...
- 【3rd Party】nlohmann json 基础用法
参考链接:Here 什么是nlohman json ? nlohman json GitHub - nlohmann/json: JSON for Modern C++ 是一个为现代C++(C++11 ...