之前使用Nodejs参加比赛项目的时候使用过redis,但是当时开发时间紧迫,仅仅会一些最最基础的使用,并且也仅仅用来保存临时的验证码,了解还不够深入,现在主要使用JAVA来开发后端,redis是后端开发中十分重要,因此这段时间系统的学习一下。
NoSQL概述
Redis是一个NoSQL(Not Only SQL)的数据库,即非关系型数据库,主要解决高并发读写、海量数据的高效率存储和访问以及高可扩展性和高可用性等传统关系型数据库实现起来困难的场景。NoSQL数据库有四大分类:
- 键值(Key-Value)存储:redis等
- 列存储:Hbase等
- 文档数据库:mongodb等
- 图形数据库:Neo4j等
NoSQL总体有易扩展、灵活的数据模型、大量数据,高性能,高可用等特点。
Redis的概述
Redis是一个高性能键值对数据库,支持的键值数据类型:
- 字符串类型
- 列表类型
- 有序集合类型
- 散列类型
- 集合类型
redis的应用场景:
- 缓存
- 任务队列
- 网站访问的统计
- 数据过期处理
- 应用排行榜
- 分布式集群架构中的session分离
Redis的安装和使用
Redis推荐安装在linux上,可以使用虚拟机搭建一个linux环境,这里使用云主机,系统是centos6.8。
- redis是c语言开发,因此需要gcc环境,在命令行输入下列命令安装
- 下载redis,输入下列命令下载redis安装包
1
| wget http://download.redis.io/releases/redis-5.0.3.tar.gz
|
- 解压安装包
1 2
| tar -xzvf redis-5.0.3.tar.gz cd redis-5.0.3/
|
- 编译
- 安装
1
| make PREFIX=/usr/local/redis install
|
- 配置
1 2 3
| cp redis.conf /usr/local/redis cd /usr/local/redis/ vim redis.conf
|
进入插入模式,找到daemonize no
这一行把no改成yes,然后退出插入模式:wq保存并退出
- 后台启动redis
1
| ./bin/redis-server ./redis.conf
|
- 验证redis是否启动
运行完之后能看到redis-server 127.0.0.1:6379
即为启动成功
- 停止redis
1
| ./bin/redis-cli shutdown
|
- 测试redis客户端(在redis启动情况下)
会进入redis命令行,输入ping
命令回车,显示PONG即成功
简单使用
1 2 3 4 5
| set name myjdemo # 设置一个键为name,值为myjdemo的数据 get name # 获取键为name的数据的值 keys * # 列出数据库里所有的键 del name # 删除键以及键对应的值 keys *
|
Jedis的入门
Jedis是Redis官方首选的Java客户端开发包。
新建一个maven工程,在pom文件中加入jedis依赖
1 2 3 4 5 6
| <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
|
- 普通的jedis使用
1 2 3 4 5 6 7 8 9 10 11 12
| @Test public void demo1(){ Jedis jedis = new Jedis("localhost",6379); jedis.set("name","myjdemo"); String value = jedis.get("name"); System.out.println(value); jedis.close(); }
|
- jedis连接池的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| @Test public void demo2() { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(30); config.setMaxIdle(10);
JedisPool jedisPool = new JedisPool(config, "localhost", 6379);
Jedis jedis = null; try{ jedis = jedisPool.getResource(); jedis.set("name1","myjdemo-pool"); String value = jedis.get("name1"); System.out.println(value); }catch (Exception e){ e.printStackTrace(); }finally { if(jedis!=null) jedis.close(); if(jedisPool!=null) jedisPool.close(); } }
|