首页 > 数据库 >Redis 的简单学习与整理

Redis 的简单学习与整理

时间:2022-10-15 13:44:52浏览次数:58  
标签:Redis redis value 学习 field key 整理 集合

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,value,学习,field,key,整理,集合
From: https://www.cnblogs.com/jinanxiaolaohu/p/16794016.html

相关文章

  • 《Unix/Linux系统编程》第七周学习笔记
    《Unix/Linux系统编程》第七周学习笔记并发进程线程管理函数pthread_create()intpthread_create(pthread_t*pthread_id,pthread_attr_t*attr,void*(*func)(void......
  • Redis常用命令-实战篇
    目录写在前面连接操作命令持久化远程服务控制对value操作的命令操作字符串String命令ListSetHash写在前面java操作redis太常见了,基本上有需要的系统,都会上缓存,缓存......
  • Redis6 新功能介绍
    特性的详细细节在此不赘述,我们来看Redis6.0,。Redis6.0版本特性大约可以分为四类,如下表新特性内核优化应用优化其他ACL权限管控(包括ACLLOG)过期Key回收优化......
  • java学习笔记35
    面向对象什么是继承继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模extends的意思是“拓展”。子类是父类的拓展。java类中只有单继承,没有多继承!继承是类......
  • 模式识别学习笔记-lecture3-判别函数3
    势函数法假设要划分属于两种类别\(\omega_1,\omega_2\)的模式样本,这些样本可以看做是分布在\(n\)维模式空间中的点\(x_k\),把属于\(\omega_1\)的点比拟为某种能源点,在点上,......
  • 第七周学习笔记
    第4章并发编程摘要论述了并发编程,介绍了并行计算的概念,指出了并行计算的重要性;比较了顺序算法与并行算法,以及并行性与并发性;解释了线程的原理及其相对于进程的优势;......
  • 模式识别学习笔记-lecture3-判别函数2
    感知器算法一旦判别函数的形式确定下来,不管它是线性的还是非线性的,剩下的问题就是如何确定它的系数,在模式识别中系数确定的一个主要方法就是通过对已知样本的训练和学习来......
  • kubernetes学习笔记3资源清单
    kubernetes对象:​pod|service|replicaset|deployment|statefulset|daemonset|job|cronjob​服务发现及均衡,service|ingress​配置与存储,volume|CSI|ComfigMap|Secret|Downwa......
  • 一起学习CH32V003教程——降维打击替代STM8的方案
    一起学习CH32V003教程——降维打击替代STM8的方案结缘CH32V0032022年9月末,那是一个阳光明媚的午后,天气非常好,预示一件不得了的事情将要发生,果然WCH发布了一款超低成本的......
  • Unix/Linux系统编程学习笔记-7
    笔记第四章并发编程并行计算导论并行计算是一种计算方法,通过使用多个执行并行算法的处理器相较串行计算更快地解决问题。顺序算法与并行算法顺序算法begin step_......