使用Redis进行缓存

前端时间,做了一个项目,项目中有个功能需要实现多用户在短时间内访问数据库,类似某宝双十一活动,

单位时间内对数据库进行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,端口号,登录密码等),以后还会继续学习分享。

文章原创,引用请注明出处。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值