【JavaWeb后端学习笔记】Redis常用命令以及Java客户端操作Redis

news/2024/12/19 1:02:53/

redis

  • 1、redis安装与启动服务
  • 2、redis数据类型
  • 3、redis常用命令
    • 3.1 字符串String
    • 3.2 哈希Hash
    • 3.3 列表List
    • 3.4 集合Set(无序)
    • 3.5 有序集合zset
    • 3.6 通用命令
  • 4、使用Java操作Redis
    • 4.1 环境准备
    • 4.2 Java操作字符串String
    • 4.3 Java操作哈希Hash
    • 4.4 Java操作列表List
    • 4.5 Java操作集合Set(无序)
    • 4.6 Java操作有序集合zset
    • 4.7 Java实现Redis常用命令

redis是基于内存的key-value结构的数据库。

redis_3">1、redis安装与启动服务

安装redis主需要将下载好的redis压缩包解压到无中文的目录中即可。

启动服务打开命令行窗口,通过cd命令进入redis安装目录。或者在资源管理器中先进入redis安装目录,然后再该目录中打开命令行窗口。输入如下命令启动redis服务:

redis-server.exe redis.windows.conf

在这里插入图片描述
关闭服务按Ctrl + C

通过客户端连接redis服务。在安装目录中重新打开一个命令行窗口。由于redis默认是没有密码的,所以可以直接输入如下命令:

redis-cli.exe

设置redis密码。打开redis配置文件redis.windows.conf,找到配置密码命令,大概在443行。取消注释,将foobared替换成自己的密码,保存文件,重新启动服务即可。

requirepass foobared

设置密码之后重新通过客户端连接redis服务需要加上密码,完整命令为:

// -h 指定主机地址 -p 指定端口 -a redis密码
redis-cli.exe -h localhost -p 6379 -a 123456

可以通过redis客户端可视化软件连接redis服务,简化redis操作。

redis_32">2、redis数据类型

redis有5种常用数据类型。

数据类型特点
字符串(String)普通字符串,Redis中最简单的数据类型
哈希(hash)也叫散列,类似于Java中的HashMap结构
列表(list)按照插入顺序排列,可以有重复元素,类似于Java中的LinkedList
集合(set)无序集合,没有重复元素,类似于Java中的HashSet
有序集合(sorted set / zset)集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

在这里插入图片描述

redis_43">3、redis常用命令

3.1 字符串String

命令说明
SET key value设置指定key的值
GET key获取指定key的值
SETEX key seconds value设置指定key的值,并将key的过期时间设为seconds秒
SETNX key value只有在key不存在时设置key的值

3.2 哈希Hash

Redis hash是一个 String 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

命令说明
HSET key field value将哈希表key中的字段field的值设为value
HGET key field获取存储在哈希表中指定字段的值
HDEL key field删除存储在哈希表中的指定字段
HKEYS key获取哈希表中的所有字段
HVALS key获取哈希表中的所有值

3.3 列表List

命令说明
LPUSH key value1 [value2]将一个或多个值插入到列表头部
LRANGE key start stop获取列表指定范围内的元素,查询所有元素start=0,stop=1
RPOP key移除并获取列表最后一个元素
LLEN key获取列表长度

3.4 集合Set(无序)

命令说明
SADD key member1 [member2]向集合添加一个或多个成员
SMEMBERS key返回集合中的所有成员
SCARD key获取集合的成员数
SINTER key1 [key2]返回给定所有集合的交集
SUNION key1 [key2]返回所有给定集合的并集
SREM key member1 [member2]删除集合中一个或多个成员

3.5 有序集合zset

命令说明
ZADD key score1 member1 [score2 member2]向有序集合添加成员
ZRANGE key start stop [WITHSCORES]通过索引区间返回有序集合中指定区间内的成员
ZINCRBY key increment member有序集合中对指定成员的分数加上增量increment
ZREM key member [member…]移除有序集合中的一个或多个成员

3.6 通用命令

命令说明
KEYS pattern查找所有符合给定模式(pattern)的key
EXISTS key检查给定key是否存在
TYPE key返回key所储存的值的类型
DEL key该命令用于在key存在时删除key

4、使用Java操作Redis

Redis的Java客户端有很多种,这里介绍Spring Data Redis。
Spring Data Redis是Spring的一部分,对Redis底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作。

4.1 环境准备

  1. 引入Redis依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 在配置文件中配置Redis数据源
    host:主机地址;port:Redis端口号;password:Redis密码;database:数据库0-15
