目录
一、Redis介绍与安装
Redis介绍:
1.Redis是Key-Value型NoSQL数据库(不需要SQL进行操作
2.Redis将数据存储在内存中,同时也能持久化到磁盘
3.Redis常用于缓存,理工内存的高效提高程序的处理速度
Redis特点:
1.速度快
2.广泛的语言支持
3.持久化
4.多种数据结构
5.主从复制
6.分布式与高可用
Redis的下载安装:
1.在linux的shell中:
cd /usr/local //进入要创建目录的地方
mkdir redis //创建目录
cd redis //进入目录
yum install gcc //安装gcc组件
# wget http://download.redis.io/redis-stable.tar.gz
# tar xzf redis-6.0.8.tar.gz
# cd redis-6.0.8
# make
Linux中启动Redis:
cd src
./redis-server ../redis.conf //使用指定配置启动redis
./redis-server //按默认配置启动redis
2.Windows下安装Redis:
https://github.com/MicrosoftArchive/redis/releases
Windows版本为3.x,版本滞后,不可以用在项目上线。
将文件解压到D:\redis目录下。
windows中启动Redis:
双击 redis-server.exe,启动 Redis 服务(windows中)。
也可以在命令行中进入redis目录的src目录下带conf配置的执行server:
redis-server redis.windows.conf
Linux中设置Redis的常用配置:
Shell终端,在redis-6.0.8目录中打开conf配置文件进行设置:
vim redis.conf
第136行:daemonize,设置是否后台运行,守护进程。
第92行:port,端口号,一般不设置成6379端口号,如改成6380。
修改端口号后启动cli,要带端口启动:
.src/redis-cli -p 6380
第171行:logfile "redis.log" 将日志输出到
第186行:修改数据库总量
第263行:修改数据文件的保存路径
第507行:设置密码12345
设置密码后,启动服务以及cli后要输入密码才能使用:
./src/redis-service redis.conf
./src/redis-cli -p 6380
auth 12345 //需要填写密码才能使用
启动redis-cli:
进入redis-6.0.8目录执行:
./src/redis-cli //启动redis-cli
exit //关闭redis-cli
通过cli停止redis服务:
进入redis-6.0.8目录执行:
./src/redis-cli shutdown
暴力停止Redis服务:
netstat tulpn //查看进程
kill -9 PID //PID为Redis的进程id
二、Redis的常用命令与数据类型
Redis五种数据类型:
1.String -字符串类型
2.Hash -Hash类型(Map中又含有Map
3.List -列表类型(数组
4.Set -集合类型(不允许重复
5.Zset -有序集合类型
1.String字符串:
2.Hash键值类型:
3.List列表类型:
List列表就是一些列字符串的“数组”,按插入顺序排序,List列表的最大长度为2的32次方-1,可以包含40亿个元素。
lrange list start stop //输出list表的第start到stop位的所有元素,
lrange list 0 -1 //输出列表所有元素
4.set与Zset集合类型:
sadd set1 a //创建一个有a元素的set1集合
smembers set1 //查看set1内的所有元素
sinter set1 set2 //查看set1和set2相同的元素,即取交集
sunion set1 set2 //将2个集合合并一起并去掉重复元素,取并集
sdiff set1 set2 //取set1中有,set2中没有的元素,即取差集
zadd zset1 100 a //创建一个分数为100,元素为 a 的zset1集合,100为分数,按照分数进行排序
zrange zset1 0 -1 //显示zset1中所有元素
zrange zset1 0 -1 withscores //带分数输出
zrangebyscore zset1 101 103 //输出分数101 103内的元素
三、在Java中操作Redis
1.Java客户端-Jedis
1.Jedis是Java语言开发的Redis客户端工具包
2.Jedis是对Redis命令的封装,掌握Redis命令便可轻易上手
远程访问CentOS系统的Redis需要对CentOS系统进行以下设置:
1.对redis.conf进行设置:
第88行:protected mode yes 修改成 protected mode no,允许其他主机连接进来
第69行:bind 127.0.0.1 修改成 bind 0.0.0.0 所有主机IP都可以连接进来。(项目上线不可设置成这样!
2.防火墙通行6379端口
在shell中执行:
firewall-cmd --zone=public --add-part=6379/tcp --permanent //permanent永久生效
firewall-cmd --reload //重启防火墙
可以在github中找到Jedis项目:
https://github.com/redis/jedis
1.引入依赖
在maven工程中的pom.xml引入依赖:
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<!--json序列化-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
</dependencies>
2.创建连接
在类中创建连接:
package com.yygs.jedis;
import redis.clients.jedis.Jedis;
import java.util.List;
public class JedisTestor {
public static void main(String[] args) {
// ip和端口号
Jedis jedis = new Jedis("192.168.132.144",6379);
try {
jedis.auth("12345"); //密码
jedis.select(2); //选择数据库号
System.out.println("Redis连接成功");
//字符串
jedis.set("sn","7781-9938");
String sn = jedis.get("sn");
jedis.mset(new String[]{"title", "婴儿奶粉", "num" , "20"});
List<String> goods = jedis.mget(new String[]{"sn", "title", "num"});
long num = jedis.incr("num");
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close(); //关闭连接
}
}
}
2.利用Jedis缓存数据
创建实体类
package com.yygs.jedis;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
private Integer goodsId;
private String goodsName;
private String description;
private Float price;
}
创建Jedis连接进行缓存
package com.yygs.jedis;
import com.alibaba.fastjson.JSON;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.List;
public class CacheSimple {
public CacheSimple() {
String goodsId = "8819"
Jedis jedis = new Jedis("192.168.132.144");
try {
List<Goods> goodsList = new ArrayList<>();
goodsList.add(new Goods(8818, "红富士", "", 3.5f));
goodsList.add(new Goods(8819, "进口橙", "", 4f));
goodsList.add(new Goods(8820, "进口香蕉", "", 3.1f));
jedis.auth("12345");
jedis.select(3);
for (Goods goods : goodsList) {
//序列化
String json = JSON.toJSONString(goods);
String key = "goods" + goods.getGoodsId();
//存入缓存
jedis.set(key, json);
}
String key = "goods:" + goodsId;
if (jedis.exists(key)) {
//取数据
String json = jedis.get(key);
System.out.println(json);
//反序列化
Goods goods = JSON.parseObject(json, Goods.class);
}else{
System.out.println("您输入的商品编号不存在");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}
}