1.redis介绍
- 什么是NoSQL : NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。
- 什么是redis : Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如有(字符串类型,散列类型,列表类型,集合类型,有序集合类型)
-
redis的应用场景 :
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
分布式集群架构中的session分离
任务队列。(秒杀、抢购、12306等等)
- 网站访问统计
数据过期处理(可以精确到毫秒)
2.redis的安装和运行
-
redis的安装环境 : redis是C语言开发,建议在linux上运行,本教程使用Centos6.4作为安装环境。 安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:
yum install gcc-c++
-
redis安装
- 源码下载 : 从官网下载http://download.redis.io/releases/redis-3.0.0.tar.gz 将 redis-3.0.0.tar.gz拷贝到/usr/local的新建文件夹redis下
cp redis-3.0.0.tar.gz /usr/local/redis
- 解压源码 :
tar -zxvf redis-3.0.0.tar.gz
- 编译 : 进入解压后的目录进行编译
//进入文件夹
cd /usr/local/redis-3.0.0//编译
make - 安装到指定目录 : 如/usr/local/redis
//进入编译好的目录
cd /usr/local/redis-3.0.0//安装到指定目录
make PREFIX=/usr/local/redis install - 配置文件 : 从编译目录复制redis.conf文件到安装目录的/bin目录下
//进入编译好的目录
cd /usr/local/redis-3.0.0//复制redis.conf文件到安装目录的/bin下
cp redis.conf /usr/local/redis/bin - 此时安装目录下的文件
- 源码下载 : 从官网下载http://download.redis.io/releases/redis-3.0.0.tar.gz 将 redis-3.0.0.tar.gz拷贝到/usr/local的新建文件夹redis下
-
redis启动
- 前端启动 : 直接运行bin/redis-server将以前端模式启动,前端模式启动的缺点是ssh命令窗口关闭则redis-server程序结束,不推荐使用此方法。如下图
- 后端启动 :
- 修改redis.conf配置文件, daemonize no 改成daemonize yes
- 执行如下命令启动redis
cd /usr/local/redis
./bin/redis-server ./redis.conf
- 查看是否启动
ps -aux|grep redis
-
启动多个redis进程( 了解 )
- 创建多个redis目录,以端口号命名,比如:创建6379、6380两个目录,将redis的安装文件bin和redis.conf拷贝至这两个目录
-
修改6379目录下的redis.conf设置端口号为6379
修改6380目录下的redis.conf设置端口号为6380
-
启动6379和6380目录下的redis-server程序:
cd 6379
./redis-server redis.conf
cd 6380
./redis-server redis.conf
-
redis停止 : 强行终止Redis进程可能会导致redis持久化数据丢失。正确停止Redis的方式应该是向Redis发送SHUTDOWN命令
//进入redis安装目录
cd /usr/local/redis/bin
//使用redis的客户端工具关闭redis
./redis-cli shutdown -
连接redis客户端
- redis的客户端 : 在redis的安装目录中有redis的客户端,即redis-cli(Redis Command Line Interface),它是Redis自带的基于命令行的Redis客户端
- 连接服务端 : 执行bin/redis-cli连接redis服务端
从上图得知redis-cli默认连接本机的redis,本机的redis没有启动则报上图中的错误。
指定连接redis服务的ip和端口:
-
向redis服务器发送命令 : redis-cli连接上redis服务后,可以在命令行发送命令
- ping :
Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会回复PONG
- set/get : 使用set和get可以向redis设置数据,获取数据
- del : 删除指定key的内容
//例如
set name lisi
get name lisi
del name - Keys * : 查看当前库中所有key值
Keys *
- ping :
3.jedis的使用
- Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#C++、php、Node.js、Go等。
在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis -
jar 包
-
pom坐标
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.0</version>
</dependency> -
jar包
- 连接redis操作
// 单实例连接redis 注意:如果连接超时 请将服务器的6379端口开放
@Test
publicvoid testJedisSingle() {
Jedis jedis = new Jedis("192.168.101.3", 6379);
jedis.set("name", "bar");
String name = jedis.get("name");
System.out.println(name);
jedis.close();
}
- 使用连接池连接 : 通过单实例连接redis不能对redis连接进行共享,可以使用连接池对redis连接进行共享,提高资源利用率,使用jedisPool连接redis服务
@Test
public void pool() {
JedisPoolConfig config = new JedisPoolConfig();
//最大连接数
config.setMaxTotal(30);
//最大连接空闲数
config.setMaxIdle(2);
JedisPool pool = new JedisPool(config, "192.168.101.3", 6379);
Jedis jedis = null;
try {
jedis = pool.getResource();
jedis.set("name", "lisi");
String name = jedis.get("name");
System.out.println(name);
}catch(Exception ex){
ex.printStackTrace();
}finally{
if(jedis != null){
//关闭连接
jedis.close();
}
}
}
- 连接redis操作
-
pom坐标
4.常用的redis命令
-
赋值
SET key value
127.0.0.1:6379> set test 123
OK -
取值
GET key
127.0.0.1:6379> get test
"123“ -
删除
Del key
127.0.0.1:6379> del test
(integer) 1 -
数值增减
- 递增数字 : 当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增
127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3 - 增加指定的整数 : INCRBY key increment
127.0.0.1:6379> incrby num 2
(integer) 5
127.0.0.1:6379> incrby num 2
(integer) 7
127.0.0.1:6379> incrby num 2
(integer) 9 - 递减
127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> decr num
(integer) 8
127.0.0.1:6379> decr num
(integer) 7
127.0.0.1:6379> decr num
(integer) 6
127.0.0.1:6379> - 减少指定数 : DECRBY key decrement
127.0.0.1:6379> decr num
(integer) 6
127.0.0.1:6379> decr num
(integer) 5
127.0.0.1:6379> decrby num 3
(integer) 2
127.0.0.1:6379> decrby num 3
(integer) -1 -
向尾部追加值 APPEND key value
//APPEND的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,
即相当于 SET key value。返回值是追加后字符串的总长度。 127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str " world!"
(integer) 12
127.0.0.1:6379> get str
"hello world!" - 获取字符串的长度 strlen key
- 递增数字 : 当存储的字符串是整数时,Redis提供了一个实用的命令INCR,其作用是让当前键值递增
127.0.0.1:6379> strlen str
(integer) 0
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> strlen str
(integer)
4.持久化
- 简介 :
Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用 - RDB持久化 : RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。
- AOF持久化 :
默认情况下Redis没有开启AOF(append only file)方式的持久化,可以通过appendonly参数开启:
appendonly yes
开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬
盘中的AOF文件
5.redis主从复制 (了解)
- 什么是主从复制 : 持久化保证了即使redis服务重启也会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:
-
配置 : 无需进行配置 只需要在从服务器(也就是另一台redis服务)修改一下redis.conf
- 修改从redis服务器上的redis.conf文件,添加slaveof 主redisip 主redis端口
-
上边的配置说明当前该从redis服务器所对应的主redis是192.168.101.3,端口是6379
结语:至此,redis的简单入门就结束了,如果文中有什么不妥指出敬请指正,redis还有更多内容请参考专业文档,感谢阅读.