zoukankan      html  css  js  c++  java
  • 我与狗子的日常3

    Redis 进阶之路

    Redis安装

    redis简介:

           redis是NOSQL(not only sql,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据,当前主流的分布式缓存技术有Redis, memcached,ssdb,mongodb 等。可以把redis理解为缓存技术,因为它的数据都是缓存在内存中,也可以理解为数据库,因为redis可以周期性的将数据写入磁盘或者把操作追加到记录文件中。

    redis与其他key-value的缓存产品相比有以下三个特点:

           1.Redis支撑数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

           2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list set zset hash等数据结构的存储。

           3.Redis支持数据的备份,即master-slave模式的数据备份。

     

    优点:

    性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s。

    丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作

    原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来

    丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性

    Linux 下安装redis

    编译源程序:

    [root@localhost ftpuser]# tar zxvf redis-3.2.0.tar.gz

    [root@localhost ftpuser]# cd redis-3.2.0

    [root@localhost redis-3.2.0]# make

    [root@localhost redis-3.2.0]# cd src && make install

    创建目录存放redis命令和配置文件

    [root@localhost redis-3.2.0]# mkdir -p /usr/local/redis/bin

    [root@localhost redis-3.2.0]# mkdir -p /usr/local/redis/etc

    移动文件:

    [root@localhost redis-3.2.0]# mv redis.conf /usr/local/redis/etc

    [root@localhost redis-3.2.0]# cd src

    [root@localhost src]# mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel redis-trib.rb /usr/local/redis/bin

    启动redis:

    [root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

    验证是否启动成功:

    [root@localhost ~]# ps -ef | grep redis

    #或者

    [root@localhost ~]# netstat -tunpl | grep 6379

    Redis客户端连接:

    [root@localhost ~]# /usr/local/redis/bin/redis-cli -h 192.168.2.128 -p 6379

    192.168.2.128:6379> info

    # Server

    redis_version:3.2.0

    redis_git_sha1:00000000

    停止redis:

    [root@localhost ~]# /usr/local/redis/bin/redis-cli shutdown

    #或者

    [root@localhost ~]# pkill redis-server

    redis数据结构(内存模型)及常用命令

    redis数据类型:

    redis支持的数据类型有五种:String、List、Hash、Set和Sorted Set.

    Redis 数据类型内存结构分析:

           Redis内部使用一个RedisObject对象来表示所有的key和value,redisObject主要的信息包括数据类型type 编码方式encoding 数据指针ptr 虚拟内存vm 等。type表示value的数据类型。

    String:是最常用的一种数据类型,普通的key/value存储都可以归为此类。

    string类型的值最大能存储512MB

    1. SET key value

    设置指定 key 的值

    2. GET key 
    获取指定 key 的值。

    3. GETSET key value
    将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

    4. SETEX key seconds value
    将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。

    5.SETNX key value
    只有在 key 不存在时设置 key 的值。

    6. STRLEN key
    返回 key 所储存的字符串值的长度。

    Hash:redis hash是一个键值对集合 string类型的field 和 value的映射表,hash特别适合用于存储对象。

    每个 hash可以存储232-1 个键值对(40多亿)

    1. HDEL key field1 [field2] 
    删除一个或多个哈希表字段

    2. HEXISTS key field 
    查看哈希表 key 中,指定的字段是否存在。

    3. HGET key field 
    获取存储在哈希表中指定字段的值。

    4. HGETALL key 
    获取在哈希表中指定 key 的所有字段和值

    5. HKEYS key 
    获取所有哈希表中的字段

    6. HLEN key 
    获取哈希表中字段的数量

    7. HMSET key field1 value1 [field2 value2 ] 
    同时将多个 field-value (域-值)对设置到哈希表 key 中。

    8. HSET key field value 
    将哈希表 key 中的字段 field 的值设为 value 。

    9. HSETNX key field value 
    只有在字段 field 不存在时,设置哈希表字段的值。

    10. HVALS key 
    获取哈希表中所有值

    11. HSCAN key cursor [MATCH pattern] [COUNT count] 
    迭代哈希表中的键值对。

    List:Redis列表是简单的字符串列表。按照插入顺序排序。

    插入数据:Lpush 列表名 value

    查询数据:lrange 列表 0 10

    List 最多可存储232-1 个元素

    1. BLPOP key1 [key2 ] timeout 
    移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

    2. BRPOP key1 [key2 ] timeout 
    移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

    3. LINDEX key index 
    通过索引获取列表中的元素

    4. LLEN key 
    获取列表长度

    5. LPOP key 
    移出并获取列表的第一个元素

    6. LPUSH key value1 [value2] 
    将一个或多个值插入到列表头部

    7. LSET key index value 
    通过索引设置列表元素的值

    8. LTRIM key start stop 
    对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

    9. RPOP key 
    移除并获取列表最后一个元素

    10. RPUSH key value1 [value2] 
    在列表中添加一个或多个值

    11. RPUSHX key value 
    为已存在的列表添加值

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

    Sadd: 添加一个key到对应的set集合,返回1表示成功,返回0表示元素已存在集合中。如果key对应的集合不存在,则返回错误。

    Set集合的最大成员是数为232-1 个元素。

    1. SADD key member1 [member2] 
    向集合添加一个或多个成员

    2. SCARD key 
    获取集合的成员数

    3. SDIFF key1 [key2] 
    返回给定所有集合的差集

    4. SDIFFSTORE destination key1 [key2] 
    返回给定所有集合的差集并存储在 destination 中

    5. SINTER key1 [key2] 
    返回给定所有集合的交集

    6. SINTERSTORE destination key1 [key2] 
    返回给定所有集合的交集并存储在 destination 中

    7. SISMEMBER key member 
    判断 member 元素是否是集合 key 的成员

    8. SMEMBERS key 
    返回集合中的所有成员

    9. SMOVE source destination member 
    将 member 元素从 source 集合移动到 destination 集合

    10. SPOP key 
    移除并返回集合中的一个随机元素

    11. SRANDMEMBER key [count] 
    返回集合中一个或多个随机数

    ZSet:有序结合 Zset的每个元素都会关联一个double类型的分数,redis正是通过分数来为集合的成员进行从小到大的排序,Zset的成员是唯一的,但分数可以重复。

    1. ZADD key score1 member1 [score2 member2] 
    向有序集合添加一个或多个成员,或者更新已存在成员的分数

    2.ZCARD key 
    获取有序集合的成员数

    3. ZCOUNT key min max 
    计算在有序集合中指定区间分数的成员数

    4. ZRANK key member 
    返回有序集合中指定成员的索引

    5. ZSCORE key member 
    返回有序集中,成员的分数值

    6. ZREVRANGEBYSCORE key max min [WITHSCORES] 
    返回有序集中指定分数区间内的成员,分数从高到低排序

    Redis键

    Redis键命令的基本语法如下:

    Command key_name

    1.del key:当key存在时,删除key

    2.dump key: 序列化key,并返回被序列化的值

    3.exists key: 检查key是否存在

    4.expire key seconds:为key设置过期时间

    5.keys pattern: 查找所有符合给定模式的key

    6.move key db: 将当前的数据库的key移动到给定的数据db中

    7.persist key:移除key的过期时间,key将持久保持

    8.randomkey:从当前数据库随机返回一个key

    9.rename key newkey:修改key的名称

    10.renamenx key newkey: 仅当newkey 不存在时,将key改名为newkey

    11.type key:返回key所存储的的类型

    Redis 事务

    Redis事务可以一次执行多个命令

    批量操作再发送EXEC命令前被放入队列缓存;

    收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行;

    在事务执行过程中,其他客户端提交的命令请求不会插入到事务执行的命令序列中;

    一个事务从开始到执行的三个阶段:

    开始事务à命令入队à执行事务

    原子性:

    单个Redis命令的执行是原子性的,但Redis在事务上没有增加任何维持原子性的机制,所以Redis事务的执行并不是原子性的。

    Redis官网的说明:

    It's important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.

     

    Eg:

    multi

    set a aaa

    set b bbb

    set c ccc

    exec

    如果set b bbb 失败了,则set a aaa 不会回滚,set c ccc 还会继续执行

    Redis 事务命令:

    DISCARD 取消事务,放弃执行事务块内的所有命令

    EXEC 执行所有事务块内的命令

    MULTI 标记一个事务块的开始

    UNWATCH 取消WATCH 命令对所有key的监视

    WATCH KEY[ KEY…..] 监视一个或多个key,如果在事务执行之前这些key被其他命令所改动,那么事务将被打断。

    Redis数据备份与恢复

    Save 命令用于创建当前数据库的备份

    语法: save

    该命令将在redis安装目录中创建dump.rdb文件

    恢复数据

    只需将备份文件(dump.rdb)移动到安装目录并启动服务即可,获取redis目录可以使用config命令  config get dir

    Redis 管道技术

    redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务,遵循以下步骤:

    客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应;

    服务端处理命令,并将结果返回给客户端。

    略……

  • 相关阅读:
    [转]EntityFramework之领域驱动设计实践
    [转]个人源码管理:如何在本机配置自己的SVN Repository (图解)
    [转]ASP.NET MVC Bootstrap极速开发框架
    聚沙成塔 现在造就未来
    sql server 判断及增加列的默认值约束
    [转]asp.net URL中包含中文参数造成乱码的解决方法
    [转]URL汉字编码问题(及乱码解决)
    [转]AngularJS 使用 UI Router 实现表单向导
    [转]AngularJS+UI Router(1) 多步表单
    [转]How to Create Custom Filters in AngularJs
  • 原文地址:https://www.cnblogs.com/zhaiyt/p/redis.html
Copyright © 2011-2022 走看看