spring:redis:host: localhostport: 6379password: 123456database: 0
  1. 编写配置类
@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 注入Redis连接工厂对象log.info("开始创建RedisTemplate对象...");RedisTemplate redisTemplate = new RedisTemplate();// 设置redis的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
  1. 通过注入RedisTemplate 对象操作Redis。
// 注入RedisTemplate 对象
@Autowired
private RedisTemplate redisTemplate;

4.2 Java操作字符串String

说明方法
获取操作 String 的对象opsForValue()
设置指定key的值set(key, value)
获取指定key的值get()
设置指定key的值,并设置key的过期时间set(key, value, 时间, 单位)
只有在key不存在时设置key的值setIfAbsent(key, value)

Java代码示例:

ValueOperations valueOperations = redisTemplate.opsForValue();  // 获取操作 String 的对象
valueOperations.set("city", "beijing");  						// SET key value
String city = (String) valueOperations.get("city");  				// GET key
System.out.println(city);valueOperations.set("code", "123456", 60, TimeUnit.SECONDS); 	// SETEX key seconds value
valueOperations.setIfAbsent("lock", 1);  						// SETNX key value
valueOperations.setIfAbsent("lock", 2);

4.3 Java操作哈希Hash

说明方法
获取操作 hash 的对象opsForHash()
将哈希表key中的字段field的值设为valueput(key, field, value)
获取存储在哈希表中指定字段的值get(key, field)
删除存储在哈希表中的指定字段delete(key, field)
获取哈希表中的所有字段keys(key)
获取哈希表中的所有值values(key)

Java代码示例:

HashOperations hashOperations = redisTemplate.opsForHash();  // 获取操作 hash 的对象
hashOperations.put("100", "name", "Tom");  				// HSET key field value
hashOperations.put("100", "age", "20");
String name = (String) hashOperations.get("100", "name");  // HGET key field
System.out.println(name);Set keys = hashOperations.keys("100"); 					// HKEYS key
System.out.println(keys);
List values = hashOperations.values("100");  				// HVALS key
System.out.println(values);
hashOperations.delete("100", "name");  					// HDEL key field

4.4 Java操作列表List

说明方法
获取操作 list 的对象opsForList()
将一个或多个值插入到列表头部leftPushAll(key, value1, value2)
插入单个值leftPush(key, value)
获取列表指定范围内的元素,查询所有元素start=0,stop=1range(key, start, stop)
移除并获取列表最后一个元素rightPop(key)
获取列表长度size(key)

Java代码范例:

ListOperations listOperations = redisTemplate.opsForList();  // 获取操作 list 的对象
listOperations.leftPushAll("mylist", "a", "b", "c");  	// LPUSH key value1 [value2] 插入多个值
listOperations.leftPush("mylist", "d");  			// LPUSH key value1 插入单个值List mylist = listOperations.range("mylist", 0, -1); 	// LRANGE key start stop
System.out.println(mylist);listOperations.rightPop("mylist"); 				// RPOP keyLong size = listOperations.size("mylist");			 // LLEN key
System.out.println(size);

4.5 Java操作集合Set(无序)

说明方法
获取操作 set 的对象opsForSet()
向集合添加一个或多个成员add(setKey, member1, member2)
返回集合中的所有成员members(setKey)
获取集合的成员数size(setKey)
返回给定所有集合的交集intersect(setKey1, setKey2)
返回所有给定集合的并集union(setKey1, setKey2)
删除集合中一个或多个成员remove(setKey, member1, member2)

Java代码范例:

SetOperations setOperations = redisTemplate.opsForSet();  // 获取操作 set 的对象
setOperations.add("set1", "a", "b", "c", "d");  			// SADD key member1 [member2]
setOperations.add("set2", "a", "b", "x", "y");Set set1Members = setOperations.members("set1");  	// SMEMBERS key
System.out.println(set1Members);Long set1Size = setOperations.size("set1"); 	 		// SCARD key
System.out.println(set1Size);Set intersect = setOperations.intersect("set1", "set2");  	// SINTER key1 key2 [key3]
System.out.println(intersect);Set union = setOperations.union("set1", "set2");  		// SUNION key1 key2 [key3]
System.out.println(union);setOperations.remove("set1", "a");  					// SREM key member1 [member2]

4.6 Java操作有序集合zset

