乐趣区

大数据系列Redis学习笔记

1. Redis 的简介

  •    Redis 是一个开源(BSD 许可),内存存储的数据结构服务器, 可用作数据库,高速缓存和消息队列代理
  • 它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs 等数据类型
  • 内置复制、Lua 脚本、LRU 收回、事务以及不同级别磁盘持久化功能,同时通过 Redis Sentinel 提供高可用,通过 Redis Cluster 提供自动分区。
  • 简言之,Redis 是一种面向“键 / 值”对数据类型的内存数据库,可以满足我们对海量数据的快速读写需求

2. Redis 的特点

  • Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  • Redis 不仅仅支持简单的 k - v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储
  • Redis 支持数据的备份,即 master-slave 主从模式的数据备份

3. Redis 的优势

  • 性能极高——Redis 读的速度为 11w/s,写的速度为 8.1w/s
  • 丰富的数据类型 (Strings,Lists,Hashes,Sets 即 Ordered Sets)
  • 原子性——Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作合并后的原子性执行
  • 丰富的特性——Redis 还支持 publish/subscribe,通知,key 过期等特性。

4. 常用的 NoSql 数据库

  • hbase

    • 存储海量的数据(数十亿行, 百万列)
  • redis

    • 基于内存的 nosql 数据库
    • 一般使用 redis 做 缓存或者队列
  • mogodb

    • 在结构化数据比较简单的情况下, 可以使用 mogodb 代替 mysql, 作为一个高性能的数据库

5. Redis 的安装

5.1 Redis 单机版的安装

  • 准备源码安装包

    ​ redis-3.2.0.tar.gz

  • 解压

    ​ tar -zxvf redis-3.2.0.tar.gz -C /opt/

  • 重命名

    ​ mv redis-3.2.0/ redis

  • 安装 gcc 编译器

    ​ yum -y install gcc

  • 编译安装源码

    ​ make && make install

    注意: 编译安装完成之后会在 src 目录下出现 redis 的相关命令

  • 修改 redis.conf 的配置项

    bind node1   (默认是 127.0.0.1, 这是本地回环地址, 只能本地应用程序之间进行通信)
    daemonize yes(后台运行)logfile   /opt/redis/logs/redis.log(日志文件,目录必须存在)    
  • 启动 Redis-Server

    src/redis-server redis.conf

  • 启动 redis 客户端

    src/redis-cli -h uplooking05 -p 6379

5.2 Redis 集群的安装

  • 把前面安装好的单机版的 redis 拷贝到 uplooking04 uplooking03
  • 修改 redis.conf

bind uplookingxxxxx

  • 在从节点(uplooking04 uplooking05) redis.conf 末尾追加

slaveof uplooking03 6379

  • 修改从节点为只读不写(redis 官方推荐的)(uplooking04 uplooking05)

slave-read-only yes

  • 修改主节点(uplooking03)

slave-read-only no

ps: 注意启动集群时尽量先启动主节点再启动从节点

6. Redis 中配置的查看

Redis 的配置文件位于 Redis 的安装目录之下,文件名为 redis.conf。可以通过 config 命令来查看或设置配置项

config get confName: 获取配置的值

config set confName confVal: 设置配置的值

7. Redis 中的数据类型

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set(集合)
  • zset(sorted set)有序的集合

8. 数据类型之 String(字符串)

  • string 是 redis 中最基本的数据类型
  • 一个 key 对应一个 value
  • string 类型的 value 是基于二进制存储的, 所以完全可以存储图片和影音等二进制数据
  • key 的大小最大 512mb
  • 存储数据: set name value
  • 读取数据: get name
  • 删除 redis 中的 key 说对应的 value: del key

9. 数据类型之 Hash(哈希)

  • Redis hash 是一个键值对集合。Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象 object
  • 存储一个数据: HSET KEY fieldName value
  • 获取数据: HGET KEY fieldName
  • 设置多个数据: HMSET info sex nan address gansu
  • 获取多个数据: HMGET info sex address
  • 删除 hash 中的多个个键值对: HDEL info admin …
  • 删除 redis 中的 key 说对应的 value: del key

10. 数据类型之 List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

  • 首部添加数据: LPUSHloves java c++ python..
  • 尾部添加元素: RPUSH linux hadoop..
  • 查看数据: lrange loves 0 10000
  • 首部移除元素: LPOP loves
  • 尾部移除元素: RPOP loves

列表最多可存储 232- 1 元素 (4294967295, 每个列表可存储 40 多亿)。

11. 数据类型之 Set(集合)

Redis 的 Set 是 string 类型的无序集合。

  • 集合中添加元素: SADD key member member ,member …
  • SMEMBERS loves
  • 集合中的元素是不能重复, 如果添加的 value 已经存在在 redis 中则返回 0, 不存在则返回 1

12. 数据类型之 ZSet(有序集合)

  • Redis zset 和 set 一样也是 string 类型元素的集合, 且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序
  • zset 的成员是唯一的, 但分数 (score) 却可以重复
  • 给 zset 添加数据: ZADD loves 5 java
  • 获取固定得分范围的数据: ZRANGEBYSCORE loves 1 20

13. Redis 中的常用命令

13.1 键值对相关

  • keys * 取出当前所有的 key
  • exists name 查看 redis 是否有 name 这个 key
  • del name 删除 key name
  • expire confirm 100 设置 confirm 这个 key100 秒过期
  • ttl confirm 获取 confirm 这个 key 的有效时长
  • persist confirm 移除 confirm 这个 key 的过期时间
  • select 0 (在 redis 中总共有 16 个数据库, 默认是 0 号数据库)
  • move confirm 1 将当前数据库中的 key 移动到其他的数据库中
  • randomkey 随机返回数据库里面的一个 key
  • rename key2 key3 重命名 key2 为 key3
  • type key2 返回 key 的数据类型

13.2 服务器相关

  • select 0~15 编号的数据库
  • quit /exit 退出客户端
  • dbsize 返回当前数据库中所有 key 的数量
  • info 返回 redis 的相关信息
  • ==flushdb 删除当前选择数据库中的所有 key==
  • ==flushall 删除所有数据库中的数据 ==

14. Reds 中的 API 操作

  • pom 依赖

    <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>
  • 常用操作

    package com.uplooking.bigdata.redis;
    
    import org.junit.Test;
    import redis.clients.jedis.Jedis;
    
    public class RedisTest {
        @Test
        public void testString() {
            // 创建 Jedis
            Jedis jedis = new Jedis("uplooking03");
            jedis.select(0);
            jedis.set("name", "value");
            System.out.println(jedis.get("name"));
        }
    
    
        @Test
        public void testHash() {
            // 创建 Jedis
            Jedis jedis = new Jedis("uplooking03");
            jedis.select(0);
            jedis.hset("info", "name", "admin");
            jedis.hset("info", "age", 12 + "");
            System.out.println(jedis.hget("info", "name"));
        }
    
    
        @Test
        public void testList() {
            // 创建 Jedis
            Jedis jedis = new Jedis("uplooking03");
            jedis.select(0);
            jedis.rpush("loves", "java", "c++", "python");
            jedis.lpop("loves");
            System.out.println(jedis.lrange("loves", 0, 10000));
            System.out.println(jedis.rpop("loves"));
            System.out.println(jedis.lrange("loves", 0, 10000));
        }
    }
    

15. Redis 可视化工具

RedisDesktopManager

退出移动版