• Redis学习一(概要).


    一、简介

        Redis是一个开源的使用 ANSI C语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、key-Value 的数据库、并提供多种语言的API。

        Redis是一个运行在内存中的数据结构服务器(data structures server)。Redis使用的是单进程(除持久化时),所以在配置时,一个实例只会用到一个CPU。

        通常,Redis 将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据持久化:RDB(默认) 和 AOF 。

        Redis 为什么选用 6379 作为默认端口?因为 6379 在手机按键上 MERZ 对应的号码,而 MERZ 取自意大利歌女Alessia Merz的名字。

    二、特点

    • 支持数据的持久化,可以将内存中的数据保存到磁盘中,重启的时候可以再次加载进行使用。
    • 丰富的数据类型存储:string、list、set、zset、hash。
    • 支持数据的备份,即 master-slave 模式的数据的备份。
    • 性能极高 – Redis 读的速度是110000次/s,写的速度是81000次/s。
    • 所有的操作都是基于原子性的,因为 Redis 是单线程的。

    三、安装

    1、Window

    -- 服务端
      1、window下载地址:https://github.com/MicrosoftArchive/redis/releases
      2、打开一个 cmd 窗口,使用 cd 命令切换目录 E: edis 运行:redis-server.exe redis.windows.conf
    -- 客户端
      1、打开一个 cmd 窗口,使用 cd 命令切换目录 E: edis 运行:redis-cli.exe -h 127.0.0.1 -p 6379 -a 'mypassword'
      2、set myKey abc / get myKey

    2、Linux

    --服务端

    #1>
    yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl
    #2>
    wget http://download.redis.io/releases/redis-4.0.14.tar.gz tar -zxvf redis-4.0.14.tar.gz cd redis-4.0.14 #3>
    make
    cd src
    make install prefix=/usr/local/redis
    cd ../
    cp redis.conf /usr/local/redis/ #4> cd /usr/local/redis/bin ./redis-server ../redis.conf

    --客户端

    #1>
    cd /usr/local/redis/bin
    #2>
    ./redis-cli
    #3>
    redis> set foo bar
    OK
    redis> get foo
    "bar"

    四、值数据类型

    • string

    -- Redis 的 string 可以包含任何数据,比如 jpg 图片或者序列后的对象,一个 key 最大能存储512MB,但是大字符串非常不建议。

    • hash

    -- hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。每个 hash 可以存储 2^32-1 键值对 。

    • list

    -- list 是简单的 string 列表,按照插入的顺序可以在列表的头部(左边)或者尾部(右边)添加元素。

    • set

    -- set 是 string 类型的无序集合。集合是通过hash表实现的,所以。添加、删除、查找的复杂度都是O(1)。

    • zset

    -- zset 和 set 一样也是 string 的类型元素的集合,且不允许重复的队员,不同的是每个元素都会关联一个 double 类型的 score。redis 正是通过 score 来为集合中的成员进行从小到大的排序。分数(score)可以重复。添加元素到集合,元素在集合中存在则对应更新相应的 score。

    五、设计规范

    > key 命名规范:用 ":" 分隔域,用 "." 作为单词间的连接,如 " order:id:2:price "。不推荐含义不清的 key 和特别长的 key。 

    1. 第1段把表名转换为key前缀,如:order
    2. 第2段放置用于区分区key的字段,对应 mysql 中的主键的列名,如:id
    3. 第3段放置主键值,如:2,3,4....
    4. 第4段写要存储的列名,如:price

    > 只要有可能的话,就尽量使用散列键而不是字符串键来储存键值对数据,因为散列键管理方便、能够避免键名冲突、并且还能够节约内存。 

    如果将 redis 作为 cache 进行频繁读写和超时删除等,此时应该避免设置较大的 k-v(尽可能使用不要超过 1M 大小的 kv),因为这样会导致 redis 的 内存碎片增加,导致 rss 占用较大,最后被操作系统 OOM killer 干掉。

    > 尽可能使用批量操作:

    • mget、hmget而不是 get 和 hget,对于set也是如此
    • lpush 向一个 list 一次性导入多个元素,而不用 lset 一个个添加
    • lrange 一次取出一个范围的元素,也不用 lindex 一个个取出
    • 尽可能使用 pipeline 操作

    六、典型使用场景

    > 缓存。高频次数据优先访问 redis,redis 没有找到再访问数据库。

    > 排行榜。利用 zset 的 score 功能,维护多个维度的数据排行。

    > 计数器。redis的命令都是原子性的,可以轻松地利用 incrdecr 命令来构建计数器系统。

    > Uniq 操作。redisset 数据结构自动去重,不断地将数据往 set 中扔就行了。 

    > 网站访问统计等。利用 redis 的  HyperLogLog 高效的实现访问统计。

    > 实时消息系统。Redis Pub/Sub 系统可以构建实时的消息系统。

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

  • 相关阅读:
    Shell中调用、引用、包含另一个脚本文件的三种方法
    mysql基础
    传智博客(JavaWeb方面的所有知识)听课记录(经典)
    nginx配置负载均衡与反向代理
    nginx 详解
    iOS开发之集成ijkplayer视频直播
    Nginx配置文件nginx.conf中文详解(总结)
    WorldWind源码剖析系列:数学引擎类MathEngine
    WorldWind源码剖析系列:二维点类Point2d和三维点类Point3d
    WorldWind源码剖析系列:枚举类型
  • 原文地址:https://www.cnblogs.com/jmcui/p/8472909.html
Copyright © 2020-2023  润新知