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不仅用于 保存字符串, ...
随机推荐
- 构建万物互联,华为云IoT+鸿蒙重燃物体感知
摘要:鸿蒙的出现,让硬件.软件行业面临着变革与重构的洪流,但激流勇进中,也潜藏着巨大机遇.物联网设备与鸿蒙结合成为必然趋势,本文将解读华为云IoT+鸿蒙如何强强联合,为物联网行业提供新的思路和方法. ...
- 大模型高效开发的秘密武器:大模型低参微调套件MindSpore PET
摘要:本文介绍大模型低参微调套件--MindSpore PET. 本文分享自华为云社区<大模型高效开发的秘密武器--大模型低参微调套件MindSpore PET篇>,作者:yd_28087 ...
- 如何只用一个小时定制一个行业AI 模型?
摘要:华为云通过ModelArts Pro提供更多的行业套件和工作流可以供用户直接使用,进一步降低AI行业落地难度,让传统企业客户无需掌握算法知识亦可实现自身业务与AI技术的融合. 去年,在华为开发者 ...
- Java的这个强大功能,很多人都不知道
摘要:大多数框架采用单一的语言所开发.JNI这项Java中提供的强大功能,却逐渐的被人遗忘了. 本文分享自华为云社区<Java中一个逐渐被遗忘的强大功能,强到你难以置信!!>,作者:冰 河 ...
- 快来一起玩转LiteOS组件:RHas
摘要:RHash是一个C语言编写的哈希函数库,用于计算和验证磁力链接和各种消息摘要的控制台实用程序. 本文分享自华为云社区<LiteOS组件尝鲜-玩转RHas>,作者:Lionlace . ...
- 累加求和 1~ n求和
a=1 ~ n 的求和 \[\sum_{a=1}^n a \] 公式:(首项 + 末项) * 项数/2 如果 a=1. n = 10 => (1+10)10/2 = 55 Python 代码 a ...
- GOS会计凭证上传附件
1.GOS介绍 GOS是一个连接文档和SAP内各种对象的工具,在SAP的一些凭证中,可以通过GOS进行附件的上传.查看和删除等功能,例如采购订单.会计凭证等. 如果没有这个按钮,可以将当前登录用户的类 ...
- VL02N、VL09交货单相关增强
一.业务需求 当前台操作过账发货或冲销时,需要将数据实时同步到第三方系统,因此需要开发增强 在用户出口MV50AFZ1->userexit_save_document中加入接口逻辑即可 定期更文 ...
- 深挖 Python 元组 pt.2
哈喽大家好,我是咸鱼 在<深挖 Python 元组 pt.1>中我们了解 Python 元组的一些概念(索引和切片等),以及如何创建元组,最重要的是我们还介绍了元组的不可变特性 那么今天我 ...
- 【Boost】boost.log 要点笔记
常用简写: namespace logging = boost::log; namespace src = boost::log::sources; namespace expr = boost::l ...