目标:
- Linux系统中安装redis
- 使用Redis命令操作常用数据结构的数据存取
- 在java程序中通过jedis连接Redis
关于关系型数据库和nosql数据库
关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库。从性能上而言,nosql数据库 要优于关系型数据库,从安全性上而言关系型数据库要优于nosql数据库,所以在实 际开发中一个项目中nosql和关系型数据库会一起使用,达到性能和安全性的双保证。
什么是Redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
- 字符串类型
- 散列类型
- 列表类型
- 集合类型
- 有序集合类型
官方提供测试数据:50个并发执行100000个请求,读的速度是110000次/s,写的速度是
81000次/s,数据仅供参考,根据、服务器配置会有不同结果
redis的应用场景
- 缓存(数据查询、短连接、新闻内容、商品内容等等)最多使用
- 聊天室的在线好友列表
- 任务队列
- 应用排行榜
- 网站访问统计
- 数据过期处理(可以精确到ms)
- 分布式集群架构中的session分离。
Redis安装和使用
建议在linux上安装
CentOs安装Redis
- 安装redis编译的c环境,yum install gcc-c++
- 将redis-2.6.16.tar.gz上传到Linux系统中
- 解压到/usr/local下 tar -xvf redis-2.6.16.tar.gz -C /usr/local
- 进入redis-2.6.16目录 使用make命令编译redis
- 在redis-2.6.16目录中 使用make PREFIX=/usr/local/redis install命令安装 redis到/usr/local/redis中
- 拷贝redis-2.6.16中的redis.conf到安装目录redis中
- 启动redis 在bin下执行命令redis-server redis.conf
- 如需远程连接redis,需配置redis端口6379在linux防火墙中开发
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save
启动后看到如上欢迎页面,但此窗口不能关闭,窗口关闭就认为redis也关闭了(类似Tomcat通过bin下的startup.bat的方式)
解决方案:
可以通过修改配置文件 配置redis后台启动,即服务器启动了但不会 穿件控制台窗口
将redis.conf文件中的daemonize从false修改成true表示后台启动
使用命令查看6379端口是否启动ps -ef | grep redis
redis停止
- 强制结束程序。强行终止Redis进程可能会导致redis持久化数据丢失。kill -9 pid
- 正确停止Redis的方式是向Redis发送SHUTDOWN命令
cd /usr/local/redis
./bin/redis-cli shutdown
Redis使用
连接客户端
向Redis服务器发送命令
keys * 查看当前库中所有的key值
使用java操作redis
创建web/maven-web项目,在lib文件下导入依赖包或者在pom.xml文件中添加依赖
测试jedis代码:
单实例连接和连接池连接
package redis;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisTest {
//通过java程序访问redis数据库
@Test
// java+redis =jedis
//获得单一的jedis对象操作数据库
public void test1() {
//1.获得连接对象
Jedis jedis = new Jedis("192.168.112.128",6379);
//2.获得数据
String username= jedis.get("username");
System.out.println(username);
//3.存储
jedis.set("addr", "北京");
System.out.println(jedis.get("addr"));
}
//通过jedis的pool获得jedis连接对象
@Test
public void test2() {
//0.创建池子的配置对象
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(30);//最大闲置个数
poolConfig.setMinIdle(10);//最小闲置个数
poolConfig.setMaxTotal(50);//最大连接数
//1.创建一个redis 的连接池
JedisPool pool = new JedisPool(poolConfig,"192.168.112.128",6379);
//2.从池子中获取redis的访问资源
Jedis jedis = pool.getResource();
//3操作数据库
jedis.set("xxx","yyyy");
System.out.println(jedis.get("xxx"));
//4.关闭资源
jedis.close();
pool.close();
}
}
工具类见github:
https://github.com/ztslx678111/redis.git
Redis的常用命令见下节