学了很久的Javaweb的相关知识,但只是学会了基本的增删改查,并没有实质上的提高,最近在看一个Redis数据库的简单入门的视频,做了一些学习笔记。并且学完这个知识点之后,我想跟着视频在学习做一个项目。
这篇文章主要讲了以下内容:
一:Redis的使用安装
二:Redis支持的数据结构
三:Redis的命令操作
四:Redis的持久化
五:Jedis的使用
六:使用Redis做一个案例
Redis的使用安装:
首先打开这个网站https://github.com/microsoftarchive/redis/releases
在这个网站中
下载这个redis数据库,然后一直点击安装即可。(记住自己所安装的目录)
然后进入你所安装的目录:
先点击redis-server.exe启动服务端,然后在点击redis-cli.exe启动客户端:
主要出现下面这个界面就意味着安装成功了:
Redis支持的数据结构 :
- String: 字符串
- Hash: 散列
- List: 列表
- Set: 集合
- Sorted Set: 有序集合
Redis命令操作数据:
对于String:
增加:set key value
查询:get key
删除:del key
对于Hash:
增加:hset myhash field value
查询:hget myhash field
删除:del myhash field
对于list :
增加:lpush key value 或者是 rpush key value
查询:lrange key start end
删除:del key 或者是 lpop key 或者是 rpop key
以上的操作对于有一定数据结构基础的同学来说,很容易理解,具体方式我就不在赘述了。
对于set(不允许有重复的元素存在)
增加 sadd key value
查询 smembers key
删除 spop 随机删除一个元素 并返回删除的那个元素
对于有序集合
增加:zadd key number value
查询: zrevrange key value
删除:zrem key value
Redis的持久化
什么是持久化和为什么要持久化?
用一句话可以将持久化概括为:将数据(如内存中的对象)保存到可永久保存的存储设备中。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、 XML 数据文件中等等。
同时,也可以从应用层和系统层这两个层面来理解持久化:
应用层:如果关闭( Close )你的应用然后重新启动则先前的数据依然存在。
系统层:如果关闭( Shutdown )你的系统(电脑)然后重新启动则先前的数据依然存在。
Redis 为什么要持久化?
Redis 中的数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。与 Memcached 一样,为了保证效率,数据都是缓存在内存中。
对,数据都是缓存在内存中的,当你重启系统或者关闭系统后,缓存在内存中的数据都会消失殆尽,再也找不回来了。所以,为了让数据能够长期保存,就要将 Redis 放在缓存中的数据做持久化存储。
如何对Redis进行持久化----参考这篇文章
Jedis的使用
首先要导入jar包,具体的下载网上的资源很多
然后就可以使用了。
小栗子:
import redis.clients.jedis.Jedis;
public class RedisStringJava {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//设置 redis 字符串数据
jedis.set("runoobkey", "www.runoob.com");
// 获取存储的数据并输出
System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
}
}
这还不是最全的,此时在下载一个Commons Pool jar包,利用 连接池写成一个工具类,这样以后就可以直接拿来使用了:
public class RedisUtil {
//服务器IP地址
private static String ADDR = "111.1.1.1";
//端口
private static int PORT = 6379;
//密码
private static String AUTH = "11111";
//连接实例的最大连接数
private static int MAX_ACTIVE = 1024;
//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
private static int MAX_IDLE = 200;
//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
private static int MAX_WAIT = 10000;
//连接超时的时间
private static int TIMEOUT = 10000;
// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
private static boolean TEST_ON_BORROW = true;
private static JedisPool jedisPool = null;
//数据库模式是16个数据库 0~15
public static final int DEFAULT_DATABASE = 0;
/**
* 初始化Redis连接池
*/
static {
try {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(MAX_ACTIVE);
config.setMaxIdle(MAX_IDLE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT,AUTH,DEFAULT_DATABASE);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取Jedis实例
*/
public synchronized static Jedis getJedis() {
try {
if (jedisPool != null) {
Jedis resource = jedisPool.getResource();
System.out.println("redis--服务正在运行: "+resource.ping());
return resource;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/***
*
* 释放资源
*/
public static void returnResource(final Jedis jedis) {
if(jedis != null) {
jedisPool.returnResource(jedis);
}
}
}
使用Redis做一个案例
具体的案例会在另一篇博客中介绍《黑马旅游网(三)优化Servlet和缓存数据》中写了。。。