本文介绍NoSQL技术:Redis的安装及其使用。操作系统:Ubuntu24.04
Redis介绍
Redis是一个键值(key-value)存储系统,即键值对非关系型数据库,和Memcached类似,目前正在被越来越多的互联网公司采用。Redis作为一个高性能的键值数据库,不仅在很大程度上弥补了memcached这类键值存储的不足,而且在部分场合下可以对关系数据库起到很好的补充作用。Redis提供了Python、Ruby、Erlang、PHP客户端,使用很方便。
Redis支持存储的值(value)类型包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove以及取交集、并集和差集等丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,Redis中的数据都是缓存在内存中的,它会周期性地把更新的数据写入磁盘,或者把修改操作写入追加的记录文件;此外,Redis还实现了主从(master-slave)同步。
Redis安装
方法一是自己下载安装包
下载地址 https://redis.io/downloads/ ,找到下载链接。Redis有很多产品,如Redis Enterprise Software、Redis OSS & Stack、Redis Insight等,而我们要选择的是Redis downloads。然后再选择合适的版本。发现现在可用的redis是7.4版和7.8.4版
方法二是直接使用直接用apt命令进行安装
首先更新APT软件包列表:
sudo apt update
然后使用apt命令安装Redis服务端:
sudo apt install redis-server
启动Redis服务并设置开机启动:
sudo systemctl start redis-server
sudo systemctl enable redis-server
试了一下,启动redis用 sudo service redis start 也可以
验证Redis是否成功安装并运行:
redis-cli ping
如果一切正常,它将返回PONG。
至此,Redis已经安装完成,现在可以执行如下命令开启Redis服务器:
redis-server
这里显示使用apt安装的redis版本是7.0.15
Redis基本命令(shell模式)
我们借助redis客户端来完成redis的相关管理工作。
输入如下命令启动Redis客户端:
redis-cli
客户端连上服务器之后,会显示“127.0.0.1:6379>”的命令提示符信息,表示服务器的IP地址为127.0.0.1,端口为6379。
现在可以执行简单的操作,比如,设置键为”hello”,值为”world”,并且取出键为”hello”时对应的值。执行下列代码:
set hello world
get hello
Redis操作(shell模式)
我们借助redis客户端来完成redis的相关管理工作。Redis是一个键值对(key-value)数据库,value主要支持5种数据类型
- 字符串 string
- 哈希 hash
- 列表list
- 集合 set
- 有序集合sorted set
假设有三个表,即Student、Course和SC,三个表的字段(列)和数据如图6-3所示。
Student表:
Redis数据库是以<key,value>的形式存储数据,把三个表的数据存入Redis数据库时,key和value的确定方法如下:
key=表名:主键值:列名
value=列值
例如,把每个表的第一行记录保存到Redis数据中,需要执行的命令如下:
set Student:95001:Sname liyong
set Course:1:Cname database
set SC:95001:1:Grade 92
新增键值对:
set Course:8:Cname algorithm
set Course:8:Ccredit 4
修改键值对:
get Course:8:Cname
set Course:8:Cname Bigdata
get Course:8:Cname
删除键值对:
get Course:8:Cname
del Course:8:Cname
del Course:8:Cname
Redis Java API编程
配置环境
我们继续在”bigdata1”项目中编写操作Redis的Java代码。
参考:
https://m.runoob.com/redis/redis-java.html
https://www.cnblogs.com/sss4/p/16359420.html
先去下面这个网站看看有哪些可用的版本,以及配置文件应该怎么写
https://mvnrepository.com/
输入”redis”后,找到很多包
根据教材,使用的应该是”Jedis”项目,打开该项目
里面有Maven的配置语句,等会儿我们要用
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.1.2</version>
</dependency>
在IDEA中,打开pom.xml(在左边的树形菜单中),这个文件是Maven的核心配置文件,将代码复制进去,刷新
测试连接
首先新建一个Redis软件包,由于redis默认只允许从本地连接,还需要在Linux虚拟机上操作
修改/etc/redis/redis.conf
sudo vim /etc/redis/redis.conf
将bind 127.0.0.1 ::1修改为bind 0.0.0.0 ::1 protect-mode为no
新建一个类,测试
package redis;import redis.clients.jedis.Jedis;public class TestRedis {public static void main(String[] args) {//连接Redis 服务Jedis jedis = new Jedis("192.168.179.143", 6379);// 如果 Redis 服务设置了密码,需要下面这行,没有就不需要// jedis.auth("123456");System.out.println("连接成功");//查看服务是否运行System.out.println("服务正在运行: "+jedis.ping());}
}
操作5种数据类型
继续编写一个类,测试redis支持的5种数据类型:String、Hash、List、Set、Zset。代码如下:
package redis;import redis.clients.jedis.Jedis;import java.util.List;
import java.util.Set;public class TestRedis2 {// 1.创建Jedis客户端// 连接Redis 服务private Jedis jedis = new Jedis("192.168.179.143", 6379);// 如果 Redis 服务设置了密码,需要下面这行,没有就不需要// jedis.auth("123456");public void testString() {// 2.使用Jedis客户端操作Stringjedis.setex("name", 6, "张根");String name = jedis.get("name");System.out.println(name);}public void testHash() {// 2.使用Jedis客户端操作hashjedis.hset("user", "name", "张根");jedis.hset("user", "age", "18");String name = jedis.hget("user", "name");String age = jedis.hget("user", "age");System.out.println(name);System.out.println(age);}public void testList() {// 2.使用Jedis客户端操作listjedis.lpush("userList", "张弢", "张启樵", "张三丰", "张无忌");List<String> userList = jedis.lrange("userList", 0, -1);for (String user : userList) {System.out.println(user);}}public void testSet() {// 2.使用Jedis客户端操作集合setjedis.sadd("sname", "Martin");jedis.sadd("sname", "Jack");jedis.sadd("sname", "Tom");Set<String> userList = jedis.smembers("sname");for (String user : userList) {System.out.println(user);}}public void testZset() {// 2.使用Jedis客户端操作有序集合Zsetjedis.zadd("programingLanguages", 1, "C");jedis.zadd("programingLanguages", 2, "C++");jedis.zadd("programingLanguages", 3, "Java");jedis.zadd("programingLanguages", 0, "Python");List<String> programingLanguages = jedis.zrange("programingLanguages", 0, -1);for (String language : programingLanguages) {System.out.println(language);}}public void colseRedis() {;// 3.关闭客户端jedis.close();System.out.println("关闭jedis成功");}public static void main(String[] args) {TestRedis2 tr2 = new TestRedis2();tr2.testString();tr2.testList();tr2.testHash();tr2.testSet();tr2.testZset();tr2.colseRedis();}
}