Redis入门(1)—— 介绍、安装配置、客户端

redis介绍

什么是Redis?

Redis是用C语言开发的一个开源的高性能键值对(key-value)内存数据库。
它提供五种数据类型来存储值:字符串类型、散列类型、列表类型、集合类型、有序集合类型
它是一种NoSQL数据库。

什么是NoSQL?

NoSQL,即Not-Only SQL(不仅仅是SQL),泛指非关系型的数据库。
什么是关系型数据库?数据结构是一种有行有列的数据库
NoSQL数据库是为了解决高并发、高可用、高可扩展、大数据存储问题而产生的数据库解决方案。
NoSQL可以作为关系型数据库的良好补充,但是不能替代关系型数据库。

NoSQL数据库分类

键值(Key-Value)存储数据库

相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化

列存储数据库

相关产品:Cassandra, HBase, Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限

文档型数据库

相关产品:CouchDB、MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势:

图形(Graph)数据库

相关数据库:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。

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的应用场景

内存数据库(登录信息、购物车信息、用户浏览记录等)
缓存服务器(商品数据、广告数据等等)。(最多使用)
解决分布式集群架构中的session分离问题(session共享)。
任务队列。(秒杀、抢购、12306等等)
支持发布订阅的消息模式
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
 

Redis单机版安装配置

下载

* 官网地址:http://redis.io/
* 中文官网地址:http://www.redis.cn/
* 下载地址:http://download.redis.io/releases/ 

安装

第一步:在VMware中安装CentOS(测试环境为CentOS 7)

第二步:安装C语言需要的GCC环境
yum install gcc-c++

第三步:解压缩Redis源码压缩包
tar -zxf redis-5.0.5.tar.gz

第四步:编译Redis源码,进入redis-5.0.5目录,执行编译命令
make

第五步:安装Redis,需要通过PREFIX指定安装路径
make install PREFIX=/usr/local/redis

启动

前端启动

启动命令:进入安装目录,直接运行bin/redis-server将以前端模式启动。
./redis-server

关闭命令:ctrl+c

启动缺点:客户端窗口关闭则redis-server程序结束,不推荐使用此方法
 

后端启动(守护进程启动)

第一步:拷贝redis-5.0.5/redis.conf配置文件到Redis安装目录的bin目录

cp redis.conf /usr/local/redis/bin/

第二步:修改redis.conf

1. 将daemonize由no改为yes

2. bind 127.0.0.1 修改为真实的主机地址

第三步:执行命令

./redis-server redis.conf -- 开启服务

ps –ef | grep redis --  查看服务
 

其他命令说明

redis-server :启动redis服务
redis-cli :进入redis命令客户端
redis-benchmark:性能测试的工具
redis-check-aof :aof文件进行检查的工具
redis-check-dump :rdb文件进行检查的工具
redis-sentinel :启动哨兵监控服务
 

Redis客户端

自带命令行客户端

./redis-cli -h 127.0.0.1 -p 6379

-h:redis服务器的ip地址
-p:redis实例的端口号

图形界面客户端(了解)

前提:需要安装图形界面管理器

程序客户端之Java客户端Jedis

Jedis介绍

Redis不仅使用命令客户端来操作,而且可以使用程序客户端操作。
现在基本上主流的语言都有客户端支持,比如Java、C、C#、C++、php、Node.js、Go等。 
在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。 
在企业中用的最多的就是Jedis,重点学习Jedis。 
Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis
 

依赖

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>2.9.0</version>

</dependency>

 

单实例连接

	@Test
	public void testJedis() {
		//创建一个Jedis的连接
		Jedis jedis = new Jedis("127.0.0.1", 6379);
		//执行redis命令
		jedis.set("key1", "hello world");
		//从redis中取值
		String result = jedis.get("key1");
		//打印结果
		System.out.println(result);
		//关闭连接
		jedis.close();
		
	}

连接池连接

	@Test
	public void testJedisPool() {
		//创建一连接池对象
		JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
		//从连接池中获得连接
		Jedis jedis = jedisPool.getResource();
		String result = jedis.get("key1") ;
		System.out.println(result);
		//关闭连接
		jedis.close();
		
		//关闭连接池
		jedisPool.close();
	}

 

Spring整合JedisPool

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx.xsd ">

	<!-- 连接池配置 -->
	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<!-- 最大连接数 -->
		<property name="maxTotal" value="30" />
		<!-- 最大空闲连接数 -->
		<property name="maxIdle" value="10" />
		<!-- 每次释放连接的最大数目 -->
		<property name="numTestsPerEvictionRun" value="1024" />
		<!-- 释放连接的扫描间隔(毫秒) -->
		<property name="timeBetweenEvictionRunsMillis" value="30000" />
		<!-- 连接最小空闲时间 -->
		<property name="minEvictableIdleTimeMillis" value="1800000" />
		<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
		<property name="softMinEvictableIdleTimeMillis" value="10000" />
		<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
		<property name="maxWaitMillis" value="1500" />
		<!-- 在获取连接的时候检查有效性, 默认false -->
		<property name="testOnBorrow" value="false" />
		<!-- 在空闲时检查有效性, 默认false -->
		<property name="testWhileIdle" value="true" />
		<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
		<property name="blockWhenExhausted" value="false" />
	</bean>

	<!-- redis单机 通过连接池 -->
	<bean id="jedisPool" class="redis.clients.jedis.JedisPool"
		destroy-method="close">
		<constructor-arg name="poolConfig" ref="jedisPoolConfig" />
		<constructor-arg name="host" value="192.168.242.130" />
		<constructor-arg name="port" value="6379" />
	</bean>
</beans>

测试代码

    @Test
	public void testJedisPool() {
		JedisPool pool = (JedisPool) applicationContext.getBean("jedisPool");
		Jedis jedis = null;
		try {
			jedis = pool.getResource();

			jedis.set("name", "lisi");
			String name = jedis.get("name");
			System.out.println(name);
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			if (jedis != null) {
				// 关闭连接
				jedis.close();
			}
		}
	}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值