前端时间,做了一个项目,项目中有个功能需要实现多用户在短时间内访问数据库,类似某宝双十一活动,
单位时间内对数据库进行N次访问,像这样的高并发操作,简单的用关系型数据库(如:oracle,mysql)
是没有办法完成的,这样的高并发存取数据在关系型数据库上会变得很缓慢,甚至导致数据库崩溃。
原因是,关系型数据库都是以磁盘为基础进行存储数据的,大家知道,在磁盘上读取数据是比较慢的,
当然这是相对于内存而言。所以,想要高并发地对数据库进行访问,需要引入《redis》,我们来简单地认识下它:
1.redis是非关系型(nosql)的数据库,存取数据不需要SQL语句,redis的低层实现是通过集合(list,map,set,)实现的,
它是一种键值对(key-value)的存储关系。
2.redis是内存级别的数据库,它存储的数据并不存在磁盘上,而是存储在内存中的,所以在进行数据访问时,速度是相当快的。
据官方测试数据:redis读的速度是110000次/s左右,写的速度是81000次/s左右。
3.redis是非常高效的却又是一个非常轻量级的数据库,安装非常的简单,操作也非常的简单。
下面介绍下redis的安装与初级应用:
(1)安装
redis的安装非常的简单,先到官网下载压缩包,下载地址:https://redis.io/download,
下载好后直接解压到想要安装的磁盘路径,比如我的是:D:\Redis,接下来就是配置环境变量,
这里的环境变量配置更简单,直接把安装的路径放到系统环境变量path中即可,如下图:
保存设置,这样环境变量就配好了,我们在去cmd测试一下,是否配置成功:
win+R>cmd>redis-server 若看到这样的信息,表示我们的环境变量配置成功,当然也表示我们的redis安装成功。
(2)redis的简单命令测试
安装成功后,再进行redis的简单命令操作:
运行redis客户命令端:win+R>cmd>redis-cli
因为redis默认的链接密码为空,所以可以直接连上,并且可以看到主机地址为:127.0.0.1以及默认端口号为:6379
这其实是不安全的,如果项目要上线,我们还得设置密码,以及修改默认端口号。
下面我们用命令对redis数据库进行简单地写数据和读数据:
这就是对redis数据库简单的写数据和读数据,当然这只是在redis-cli客户端的命令行下来进行操作,
接下来我们在我们的java程序中引入redis数据库,对数据库进行读写操作:
(3)java程序引入redis数据库
用java写了一个小测试,对redis数据库进行简单的读写操作:
首先我们在java项目中导入redis的依赖jar包:jedis-2.9.0.jar(这是我用的版本,网上可以找得到)
接下来写个测试程序:
package com.yc.redis;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.Jedis;
/**
* redis数据库测试类
*
* @author Administrator
*
*/
public class RedisTest {
// 默认主机地址:127.0.0.1 端口号:6379
static Jedis jedis = new Jedis("127.0.0.1", 6379);
public static void main(String[] args) {
// 调用写数据方法
setValue();
// 调用读数据方法
Map<String, String> map1 = getValue();
System.out.println(map1);
// 调用读取所有数据的方法
Map<String, String> map2 = getAllValue();
System.out.println(map2);
// 关闭连接
jedis.close();
}
/**
* 向数据库写数据
*/
public static void setValue() {
jedis.set("a", "100");
jedis.set("b", "200");
jedis.set("c", "哈哈");
}
/**
* 根据指定的键查询数据
*
* @return 返回集合
*/
public static Map<String, String> getValue() {
Map<String, String> map = new HashMap<String, String>();
String a = jedis.get("a");
String b = jedis.get("b");
String c = jedis.get("c");
map.put("a", a);
map.put("b", b);
map.put("c", c);
return map;
}
/**
* 查询数据库中的全部数据
*
* @return 返回集合
*/
public static Map<String, String> getAllValue() {
Set<String> set = new HashSet<String>();
set = jedis.keys("*");
Iterator<String> iterator = set.iterator();
Map<String, String> map = new HashMap<String, String>();
while (iterator.hasNext()) {
String tmep = iterator.next();
map.put(tmep, jedis.get(tmep));
}
return map;
}
}
运行此代码可以看到结果如下:
第一行就是我们插入的a,b,c以及a,b,c对应的值,第二行则是我的redis里面的所有数据都被查出来了,
当然a,b,c也被查出来了,只是数据太多,没有展示完。
注意,在查询所有数据时,应该用迭代器(Iterator)对查出来的数据集合(set)进行迭代。
到此,我们redis的安装以及java程序对redis的引入到此告一段落,redis的内容还有很多,比如它的一些配置,刚提到的关于
redis的安全问题,这就需要对redis进行进一步的配置(如:主机ip,端口号,登录密码等),以后还会继续学习分享。
文章原创,引用请注明出处。