自己做网站不推广,德阳网站建设公司,wordpress 打包 转移,网站的推广和宣传工作如何做文章目录 1 Redis 入门1.1 简介1.2 Redis服务启动与停止#xff08;Windows#xff09;1.2.1 服务启动命令1.2.2 客户端连接命令1.2.3 修改Redis配置文件1.2.4 Redis客户端图形工具 2. Redis数据类型2.1 五种常用数据类型介绍 3. Redis常用命令3.1 字符串操作命令3.2 哈希操作… 文章目录 1 Redis 入门1.1 简介1.2 Redis服务启动与停止Windows1.2.1 服务启动命令1.2.2 客户端连接命令1.2.3 修改Redis配置文件1.2.4 Redis客户端图形工具 2. Redis数据类型2.1 五种常用数据类型介绍 3. Redis常用命令3.1 字符串操作命令3.2 哈希操作命令3.3 列表操作命令3.4 集合操作命令3.5 有序集合操作命令3.6 通用命令 2 Spring Data Redis使用方式2.1 导入依赖maven 坐标2.2 配置数据源2.3 编写配置类2.4 测试 redis 连接和操作2.5 使用 Java 操作 Redis2.6 五种常见数据类型的一般使用场景字符串String哈希Hash列表List集合Set有序集合Sorted Set 1 Redis 入门
1.1 简介
Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。官网https://redis.io 中文网https://www.redis.net.cn/ key-value结构存储主要特点
基于内存存储读写性能高适合存储热点数据热点商品、资讯、新闻企业应用广泛
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库官方提供的数据是可以达到100000的QPS每秒内查询次数。它存储的value类型比较丰富也被称为结构化的NoSql数据库。所谓的 NoSqlNot Only SQL不仅仅是SQL泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库而是关系型数据库的补充。 关系型数据库(RDBMS)Mysql、Oracle、DB2、SQLServer 非关系型数据库(NoSql)Redis、Mongo db、MemCached
1.2 Redis服务启动与停止Windows
1.2.1 服务启动命令
redis-server.exe redis.windows.confRedis服务默认端口号为 6379 通过快捷键Ctrl C 即可停止Redis服务当Redis服务启动成功后可通过客户端进行连接。
1.2.2 客户端连接命令
通过redis-cli.exe命令默认连接的是本地的redis服务并且使用默认6379端口。也可以通过指定如下参数连接
-h ip地址-p 端口号-a 密码如果需要
1.2.3 修改Redis配置文件
设置Redis服务密码修改redis.windows.conf 文件添加 requirepass 123456 注意修改密码后需要重启Redis服务才能生效Redis配置文件中 # 表示注释。 重启Redis后再次连接Redis时需加上密码否则连接失败。此时-h 和 -p 参数可省略不写。
redis-cli.exe -h localhost -p 6379 -a 1234561.2.4 Redis客户端图形工具
默认提供的客户端连接工具界面不太友好同时操作也较为麻烦接下来引入一个Redis客户端图形工具。
2. Redis数据类型
2.1 五种常用数据类型介绍
Redis存储的是key-value结构的数据其中key是字符串类型value有5种常用的数据类型
字符串 string哈希 hash列表 list集合 set有序集合 sorted set / zset 各种数据类型特点 字符串(string)普通字符串Redis中最简单的数据类型哈希(hash)也叫散列类似于Java中的HashMap结构列表(list)按照插入顺序排序可以有重复元素类似于Java中的LinkedList集合(set)无序集合没有重复元素类似于Java中的HashSet有序集合(sorted set/zset)集合中每个元素关联一个分数(score)根据分数升序排序没有重复元素 3. Redis常用命令
3.1 字符串操作命令
Redis 中字符串类型常用命令
SET key value # 设置指定key的值
GET key # 获取指定key的值
SETEX key seconds value # 设置指定key的值并将 key 的过期时间设为 seconds 秒
SETNX key value # 只有在 key 不存在时设置 key 的值更多命令可以参考Redis中文网https://www.redis.net.cn
3.2 哈希操作命令
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 列表操作命令
Redis 列表是简单的字符串列表按照插入顺序排序常用命令
# 将一个或多个值插入到列表头部
LPUSH key value1 [value2]# 获取列表指定范围内的元素
LRANGE key start stop # 移除并获取列表最后一个元素
RPOP key LLEN key # 获取列表长度# 移出并获取列表的最后一个元素
# 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
BRPOP key1 [key2 ] timeout3.4 集合操作命令
Redis set 是string类型的无序集合。集合成员是唯一的这就意味着集合中不能出现重复的数据常用命令
SADD key member1 [member2] #向集合添加一个或多个成员
SMEMBERS key #返回集合中的所有成员
SCARD key #获取集合的成员数
SINTER key1 [key2] #返回给定所有集合的交集
SUNION key1 [key2] #返回所有给定集合的并集
SREM key member1 [member2] #移除集合中一个或多个成员3.5 有序集合操作命令
Redis有序集合是string类型元素的集合且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令
ZADD key score1 member1 [score2 member2] #向有序集合添加一个或多个成员
ZRANGE key start stop [WITHSCORES] #通过索引区间返回有序集合中指定区间内的成员
ZINCRBY key increment member #有序集合中对指定成员的分数加上增量 increment
ZREM key member [member ...] #移除有序集合中的一个或多个成员3.6 通用命令
Redis的通用命令是不分数据类型的都可以使用的命令
KEYS pattern #查找所有符合给定模式( pattern)的 key
EXISTS key #检查给定 key 是否存在
TYPE key #返回 key 所储存的值的类型
DEL key #该命令用于在 key 存在是删除 key2 Spring Data Redis使用方式 Redis 的 Java 客户端很多常用的几种 JedisLettuceSpring Data Redis Spring 对 Redis 客户端进行了整合提供了 Spring Data Redis在Spring Boot项目中还提供了对应的Starter即 spring-boot-starter-data-redis。
Spring Data Redis 是 Spring 的一部分提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务对 Redis 底层开发包进行了高度封装。在 Spring 项目中可以使用Spring Data Redis来简化 Redis 操作。 网址https://spring.io/projects/spring-data-redis
2.1 导入依赖maven 坐标
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependencySpring Data Redis中提供了一个高度封装的类RedisTemplate对相关api进行了归类封装,将同一类型操作封装为operation接口具体分类如下 ValueOperationsstring数据操作SetOperationsset类型数据操作ZSetOperationszset类型数据操作HashOperationshash类型的数据操作ListOperationslist类型的数据操作 2.2 配置数据源
在application.yml中添加 redis 的相关配置确保已安装 redis
redis:host: localhostport: 6379password: 123456database: 10 # 指定使用Redis的哪个数据库Redis服务启动后默认有16个数据库编号分别是从0到15database:指定使用Redis的哪个数据库Redis服务启动后默认有16个数据库编号分别是从0到15。可以通过修改Redis配置文件来指定数据库的数量。 添加数据后记得使用 select 10 选择到配置使用的数据库中方可查看到添加的数据。 2.3 编写配置类
Configuration
Slf4j
public class RedisConfiguration {Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info(开始创建redis模板对象...);RedisTemplate redisTemplate new RedisTemplate();//设置redis的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);//设置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}解释说明 当前配置类不是必须的因为 Spring Boot 框架会自动装配 RedisTemplate 对象但是默认的key序列化器为JdkSerializationRedisSerializer导致我们存到Redis中后的数据和原始数据有差别故设置为StringRedisSerializer序列化器。 Bean注解用于告诉Spring容器被注解的方法将返回一个对象该对象要注册为Spring应用上下文中的bean。当Spring容器启动时它会查找所有带有Bean注解的方法并调用这些方法将返回的实例注册到Spring容器中以便在需要时能够自动装配autowire这些bean。 疑问为什么要在模版配置方法前面添加Bean注解 配置RedisTemplateRedisTemplate是Spring Data Redis提供的一个高级抽象用于简化Redis数据的访问。通过Bean注解你能够自定义RedisTemplate的配置比如设置连接工厂、序列化器等然后将这个配置好的RedisTemplate实例注册到Spring容器中。这样在Spring应用的其他部分你就可以通过自动装配如使用Autowired注解来使用这个配置好的RedisTemplate实例了。解耦将RedisTemplate的配置和使用解耦。你不需要在每个需要使用Redis的地方都手动创建和配置RedisTemplate。相反你只需要在配置类中配置一次然后在需要的地方通过Spring的依赖注入机制来使用它。可重用性由于RedisTemplate是作为一个bean注册在Spring容器中的因此它是可重用的。你可以在应用的多个部分中注入同一个RedisTemplate实例而不需要为每个使用场景都创建一个新的实例。易于测试通过将RedisTemplate的配置和创建逻辑封装在配置类中并使用Bean注解来注册它你可以更容易地编写针对使用RedisTemplate的代码的单元测试。你可以使用Spring的测试支持来模拟或替换RedisTemplate以便在测试环境中运行你的代码而无需连接到实际的Redis服务器。支持多种配置如果你的应用需要多种配置的RedisTemplate实例例如用于不同的Redis数据库或具有不同序列化设置的实例你可以通过在同一配置类中定义多个带有Bean注解的方法来轻松实现这一点。Spring容器将能够区分这些不同的bean并在需要时将它们注入到正确的位置。 2.4 测试 redis 连接和操作
可以通过一个 main 方法测试这里介绍单元测试方式
SpringBootTest
public class SpringDataRedisTest {Autowiredprivate RedisTemplate redisTemplate;Testpublic void testRedisTemplate(){System.out.println(redisTemplate);//string数据操作ValueOperations valueOperations redisTemplate.opsForValue();//hash类型的数据操作HashOperations hashOperations redisTemplate.opsForHash();//list类型的数据操作ListOperations listOperations redisTemplate.opsForList();//set类型数据操作SetOperations setOperations redisTemplate.opsForSet();//zset类型数据操作ZSetOperations zSetOperations redisTemplate.opsForZSet();}
}运行后提示测试成功即可
2.5 使用 Java 操作 Redis
主要分为以下几种操作
操作字符串类型操作集合数据类型操作列表数据类型操作哈希数据类型操作有序集合数据类型通用的操作命令
/*** 操作字符串类型的数据*/Testpublic void testString() {// 设置键值对redisTemplate.opsForValue().set(name, 小明);// 获取对应key的值String city (String) redisTemplate.opsForValue().get(name);System.out.println(city);// 添加String类型的数据同时设置过期时间redisTemplate.opsForValue().set(code, 1234, 3, TimeUnit.MINUTES);// 在某个key不存在是设置值redisTemplate.opsForValue().setIfAbsent(lock, 1);redisTemplate.opsForValue().setIfAbsent(lock, 2);}/*** 操作集合类型的数据*/Testpublic void testSet() {SetOperations setOperations redisTemplate.opsForSet();// 添加元素 set1不存在创建并添加存在直接添加setOperations.add(set1, a, b, c);setOperations.add(set2, a, c, f);// 获取set1中的所有成员Set member setOperations.members(set1);System.out.println(member);// 统计元素数量Long size setOperations.size(set1);System.out.println(size);// 计算交集Set intersect setOperations.intersect(set1, set2);System.out.println(intersect);// 计算并集Set union setOperations.union(set1, set2);System.out.println(union);// 移除局部元素setOperations.remove(set1, a, b);}/*** 操作列表类型的数据*/Testpublic void testList() {ListOperations listOperations redisTemplate.opsForList();// 将对多个值从左到右插入到list中listOperations.leftPushAll(mylist, a, b, c);// 将多个值从左到右插入到list中头部插入listOperations.leftPush(mylist, d);// 获取从0到-1的所有元素即全部元素List muList listOperations.range(mylist, 0, -1);System.out.println(muList);// 从list的右边移除并返回最后一个元素listOperations.rightPop(mylist);// 统计元素数量Long size listOperations.size(mylist);System.out.println(size);}/*** 操作哈希类型的数据*/Testpublic void testHash() {HashOperations hashOperations redisTemplate.opsForHash();// 添加一个hash字段并赋值对象和属性的关系hashOperations.put(100, name, tom);hashOperations.put(100, age, 20);// 获取字段中某个元素String name (String) hashOperations.get(100, name);System.out.println(name);// 获取所有的字段名Set keys hashOperations.keys(100);System.out.println(keys);// 获取所有的字段值List values hashOperations.values(100);System.out.println(values);// 删除字段agehashOperations.delete(100, age);}/*** 操作有序集合类型的数据*/Testpublic void testZset() {ZSetOperations zSetOperations redisTemplate.opsForZSet();// 像zset中添加元素并设置其分数zSetOperations.add(zset1, a, 10);zSetOperations.add(zset1, b, 12);zSetOperations.add(zset1, c, 9);// 按照分数高低获取zset中的所有元素Set zset1 zSetOperations.range(zset1, 0, -1);System.out.println(zset1);// 将zset1中的c分数改为10zSetOperations.incrementScore(zset1, c, 10);// 移除两个元素zSetOperations.remove(zset1, a, b);}/*** 通用命令操作*/Testpublic void testCommon() {// 获取所有键 * 通配符Set keys redisTemplate.keys(*);System.out.println(keys);// 检查是否存在某个键 key Boolean name redisTemplate.hasKey(name);Boolean set1 redisTemplate.hasKey(set1);// 遍历keys集合获取每个keys的类型 DataType是枚举了redis的list\string\set\zset\hash等类型for (Object key : keys) {DataType type redisTemplate.type(key);System.out.println(type.name());}// 删除某个键关联的数据redisTemplate.delete(mylist);}运行之后配合 redis 可视化工具可以看到以上代码添加的数据一定要先切换到数据库号为 10 的 redis 数据库方可查看到相关数据。 控制台查看效果 可视化工具查看效果
2.6 五种常见数据类型的一般使用场景
字符串String
适用场景
缓存将常用的数据如用户信息、页面内容等存储在 Redis 的 String 类型中以减轻数据库的压力提高访问速度。计数器利用 Redis 的自增INCR和自减DECR操作可以很方便地实现计数功能如网站的访问次数、点赞数等。分布式锁基于 String 类型的特性可以实现分布式锁保证在分布式系统中的数据一致性和并发控制。
哈希Hash
适用场景
对象属性存储将对象的各个属性存储在 Hash 类型中每个字段对应一个属性方便快速查找和更新用户信息、商品信息等。缓存对象对于一些复杂的对象可以将其序列化后存储在 Hash 类型中避免多次数据库查询。配置信息使用 Hash 类型来存储配置信息如数据库连接参数、日志级别等方便快速读取和更新。
列表List
适用场景
消息队列List 类型可以实现简单的消息队列将消息依次插入到列表的一端消费者从另一端取出消息实现异步处理和解耦。动态数据流如社交平台中的朋友圈可以使用 List 存储用户的动态内容新的动态插入到列表头部用户读取动态时从头部获取最新内容。
集合Set
适用场景
标签系统在开发博客系统或商品系统时可以使用 Set 存储每篇文章或商品的标签方便根据标签进行分类和搜索。共同好友在社交应用中可以利用 Set 存储用户的好友列表通过求交集来找出共同的好友实现共同兴趣的推荐。黑名单管理将需要屏蔽的用户或信息存储在 Set 中方便快速查找和删除。
有序集合Sorted Set
适用场景
排行榜在游戏应用或社交应用中可以使用 Sorted Set 存储用户的得分信息根据分数排名实现排行榜功能。延时任务将任务的执行时间作为分数将任务存储在 Sorted Set 中定时从集合中取出需要执行的任务。热度排名在新闻、视频等应用中可以根据内容的点击量、观看时长等作为分数使用 Sorted Set 进行热度排名。