业精于勤,荒于嬉;行成于思,毁于随
            -- 韩愈·《进学解》
 
  因为工作中需要用到Redis,所以最近抽点时间看了一下,现在将学习的内容整理一下。
 
一、简介
1、Redis是什么?
  Redis是一个内存中的key-value型数据结构存储系统,可以用作数据库、缓存和消息中间件。官方网站:redis.io,中文网站:redis.cn
 
2、为什么要使用Redis?
    - 多功能:可用作数据库、缓存和消息中间件(用于进程间通信);
    - 支持多种类型的数据结构,比如:strings、hashes、lists等;
    - 支持大多数的编程语言,比如:C/C++、Java、Python等;
    - 提供了不同级别的持久化(落地)方式来保证数据安全;
    - 通过redis哨兵和自动分区提供高可用性;
    - 原子操作,保证数据的正确性;
 
3、下载和安装(debian)
下载: $ sudo apt-get install redis-server 
配置:redis的配置文件是 redis.conf ,文件中包含了所有可能用到的参数和详细的解释
启动: $ redis-server 
连接: $ redis-cli 
 
二、支持的数据结构
  Redis是一种key-value存储系统,并且Redis的key是二进制安全的,可以使用任何的二进制序列作为key,普通字符串甚至JPEG文件。redis支持多种类型的数据结构:strings、lists、sets、sorted sets、hashes、bitmaps、hyperloglogs。
 
1、strings - 字符串
strings类型的value和key一样,可以是任何类型的字符串。
 示例:
> SET name aut #设置 name 的值为 aut
> GET name #获取 name 的值
> SET age #设值
> INCR age # num 自增
> MSET name aut age #同时对多个key设值
用途举例:计数器,存储图片等二进制文件
 
2、lists - 列表
一个key-value列表,支持两端的添加和删除、范围内取值等操作
 示例:
> RPUSH study redis #右端插入
> LPOP study #左端删除
> LRANGE study #取出范围内的值,下标从0开始,-n表示倒数第n个位置
> LTRIM study #从左边截取指定长度
用途举例:进程间通信的消息队列,博客引擎中存储评论
 
3、hashes - 散列表
hashes中的一个key可以对应一个包含多个“字段 - 值”对的结构,其包含的“字段 - 值”对数只受内存限制
 示例:
> HMSET user: name aut school xupt age #设置字段的值
> HGET user: name #获取单个字段的值
> HMGET user: name school #获取多个字段的值
> HGETALL user: #获取所有字段的值
> HINCRBY user: age #将指定字段递增某个数值
用途举例:存储用户信息、物品信息
 
4、sets - (无序)集合
sets用于存储无序并且无重复的数据,提供了集合内的插入删除,集合间的交并等操作
 示例:
> SADD score #插入元素
> SMEMBERS score #获取所有元素
> SISMEMBER score #测试某个元素是否在集合中
> SINTER score1 score2 #获取两个集合的交集
> SRANDMEMBER score #随机获取集合中的一个元素
用途举例:存储具有某种共同属性的所有对象
 
5、sorted sets - (有序)集合
sorted sets使用一个浮点数score来对集合内的元素进行排序,当score相同时按字母序进行排序
 示例:
> ZADD user aut #插入元素,如果元素已经存在,则更新score
> ZRANGE user - #获取指定范围内的元素
> ZRANK user aut #获取指定元素的排名
> ZRANGEBYSCORE user -inf withscores #获取score大于等于2000的元素,并把score一并打印出来
用途举例:存储排名信息
 
6、bitmaps - 位图
bitmaps以位为单位来实现某些标记功能,提供了设值/取值、统计等操作
 示例:
> SETBIT key #设置指定位为1
> GETBIT key #获取指定位的值
> BITCOUNT key #统计指定元素的位为1的位数
用途举例:标记用户ID(是否已注册、在线还是离线)
 
