一篇足以之 redis学习

                                          一篇足以之redis学习

1.简介

开源、C语言编写,key-value数据库

2.优势

性能高:Redis的读写速度分别是110000次/秒 // 81000次/秒

原子性:redis的所有操作都是原子性的,因为redis是单线程

    扩展:为什么redis不是多线程的?

   redis 核心就是 如果我的数据全都在内存里,我单线程的去操作 就是效率最高的,为什么呢,因为多线程的本质就是 CPU 模拟出来多个线程的情况,这种模拟出来的情况就有一个代价,就是上下文的切换,对于一个内存的系统来说,它没有上下文的切换就是效率最高的。redis 用 单个CPU 绑定一块内存的数据,然后针对这块内存的数据进行多次读写的时候,都是在一个CPU上完成的,所以它是单线程处理这个事。在内存的情况下,这个方案就是最佳方案 —— 阿里 沈询

丰富的特性,Redis支持publish/subscribe(发布/订阅)、通知、key过期等特性。

支持丰富的数据类型的数据存储:(String)、哈希(Map)、列表(list)、集合(sets)、有序集合(sorted sets)等类型

3.特点

3.1 支持数据的持久化,可以将内存中的数据保存到磁盘中,重启时可以再次加载使用

3.2 Redis支持数据库备份,也就是master-slave(主从)模式的数据备份。(从redis中只能进行读)

4.应用场景

     会话缓存机制

     消息队列

     排行榜或者计数

     发布订阅消息

5.基础语法

    set  key  value

    get  key  value

    del   key   返回值是删除的key的数量

    keys  *    查询所有的key

    DUMP    key     序列化键值

    exists  key   查看key存在不存在

    expire key 过期时间[单位/秒]     给key设置过期时间,过期了就不再可用

    persist key    移除过期时间

    pttl  key     查询过期时间

    rename   key    newkey

    type key   显示value的类型  

6.不同数据类型的应用场景

     1.String

key-value类型   value不仅可以是string也可以是数字

常用命令:set   get  incr   decr   mget

使用场景:  常规key-value缓存应用。常规计数: 微博数, 粉丝数。

     2.Hash

常用命令: hget  hset  hgetall

Redis的Hash实际上是内部存储的value是一个hashmap

使用场景:存储部分变更数据,如用户信息等。

     3.List

常用命令:lpush,rpush,lpop,rpop,lrange等。

list是链表,可以用作消息队列。

业务中可以用一个线程用push来保存数据,在用一个工作线程用pop操作来去list里面的数据。

redis还提供了操作list中某一段的api,可以直接查询、删除某一段的元素

使用场景:使用list可以构建队列系统,使用sorted set甚至可以构建有优先级的队列系统。

比如:将Redis用作日志收集器

实际上还是一个队列,多个端点将日志信息写入Redis,然后一个worker统一将所有日志写到磁盘。

     4.set

常用命令:sadd,spop,smembers,sunion 等。

set的功能跟List差不多,都是列表,特别之处在于set具有自动排重的功能,并且set提供了判断了判断某个元素是否在set集合内的接口

      5.Sorted Set

常用命令:zadd   zrange   zrem   zcard

与set的区别在于  sorted可以提供一个参数(score)来为成员排序,而且是插入有序的

7.redis的持久化机制

两种:RDB(Redis DataBase)和AOF(Append Only File),配置在redis.conf文件中

RDB:将数据以快照的形式保存下来。

           RDB持久化是指在指定时间间隔内将内存中的数据快照写入磁盘,保存在一个二进制文件中,默认的文件名dump.rdb

           触发机制:save   bgsave  自动化

1.save:

该命令会阻塞当前redis服务器,执行save期间,redis不能处理其他命令。执行完成后如果存在老的RDB文件,会被新的替代。

2.bgsave:

这个命令会让redis在后台异步进行快照处理,快照的同时还可以响应客户端请求。

具体操作是redis进程通过fock()操作创建子进程来进行RDB持久化,完成后自动结束子进程

3.自动触发:

自动触发是通过配置文件redis.conf来完成的。

AOF: redis会将每一个收到的写命令都通过write函数追加到文件中。

          存在一个问题,就是文件会越来越大,为了压缩AOF文件,redis提供了一个命令bgrewhiteaof  

          将内存中的数据以命令的方式保存到临时文件中,同时会fork出一条新进程来将文件重写。

触发机制:

(1)每修改同步always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好

(2)每秒同步everysec:异步操作,每秒记录 如果一秒内宕机,有数据丢失

(3)不同no:从不同步

RDB和AOF如何选择:

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值