美文网首页
初识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

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