7、hyperloglogs - (不知道该怎么翻译~~)
hyoerloglogs通过输入元素计算出输入元素的基数估算值,详情参考:redis数据结构HyperLogLog
 示例:
> PFADD str1 "apple" "banana" "cherry" #添加元素
> PFCOUNT str1 #统计str1的近似基数
> PFMERGE str1& str1 str2 #将str1和str2合并到str1&2中
用途举例:统计访问网站的独立IP数量
 
其他常用操作:
 > EXISTS key       #检查key是否存在
> DEL key #删除key
> TYPE key #检测key的类型
> EXPIRE key #设置key的有效时间为5秒
> TTL key #获取key的剩余有效时间
更多的命令使用方法请参阅 命令
 
三、磁盘持久化
  由于 Redis 是一个内存中的数据结构存储系统,所有数据都在内存中操作,当需要把数据永久保存下来的时候,就需要使用 Redis 持久化功能。持久化就是把数据从内存写入到磁盘,也被称为“落地”,Redis 提供了以下几种持久化方式:
    - RDB:在指定的时间间隔内对数据进行快照存储;
    - AOF:在每次对记录的写操作之后都将操作命令写入日志文件;
    - 不使用持久化:记录只在服务器运行时存在于内存;
 
1、RDB
  RDB持久化在指定的时间间隔内(或者满足某个指定条件时)将数据保存到一个名为dump.rdb的二进制文件中。
工作方式:
  ①Redis fork 一个子进程;
  ②子进程将数据集写入一个临时RDB文件中;
  ③Redis 用新的RDB文件替换原来的RDB文件,并删除旧文件。
优点:
    - RDB文件紧凑且单一,可以方便地传送到其他备份中心,适用于灾难恢复;
    - 持久化工作由子进程完成,保证最大化Redis的性能;
    - 当恢复比较大的数据集的时候,由于RDB是直接恢复,速度会更快一些(较AOF);
缺点:
    - 如果持久化间隔较大的话,容易丢失过多数据;
    - 而如果持久化太频繁,则不断的fork会严重降低Redis的性能;
使用建议:每天保存过去一段时间的数据,每小时保存过去24个小时的数据,再搭配AOF一起使用。
 
2、AOF
  AOF在每次执行完改变数据集的命令后(具体有不同的策略),都将该命令追加到AOF文件的末尾,也就是保存操作的命令,恢复时通过重新执行保存的命令来恢复文件。
工作方式:
  ①Redis fork一个子进程,子进程创建新的AOF文件;
  ②子进程将原来的AOF文件内容写入新文件中;
  ③Redis将执行过的修改命令写入新文件中;
  ④Redis删除旧文件。
优点:
    - 多种不同的fsync策略使得丢失的数据量降到最小;
    - AOF文件仅仅是追加命令,所以节省空间,并且容易被人读懂,方便恢复;
    - Redis可以在AOF文件体积变得过大时,自动在后台对AOF进行重写,重写后的AOF文件仅仅包含了恢复当前数据集的最小命令集合;
缺点:
    - 由于保存的是命令,所以AOF文件比RDB文件要大;
    - 根据使用的fsync策略,AOF的速度可能会慢于RDB;
使用建议:使用每秒fsync的策略。
 
关于持久化的建议:
    - 如果数据只有在服务器运行时存在,那么不用选择持久化;
    - 如果可以承受数分钟内数据丢失,那么可以只使用RDB持久化;
    - 如果要求数据实时更新,那么可以使用每秒fsync策略的AOF持久化;
    - 具体可以根据应用场景将两种持久化方式配合使用。
 
总结:根据网友资料得到下面的结论,参考地址:Redis与Memcached的区别
  ①Redis的最佳使用场景是全部数据in-memory;
  ②Redis的更多场景是作为Memcached的替代者来使用;
  ③当需要更多的数据类型支持时,Redis更合适;
  ④当存储的数据不能被剔除时,使用Redis更合适。
 
(全文完)

