天天看点

Redis复习笔记

好记性不如烂笔头

Redis:是一款高性能的NOSQL系列的非关系型数据库

概念:

  1. 什么是redis
    1. Redis:REmote DIctionary Server(远程字典服务器)
    2. 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。
    3. Redis 与其他 key - value 缓存产品有以下三个特点:
      • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用;
      • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储;
      • Redis支持数据的备份,即master-slave模式的数据备份;
  2. redis的应用场景
    1. 缓存(数据查询、短连接、新闻内容、商品内容等等)
    2. 聊天室的在线好友列表
    3. 任务队列。(秒杀、抢购、12306等等)
    4. 应用排行榜
    5. 网站访问统计
    6. 数据过期处理(可以精确到毫秒)
    7. 分布式集群架构中的session分离

下载安装

  • 官网:https://redis.io
  • 中文网:http://www.redis.net.cn/
  • 解压直接可以使用:
    • redis.windows.conf:配置文件
    • redis-cli.exe:redis的客户端
    • redis-server.exe:redis服务器端

启动后基础知识

  1. 单进程
    • 单进程模型来处理客户端的请求。对读写等事件的响应是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率;
    • epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率;
  2. redis数据库的一些概念及操作
    • 默认16个数据库,类似数组下表从零开始,初始默认使用零号库;
    • 统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上,redis默认端口是6379;
    • select命令切换数据库:

      select 0-15

    • dbsize

      :查看当前数据库的key的数量;
    • flushdb

      :清空当前库;
    • flushall

      ;通杀全部库;

Redis数据结构

redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构

1.字符串类型 string
  • string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value;
  • string类型是二进制安全的。意思是redis的string可以包含任何数据。如jpg图片或者序列化的对象 ;
  • string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M;
2. 哈希类型 hash : (map格式)
  • redis的hash 是一个键值对集合;
  • redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象;
  • 类似Java里面的Map<String,Object>;

3.列表类型 list :(linkedlist格式。支持重复元素)

  redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。它的底层实际是个链表。

4. 集合类型 set : (不允许重复元素)

  redis的set是string类型的无序集合。它是通过HashTable实现的。

4. 有序集合类型 sortedset:(不允许重复元素,且元素有顺序)
  • redis的sortedset和 set 一样也是string类型元素的集合,且不允许重复的成员;
  • 不同的是每个元素都会关联一个double类型的分数;
  • redis正是通过分数来为集合中的成员进行从小到大的排序。sortedset的成员是唯一的,但分数(score)却可以重复;

常用命令操作

redis常见数据类型操作命令参考网址http://redisdoc.com/

  • 字符串类型 String

    1.

    SET key value

    (存储:将字符串值 value 关联到 key)

    2.

    GET key

    (获取:返回与键 key 相关联的字符串值)

    3.

    DEL key

    (删除:删除给定的 key )

    4.

    APPEND key value

    ( APPEND 命令将把 value 追加到键 key 现有值的末尾,没有 key 就自动添加)

    5.

    STRLEN key

    (返回键 key 储存的字符串值的长度)
  • 哈希类型 hash

    1.

    HSET key field value

    (存储:将哈希表 hash 中域 field 的值设置为 value)

    2.

    HGET key field

    (获取:获取指定的field对应的值)

    3.

    HDEL key field

    (删除:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略)

    4.

    HMSET key field value [field value …]

    (同时将多个 field-value (域-值)对设置到哈希表 key 中)

    5.

    HMGET key field [field …]

    (返回哈希表 key 中,一个或多个给定域的值)

    6.

    HGETALL key

    (返回哈希表 key 中,所有的域和值)
  • 列表类型 list

    1.

    LPUSH key value

    (添加:将元素加入列表左边

    表头

    2.

    RPUSH key value

    (添加:将元素加入列表右边

    表尾

    3.

    LRANGE key start stop

    (返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定)

    4.

    LPOP key

    (删除:删除列表最左边的元素,并将元素返回)

    5.

    RPOP key

    (删除:删除列表最右边的元素,并将元素返回)

    6.

    LINDEX key index

    (返回列表 key 中,下标为 index的元素)
  • 集合类型 set

    1.

    SADD key member [member …]

    (存储:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member元素将被忽略)

    2.

    SMEMBERS key

    (获取:返回集合 key 中的所有成员)

    3.

    SREM key member [member …]

    (移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略)

    4.

    SISMEMBER key member

    (判断 member元素是否集合 key 的成员)
  • 有序集合类型 sortedset

    1.

    ZADD key score member [[score member] [score member] …]

    (储存:将一个或多个 member 元素及其 score 值加入到有序集 key 当中)

    2.

    ZRANGE key start stop [WITHSCORES]

    (获取:返回有序集 key 中,指定区间内的成员,其中成员的位置按

    score

    值递增(从小到大)来排列)

    3.

    ZREM key member [member …]

    (删除:移除有序集 key 中的一个或多个成员,不存在的成员将被忽略)
  • redis 键(key) --常用命令介绍

    1.

    keys *

    :查看所有 key ;

    2.

    exists key的名字

    :判断某个 key 是否存在;

    3.

    move key dbID(0-15)

    : 当前库就没有了,被移除了;

    4.

    expire key 秒钟

    : 为给定的 key 设置过期时间;

    5.

    ttl key

    : 查看还有多少秒过期,-1表示永不过期,-2表示已过期;

    6.

    type key

    : 查看你的 key 是什么类型;

持久化

redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

  • RDB

    (Redis DataBase)

    在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里;

    RDB保存的是dump.rdb文件;

    Redis会单独创建(

    fork

    )一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失;

    fork:复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程;

  1. 在一定的间隔时间中,检测key的变化情况,然后持久化数据
    1. 编辑redis.windwos.conf文件
      #   after 900 sec (15 min) if at least 1 key changed
       		save 900 1
       		#   after 300 sec (5 min) if at least 10 keys changed
       		save 300 10
       		#   after 60 sec if at least 10000 keys changed
       		save 60 10000
                 
    2. 重新启动redis服务器,并指定配置文件名称
D:\redis\windows-64\redis-2.8.9>redis-server.exe redis.windows.conf	
           
  • AOF

    (Append Only File)

    以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作(AOF保存的是appendonly.aof文件);
  • 编辑redis.windwos.conf文件

    appendonly no(关闭aof)

    -->

    appendonly yes (开启aof)

    # appendfsync always

    : 每一次操作都进行持久化

    appendfsync everysec

    : 每隔一秒进行一次持久化

    # appendfsync no

    : 不进行持久化