美文网首页
初识Redis

初识Redis

作者: sunpy | 来源:发表于2018-09-04 17:57 被阅读12次

Redis的安装和启动

这部分在之前的博客已经写过,这里不再赘述,提供两个以前的博客传送门。
Redis的安装
Redis之启动后其他知识

Redis数据类型

  1. 字符串String类型
    常用命令:
append key 值  :在key对应的值后面添加值。
STRLEN k2  :查看k2键对应的值的长度。
INCR key  :key对应的数字值加1。
DECR key  :key对应的数字值减一。
INCRBY key 数字 : key对应的数字加上指定的数字。
DECRBY key 数字   :key对应的数字减去指定的数字。
GETRANGE key 开始脚标 结束脚标  :获取key对应的值,取出从开始脚标到结束脚标的值 (类似于subString函数)。
SETRANGE key  开始脚标 替换的字符串  :替换key对应的值,从开始脚标开始,替换字符串。
SETEX key 时间 替换字符串  :在指定时间内key对应的值替换为指定字符串,过期销毁。
SETNX key 替换字符串 :如果指定key存在,那么此命令不做任何操作。如果指定key不存在,那么创建key,指定对应的值。成功返回1,错误返回0。
MSET key1 value1 key2 value2 .....keyn valuen :设置多个键值。
MGET key1 key2 .....keyn :通过指定的多个键获取多个值。
GETSET key 值  :先获取key的值,再设置指定值作为key对应的值。
  1. 列表List类型
    常用命令:
LRANGE list start end  :列表list,从start索引处开始取元素,end=1代表下一个元素,end=-1代表到最后一个元素,end=-2代表到倒数第二个元素。
LPUSH list 元素1 元素2...元素n  :列表list从队列顶进队列。
RPUSH list 元素1 元素2...元素n  :列表list从队列尾部进队列。
LPOP list01 :从队列头部出元素。
RPOP list01 :从队列尾部出元素。
LINDEX list01 脚标:列表list01 ,取出脚标对应的元素,从0开始。
LLEN list01 :列表list01 ,求其长度。
LREM list01 个数 元素值 :删除list01列表中指定个数的元素值。
LINSERT list01 before 5 helloworld :在列表list01中元素5的前面,添加元素helloworld。
LINSERT list01 after 5 myworld :在列表list01中元素6后面,添加元素myworld。
  1. 集合Set类型
    常用命令:
SADD set01 0 0 1 1 2 2 3 3 :向set01中添加元素0 0 1 1 2 2 3 3.
SMEMBERS set01 :查看set01中所有元素。
SISMEMBER set01 元素:判断元素是否在set01中。
SCARD set01 :查看set01中元素的个数。
SREM set01 0 :删除set01中的元素0。
SRANDMEMBER set01 3 :从set01中随机选出3个数。
SPOP set01 :从set01中随机选出一个元素。
SMOVE set02 set01 x :从set02中取出元素先,放入set01。
SDIFF set01 set02 :set01和set02取差值。
SINTER set01 set02 :set01和set02 取交集。
SUNION set01 set02 :set01和set02取并集。
  1. 字典Hash类型
    常用命令:
hset user id 1 :设置值,key为user,value为id 1。
hget user id :取值。
HMSET shop id 1 name bld size 100 :设置一组值,shop为设置的对象,id属性为1,name属性值为bld,size属性值为100。
HMGET shop id name size :获取shop对象的id、name、size属性值。
HGETALL shop :获取对象shop的所有值。
HDEL shop name :将对象shop中的name属性删掉。
HKEYS shop :查看所有的key。
HVALS shop :查看所有的值。
HINCRBY shop id 2 :为shop对象中id字段增加2。
HINCRBYFLOAT shop id 0.4 :为shop对象中的id字段增加小数0.4。
  1. 有序集合Sorted Set类型
    常用命令:
