Redis入门(一)

第一章 NoSQL概述

什么是NoSQL

  • NoSQL = Not Only SQL

  • 非关系型的数据库

为什么需要NoSQL

  • 高并发读写

  • 海量数据的高效率存储和访问

  • 高可扩展性和高可用性

NoSQL数据库的四大分类

  • 键值对存储(Redis):优势是快速查询,劣势是存储缺少结构化

  • 列存储(HBase):优势查找速度快,劣势是相对功能局限

  • 文档数据库(MongoDB):优势数据结构要求不是特别严格,劣势是查询性能不够高,缺少统一语法。

  • 图形数据库:优势是利用图结构的相关算法,劣势是需要对整个图做计算才能得到相对的结果,不容易做分布式的集群方案。

四类NoSQL数据库比较

NoSQL的特点

  • 易扩展:没有传统SQL的各种关系

  • 灵活的数据模型

  • 大数据量,高性能

  • 高可用

总结:NoSQL的在目前这种大的网络数据量下,为了适应web2.0而被广泛的使用,其中使用最多的就是Redis。

第二章 Redis概述

Redis的由来

2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统 LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo 便对MySQL 的性能感到失望,于是他决定亲自为 LLOOGG 量身定做一个 数据库,并并于 2009 年开发完成,这个数据库就是Redis。不过Salvatore Sanfilippo并不满足只将 Redis 用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年 Salvatore Sanfilippo 将 Redis 开源发布,并开始和 Redis 的另一名主要的代码贡献者 Pieter Noordhuis 一起继续着 Redis 的开发,直到今天。Salvatore Sanfilippo 自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News 在 2012 年发布了一份数据库的使用情况调查,结果显示有近 12% 的公司在使用 Redis。国内如 新浪微博、街旁网、知乎网,国外如GitHub、Stack Overflow、Flickr等都是Redis的用户。VMware 公司从2010年开始赞助 Redis 的开发,Salvatore Sanfilippo和 Pieter Noordhuis 也分别在3月和5月加入VMware,全职开发Redis。

Redis是一款用C语言开发的,开源的,高性能的,键值对的数据库。

高性能键值对数据库,支持的键值数据类型

  • 字符串类型

  • 列表类型

  • 有序集合类型

  • 散列类型

  • 集合类型

Redis的应用场景

  • 缓存

  • 任务队列

  • 网站访问统计

  • 数据过期的处理

  • 分布式集群架构中的session分离

第三章 Redis的安装

搭建环境(macOS High Sierra)

  • 虚拟机:Parallels Desktop

  • Linus系统:CentOS Linux release 7.2.1511 (Core)

  • Mac系统自带SSH,无需安装客户端。打开SSH方法:点击Mac顶部菜单-->“苹果”图标-->最近使用的项目-->终端--输入 open ~/.ssh 。

CentOS安装Redis

Redis是C语言开发,安装Redis需要先将官网上下载的源码进行编译,编译依赖gcc环境。

在线安装gcc:yum install gcc-c++

如果提示是否安装,输入:y

安装成功会提示:

安装Redis:

Mac与Windows不同,不需要可视化软件进行拖拽,可以通过终端进行传输,也可以直接通过Linus下命令行,在Linus系统进行下载。

1.下载源码,解压后编译源码
wget http://download.redis.io/releases/redis-2.8.3.tar.gz
tar xzf redis-2.8.3.tar.gz
cd redis-2.8.3
make
2.编译完成后,在src目录下,有四个可执行文件,redis-server,redis-benchmark,redis-cli,redis.conf。然后拷贝到一个目录下。
mkdir /usr/redis
cp redis-server /usr/redis
cp redis-benchmark /usr/redis
cp redis-cli /usr/redis
cp redis.conf /usr/redis //redis.conf 与src在统计目录下
cd /usr/redis
3.启动Redis服务(前端启动)
./redis-server  使用command+c 停止前端启动方式
4.启动Redis服务(后端启动)
 后端启动需要修改redis.conf文件内容:vim redis.conf
 找到daemonize no,把no改为yes,然后退出并保存文件。
 ./redis-server redis.conf  --->启动Redis
 ps -ef | grep -i redis 命令输入之后可以看到默认端口6379
    root     31091     1  0 18:25 ?        00:00:00 ./redis-server *:6379
    root     31366 28640  0 18:26 pts/0    00:00:00 grep --color=auto -i redis
5.停止Redis服务
./redis-cli shutdown
6.验证连接
./redis-cli : 启动Redis客户端
得到<127.0.0.1:6379>
这时候在输入ping
得到PONG
证明连接成功
7.Redis存入数据
set/get(键值对的类型):
set name ergou 
get name
key * :查看Redis中所有的key

第四章 Jedis入门

在实际开发中,我们通常使用一些程序向Redis中保存数据,或者是获取数据,所以我们要学习Jedis,Jedis就是Redis的一个连接的基本操作。

Jedis介绍

构建Java项目,测试jedis

所需jar包:

  • commons-pool2-2.3.jar

  • jedis-2.7.2.jar

jar包下载地址:http://jareye.com/jar/Ef5F0Tpg.html?q=commons-pool#download

找到Linus的防火墙设置文件,在编辑:vim /etc/sysconfig/iptables

找到文件中的:A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT ,把这行复制(yy),再粘贴到这行下面,修改端口号为6379,如下:-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT。

然后重启防火墙设置:service iptables restart,如果出现:Redirecting to /bin/systemctl restart iptables.service,意思是重启防火墙失效,那是因为CenterOS在版本升级之后就修改了service命令。如下:systemctl restart iptables.service,然后iptables -L。

Jedis发送/获取数据的两种方式

jedis单实例的测试 :

public void demo1() {
​
        // 1.设置IP地址和端口;
        Jedis jedis = new Jedis("192.168.30.130", 6379);
        // 2.保存数据;
        jedis.set("name", "王二狗");
        // 3.获取数据;
        String value = jedis.get("name");
        System.out.println(value);
        // 4.释放资源
        jedis.close();
    }

连接池方式连接 :

public void demo2() {
        //获得连接池配置的对象
        JedisPoolConfig config = new JedisPoolConfig();
        //设置最大连接数
        config.setMaxTotal(30);
        //设置最大的空闲连接数
        config.setMaxIdle(10);
        
        //获得连接池
        JedisPool jedispool = new JedisPool(config,"192.168.30.130",6379);
        //获得核心对象
        Jedis jedis = null;
        try {
            //通过连接池获得连接
            jedis = jedispool.getResource();
            //设置数据
            jedis.set("name", "cnmd");
            //获得数据
            String value = jedis.get("name");
            System.out.println(value);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally {
            if(jedis != null) {
                jedis.close();
            }
            if(jedispool != null) {
                jedispool.close();
            }
        }
}
发布了36 篇原创文章 · 获赞 46 · 访问量 7897

猜你喜欢

转载自blog.csdn.net/weixin_41860630/article/details/81369864
今日推荐