Redis学习 - 入门的更多相关文章

  1. [转载] redis学习入门 Redis 3.2.100

    参考博客: https://blog.csdn.net/flyer_tang/article/details/80320974 https://blog.csdn.net/weixin_3077313 ...

  2. redis 学习入门篇

    基本概念 redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库(非关系性数据库). redis的特点 速度快,因为数据存在内存中,读写数据的时候都不 ...

  3. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

  4. Java中Redis简单入门

    Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案. Redis官方网网站是:http://www.redis.io/,如下: Redis ...

  5. Redis 快速入门

    Redis 快速入门 谈到Redis,大家应该都不陌生.它是用c语言开发的一个高性能键值数据库,主要用于缓存领域.本章通过Redis的安装,Redis的五大数据类型,Redis的Java客户端,Red ...

  6. Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash

    引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...

  7. .NET分布式缓存Redis从入门到实战

    一.课程介绍 今天阿笨给大家带来一堂NOSQL的课程,本期的主角是Redis.希望大家学完本次分享课程后对redis有一个基本的了解和认识,并且熟悉和掌握 Redis在.NET中的使用. 本次分享课程 ...

  8. ASP.Net Core使用分布式缓存Redis从入门到实战演练

    一.课程介绍 人生苦短,我用.NET Core!缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力.  所以经常要用到且不会频繁改变且被用户共享的 ...

  9. redis学习(一)

    Redis学习内容: 1. 概念 2. 下载安装R 3. 命令操作 1. 数据结构 4. 持久化操作 5. 使用Java客户端操作redis 1. 概念: redis是一款高性能的NOSQL系列的非关 ...

随机推荐

  1. [LeetCode#55, 45]Jump Game, Jump Game II

    The problem: Given an array of non-negative integers, you are initially positioned at the first inde ...

  2. ♫【Backbone】this

    Backbone.js Event Binding MyView = Backbone.View.extend({ events: { 'click .item': 'handleClick' }, ...

  3. POJ 2762 Going from u to v or from v to u?(强联通 + TopSort)

    题目大意: 为了锻炼自己的儿子 Jiajia 和Wind 把自己的儿子带入到一个洞穴内,洞穴有n个房间,洞穴的道路是单向的. 每一次Wind 选择两个房间  x 和 y,   让他的儿子从一个房间走到 ...

  4. 数据结构(trie,启发式合并):HDU 5841 Alice and Bob

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABJEAAAE6CAIAAAApz1RvAAAgAElEQVR4nO3d3css1b3g8fyTdbHJbD

  5. CodeForces 587A

    题目链接: http://codeforces.com/problemset/problem/587/A 题意: 输入n个数,在这n个数中,寻找有多少个数不能消除掉 消除方法:两个相同的数消除后,生成 ...

  6. SPJ

    1. ∏sno(δjno='j1'(spj))2. ∏sno(δpno='p1'(δjno='j1'(spj)))3. ∏sno(δjno='j1'(spj)∞δcolor='红'(p))4. ∏jn ...

  7. LeetCode (85): Maximal Rectangle [含84题分析]

    链接: https://leetcode.com/problems/maximal-rectangle/ [描述] Given a 2D binary matrix filled with '0's ...

  8. 怎样在loop中处理异常

    怎样在loop中处理异常,而不跳出 出现符号“exception”在需要下下列之一时的解决办法; 如果sql中发生异常,我们可以用 exception       when others then d ...

  9. js~一个列表中包含上移下移删除等功能

    最近做了一个项目,包括了一个列表页,为了用户体验,操作均使用JS实现,其中包括在列表中实现上移,下移,删除等功能,前台JS,后端数据修改使用AJAX,本文主要说一下前台JS这块 先看一下页面的截图

  10. android.view.WindowLeaked解决办法

    08-07 14:51:28.129: E/WindowManager(22277): Activity com.xxx.xxx.xxx.xxx.LoginActivity has leaked wi ...