ZADD zset01 60 v1 70 v2 80 v3 90 v4 :添加元素。
ZRANGE zset01 0 -1 :查询所有的值。
ZRANGE zset01 0 -1 withscores :查询所有的键和值。
ZRANGEBYSCORE zset01 60 80 :查询一个区间的值。
ZRANGEBYSCORE zset01 60 (80 :查询一个区间的值,不包括结尾值。
ZREM zset01 v3 :删除zset01中的值v3。
ZCARD zset01 :统计zset01中的键值对个数。
ZCOUNT zset01 60 80 :统计zset01中两个键之间有多少键。
ZSCORE zset01 v4 :查看zset01中键v4对应的值。

如果需要查看其他的命令,可以官网查看:
Redis命令

Redis持久化

什么是Redis持久化?

所谓的持久化就是让数据一直有所保留,而不是因为外部的计算机断电等行为,造成数据的丢失。而计算机中的内存条是RAM随机存储器,内存这种东西可以随意存取,与存取的速度和地方都无关,但是一旦断电关机就会丢失数据。而磁盘是固定的,不会因为断电等行为使数据丢失。redis是内存数据库为了保持数据的持久化,肯定是要将数据从内存中读取再保存到磁盘上的,而这个过程就是redis的持久化。

快照方式持久化

快照方式又可以叫做Redis的RDB方式持久化。Redis默认就是开启这种快照方式持久化。
1. redis.conf配置快照持久化

20170507191128656.jpg
说明:
① 如果1个键key改变,那么隔900秒(15分钟)的时间就会将改变的值存储到硬盘。
② 如果10个键key改变,那么隔300秒(5分钟)的时间就会将改变的值存储到硬盘。
③ 如果10000个键key改变,那么隔10000秒的时间就会将改变的值存储到硬盘。
2. 快照持久化文件的路径
默认的RDB的文件路径是在当前目录,文件名是dump.rdb。
可以在redis.conf文件中配置:
20170813164917010.jpg
说明:
dbfilename 文件名
dir 文件路径
3. RDB文件的压缩
RDB文件可以通过 rdbcompression参数来禁用压缩的。
4. 快照的过程
① Redis使用fork函数复制一份当前进程(父进程)的副本(子进程)。
② 父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入到磁盘中的临时文件。
③ 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件。
5. 手动发起快照持久化
在redis中,我们也可以手动的发起快照保存,来保存我们的数据,常用的命令如下:
save : 手动进行快照操作。
bgsave:手动的采用异步方式进行快照操作。
lastsave : 获取最后一次成功执行快照的时间。
shutdown : 同步保存到服务器并关闭redis服务器。
bgrewriteaof : 当日志文件过长时优化AOF日志文件存储。
注意:save命令和bgsave命令的区别:
save命令是由主进程进行快照,会阻塞其他的请求。bgsave命令是由fork函数复制一份的子进程进行快照的。
6. 快照的数据恢复
Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存,一般情况下1GB的快照文件载入到内存的时间约为20~30秒钟。
7. 快照注意的问题
由于redis使用fork复制一份当前进程,那么子进程就会占有和主进程一样的内存资源,譬如主进程8G的内存,那么在备份的时候,必须保证有16G的内存,要不然就会启用虚拟内存,性能变差。
8. 快照持久化有哪些优缺点
① 优点:适合大规模的数据恢复。对数据的完整性和一致性要求不高。
② 缺点:由于rdb的方式是每隔一段时间进行一次数据备份的,如果redis突然down掉,那么丢失的最后一次快照后的修改就业丢失了。
AOF方式持久化

AOF方式是以日志的形式来记录每个写操作。将redis执行过的所有写指令都记录下来,读操作不记录。文件可以追加但是不可以修改文件。redis启动之时会读取文件重新构建数据。如果redis重启的话,将之前的写指令的操作,从头到尾恢复一遍完成备份。默认是关闭的。
1. 配置

20170507215251847.jpg
注意:
当aof方式和rdb方式共存的时候,先加载aof方式。
2. 重写AOF文件的方式
auto-aof-rewrite-percentage 100:当前AOF的文件大小超过了上一次重写时的AOF文件大小的百分之多少时会再次进行重写。如果之前没有重写过,那么则以启动时的AOF文件大小为依据。
auto-aof-rewrite-min-size 64MB:限制了允许重写的最小AOF文件大小,通常在AOF文件很小的时候即使其中有些冗余的命令也是可以忽略的。
3. 优化AOF文件
BGREWRITEAOF命令:重写aof文件,就是去除了数据的中间执行过程,保留最终数据命令即可。
4. AOF文件同步的配置
appendfsync always : 同步持久化,每次发生数据变更就被立即记录到磁盘。性能比较差,但是数据完整性比较好。
appendfsync everysec : 出厂默认推荐,异步操作,每秒往磁盘写入一次,如果一秒内出现宕机,数据就会丢失。在性能和持久化方面最了很好的折中
appendfsync no : 完全依赖操作系统,性能好的时候就持久,不好的时候就不持久化。
5. AOF同步的缺点
文件写入默认情况下会先写入系统缓存中,系统每30秒同步一次,才是真正的写入到了磁盘。即使每秒做文件同步也可能导致数据的丢失。
6. AOF文件修复
命令:redis-check-aof-fix 文件.aof

Redis事务管理

在单个操作中可以执行一个或者一组命令。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞。
① 事务中的所有命令作为单个隔离操作并按顺序执行。不可以在执行redis的事务中间向其他客户端发起请求。
② 不完全保证原子性,支持部分原子性,redis在同一个事务中,如果一条命令执行失败,那么其后的命令仍然会执行,却不会回滚。
监控命令:
WATCH XXX:监控XXX(watch可以监控一个及多个键)。给XXX上锁。watch这个命令类似于乐观锁,如果监控的key已经被修改了,那么整个监控的事务队列就不会继续执行下去了。也就是watch监控的键,只要有一个发生了改变,那么使用EXEC执行命令就会报出异常,让你基于当前更新后最新的值去操作。
UNWATCH XXX:取消监控。
注意:在执行了exec和unwatch之后,之前加的watch监控锁就会被消除了。

相关文章

  • Redis使用介绍

    目录: 1 Redis初识 1.1 Redis介绍 1.2 Redis功能特性介绍 1.3 Redis...

  • Redis从入门到应用

    初识Redis Redis概念 Redis安装 Redis的五种数据类型 操作Redis PHP的Redsi扩展 ...

  • 初识 Redis

    初识 Redis Redis 全称 REmote Dictionary Server. Redis 是一种基于键值...

  • Redis 初识

    初识 Redis 《 Redis 开发与运维》的学习笔记,希望大家多多指导。 什么是 Redis Redis 的全...

  • redis学习历程

    Redis初识 Redis安装与启动 Redis 常用API 理解与使用 Redis java客户端使用(单机版,...

  • 初识redis

    redis简介 redis是一种基于键值对key、value的NoSQL内存数据库,同时它会把内存的数据利用快照和...

  • 初识Redis

    Redis的安装和启动 这部分在之前的博客已经写过,这里不再赘述,提供两个以前的博客传送门。Redis的安装Red...

  • redis初识

    redis典型应用场景 1. 缓存系统 2. 计数器 3. 消息队列系统 4.排行榜 5.社交网络 6.实时系统 ...

  • Redis初识

    https://coding.imooc.com/learn/list/151.html Redis是什么 1.开...

  • Redis初识

    Redis的作者是Salvatore Sanfilippo(antirez)。该作者在制作一个网站中,发现他一开始...

网友评论

      本文标题:初识Redis

      本文链接:https://www.haomeiwen.com/subject/pxzgwftx.html