命令/说明方法
获取操作 zset 的对象opsForZSet()
向有序集合添加成员add(zsetKey, member, score)
通过索引区间返回有序集合中指定区间内的成员range(zsetKey, start, stop)
有序集合中对指定成员的分数加上增量incrementincrementScore(zsetKey, member, increment)
移除有序集合中的一个或多个成员remove(zsetKey, member1, member2)

Java代码范例:

ZSetOperations zSetOperations = redisTemplate.opsForZSet();	// 获取操作 zset 的对象
zSetOperations.add("zset1", "a", 10);  			// ZADD key score member1 
zSetOperations.add("zset1", "b", 12);
zSetOperations.add("zset1", "c", 9);Set zset1 = zSetOperations.range("zset1", 0, -1); 	// ZRANGE key start stop 
System.out.println(zset1);zSetOperations.incrementScore("zset1", "c", 10);  	// ZINCRBY key increment memberzSetOperations.remove("zset1", "a", "b");  		// ZREM key member1 [member2]

4.7 Java实现Redis常用命令

通用操作直接使用redisTemplate对象。

说明方法
查找所有符合给定模式(pattern)的keykeys(“给定的模式”)
检查给定key是否存在hasKey(key)
返回key所储存的值的类型type(key)
该命令用于在key存在时删除keydelete(key)

Java代码范例:

// 通用操作直接使用redisTemplate对象
Set keys = redisTemplate.keys("*");  // KEYS pattern
System.out.println(keys);Boolean name = redisTemplate.hasKey("name");  // EXISTS keyfor(Object key : keys){DataType type = redisTemplate.type(key);  // TYPE keySystem.out.println(type.name());
}redisTemplate.delete("mylist");  // DEL key

http://www.ppmy.cn/news/1556250.html

相关文章

易语言鼠标轨迹算法(游戏防检测算法)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

Vue 组件化开发:构建高质量应用的核心

目录 什么是 Vue 组件化&#xff1f; 组件化的优势 1. 组件的设计原则 1.1 高内聚&#xff0c;低耦合 示例&#xff1a;通过 Props 和 Events 传递数据 1.2 组件职责单一 1.3 避免组件过大 1.4 设计通用组件 示例&#xff1a;通用按钮组件 1.5 易于扩展 2. Vue 组件…

2024安装hexo和next并部署到github和服务器最新教程

碎碎念 本来打算写点算法题上文所说的题目&#xff0c;结果被其他事情吸引了注意力。其实我之前也有过其他博客网站&#xff0c;但因为长期不维护&#xff0c;导致数据丢失其实是我懒得备份。这个博客现在部署在GitHub Pages上&#xff0c;github不倒&#xff0c;网站不灭&…

【Flask+OpenAI】利用Flask+OpenAI Key实现GPT4-智能AI对话接口demo - 从0到1手把手全教程(附源码)

文章目录 前言环境准备安装必要的库 生成OpenAI API代码实现详解导入必要的模块创建Flask应用实例配置OpenAI API完整代码如下&#xff08;demo源码&#xff09;代码解析 利用Postman调用接口 了解更多AI内容结尾 前言 Flask作为一个轻量级的Python Web框架&#xff0c;凭借其…

OpenCV识别图片颜色并绘制轮廓

一、原理 步骤 读取图像。将图像从 RGB 转换为 HSV 颜色空间。根据设定的颜色范围进行掩模处理&#xff0c;得到目标颜色的区域。查找轮廓。在原图上绘制轮廓 二、代码 import cv2 import numpy as np# 1输入图片 imgcv2.imread(./8.png) imgcv2.resize(img,(0,0),fx0.7,fy…

【Python爬虫系列】_032.Scrapy_全站爬取

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈

Redis 存储断点续传文件状态的最佳实践

目录 1. Redis 中存储文件上传状态使用 Hash 存储文件状态存储分块上传状态使用 TTL 进行状态过期管理 2. Redis 与数据库保持一致方法 1&#xff1a;定期同步方法 2&#xff1a;实时同步方法 3&#xff1a;双写机制方法 4&#xff1a;系统重启后的恢复 3. 一致性保障4. 总结5.…

Redis集合运算的应用场景

集合并集&#xff08;Union&#xff09;的应用场景 标签系统 应用场景&#xff1a;假设有一个社交平台&#xff0c;用户可以给内容打上不同的标签。使用Redis集合来存储每个标签下的内容ID。使用并集&#xff1a;当用户想要查看多个标签下的内容时&#xff0c;可以使用 SUNION …