一、什么是redis?
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
普通的前后端、数据库的交互模型
这种模型的缺点是,当后端请求达到很高的数量级时,会发生严重的阻塞,影响用户的操作体验,优化方式可以是用多线程处理数据库的增删改查操作。
也可以使用redis高速缓存,在查询数据库之前先检测缓存中有没有已存在的相应内容,如果有就直接返回,不需要经过数据库查询。
redis高速缓存的前后端交互模型
二、Linux安装redis
1、安装redis make有错,gcc版本低的原因
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
gcc -v
2、安装redis
使用wget下载并解压
wget http://download.redis.io/releases/redis-6.0.8.tar.gz
tar xzf redis-6.0.8.tar.gz
cd redis-6.0.8
make
执行完 make 命令后,redis-6.0.8 的 src 目录下会出现编译后的 redis 服务程序 redis-server,还有用于测试的客户端程序 redis-cli:
进入src中启动服务
cd src
./redis-server
注意这种方式启动 redis 使用的是默认配置。也可以通过启动参数告诉 redis 使用指定配置文件使用下面命令启动。
./redis-server ../redis.conf
启动 redis 服务进程后,就可以使用测试客户端程序 redis-cli 和 redis 服务交互了。:
./redis-cli
3、本机测试连接redis
本机测试连接redis,默认端口6379
telnet 服务器公网ip 6379
telnet命令不是内部命令,需要单独安装
linux中查看6379端口是否开放
lsof -i:3306
4、redis修改保护模式
修改配置文件redis.conf,将NETWORK下的protected-mode yes
修改为protected-mode no,然后重启服务
# 注释本地连接
# bind 127.0.0.1
# 保护模式改为no
protected-mode no
重启服务
./redis-server ../redis.conf
三、java连接redis
引入maven坐标依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
连接redis
//连接Redis 服务
Jedis jedis = new Jedis("ip");
// 如果 Redis 服务设置了密码,需要下面这行,没有就不需要
// jedis.auth("123456");
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping());
jedis.set("key","ssss");
System.out.println("result=" + result);
if(jedis.get("user")!=null){
System.out.println("登录成功");
}else {
System.out.println("去登录");
}
//关闭Redis服务
jedis.close();
Redis Java String(字符串) 实例
//连接Redis 服务
Jedis jedis = new Jedis("ip");
System.out.println("连接成功");
//设置 redis 字符串数据
jedis.set("runoobkey", "www.runoob.com");
// 获取存储的数据并输出
System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
//关闭Redis服务
jedis.close();
Redis Java List(列表) 实例
//连接Redis 服务
Jedis jedis = new Jedis("ip");
System.out.println("连接成功");
//存储数据到列表中
jedis.lpush("site-list", "Runoob2");
jedis.lpush("site-list", "Google");
jedis.lpush("site-list", "Taobao");
System.out.println("保存或者更新成功");
// 获取存储的数据并输出
List<String> list = jedis.lrange("site-list", 0 ,2);
for(int i=0; i<list.size(); i++) {
System.out.println("列表项为: "+list.get(i));
}
//关闭Redis服务
jedis.close();
Redis Java Keys 实例(获取缓存中的所有的key)
//连接Redis 服务
Jedis jedis = new Jedis("ip");
System.out.println("连接成功");
// 获取数据并输出
Set<String> keys = jedis.keys("*");
Iterator<String> it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key);
}
//关闭Redis服务
jedis.close();