当前位置:   article > 正文

在Java中使用Redis_java 访问 redis

java 访问 redis

黑马课程Redis笔记,供个人学习用,若有侵权,联系删除

一、Redis入门

1.Redis简介

Redis是一个基于内存的key-value结构数据库,即非关系型数据库,与MySQL二维表格数据库不同。并不是取代MySQL,而是对MySQL的补充

2.Redis特点

  • 基于内存存储,读写性能高
  • 适合存储热点数据,即访问量大的数据(热点商品、资讯、新闻)
  • 企业应用广泛

3.Redis下载与安装

链接:https://pan.baidu.com/s/1mIxr8IEWj-vdLSl7EJnovw?pwd=w8ah 
提取码:w8ah

f16b58c37e214439bc4c386e73375784.png

①启动Redis服务端:redis-server.exe redis.windows.conf

0b5f0ad1e0c140a5aae2fd34acf0fe8a.png

②启动客户端,连接Redis服务:redis-cli.exe (默认连接本地Redis服务,即6379

测试Redis服务启动是否正确:keys *

9f706457d75f48129f0d6aabe7ae038d.png

③也可以连接指定IP和端口号的Redis服务

d0268a0f03764a7d8203771da01fbaf1.png

④更改redis服务的密码

d11c08b5a4f84f11803a362548402b97.png

6ca32a7d60cf460ca479c5a046fdee63.png

⑤重新启动redis服务,再启动客户端,输入密码,连接服务

e7bd9b573d4543d6bdc272bd1914c1e4.png

4.安装Redis客户端图形界面(Another Redis)简化Redis操作

链接:https://pan.baidu.com/s/1gwBh5AcMagAKHEk5W5vEQw?pwd=umxc 
提取码:umxc

d36713f0d46a43838150777f1a09b9de.png401f348ff6214aa2a37fc8b43d1c7dad.png

5.Redis常用数据类型

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

  • 字符串 string
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 sorted set / zset

192c7e57e31047208cc5fe9477608d0b.png

 

二、Redis常用命令

1.字符串操作命令

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

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.列表操作命令

Redis列表是简单的字符串列表,按照插入顺序排序,常用命令:

  • LPUSH key value1 [value2]  将一个或多个值插入列表头部(左侧
  • LRANGE key start stop        获取列表指定范围内的原始
  • RPOP key              移除并获取列表最后一个元素
  • LLEN key               获取列表长度

59394d281c2a4aafb08d26287aaa7486.png

4.集合操作命令

Redis set是string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常用命令:

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

5.有序集合操作命令

Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令:

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

6.通用命令

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

6ad09664cfee427cbfa3350aa66d3012.png

 

三、在Java中操作Redis

1.Redis的Java客户端

Redis的Java客户端很多,常用的几种:

  • Jedis      封装优秀,方法名与Redis命令一一对应
  • Lettuce   基于Netty多线程框架,性能高效
  • Spring Data Redis  

spring Data Redis是spring的一部分,对Redis 底层开发包进行了高度封装。在spring项目中,可以使用spring Data Redis来简化操作。

2.Spring Data Redis使用方式

操作步骤:

①导入Spring Data Redis的maven坐标

  1. <!--Spring data redis -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-data-redis</artifactId>
  5. </dependency>

②配置Redis数据源

  1. spring:
  2. # redis配置
  3. redis:
  4. host: localhost
  5. port: 6379
  6. password: 123456
  7. database: 0

③编写配置类,创建RedisTemplate对象

  1. import lombok.extern.slf4j.Slf4j;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.data.redis.connection.RedisConnectionFactory;
  5. import org.springframework.data.redis.core.RedisTemplate;
  6. import org.springframework.data.redis.serializer.StringRedisSerializer;
  7. /**
  8. * Redis配置类
  9. */
  10. @Configuration
  11. @Slf4j
  12. public class RedisConfiguration {
  13. @Bean
  14. public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
  15. RedisTemplate redisTemplate = new RedisTemplate();
  16. //设置Redis的连接工厂
  17. redisTemplate.setConnectionFactory(redisConnectionFactory);
  18. //设置Redis key的序列化器
  19. redisTemplate.setKeySerializer(new StringRedisSerializer());
  20. return redisTemplate;
  21. }
  22. }

④通过RedisTemplate对象操作Redis

1)操作字符串类型的数据

  1. import org.junit.jupiter.api.Test;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.boot.test.context.SpringBootTest;
  4. import org.springframework.data.redis.core.*;
  5. import java.util.concurrent.TimeUnit;
  6. @SpringBootTest
  7. public class SpringDataRedisTest {
  8. @Autowired
  9. private RedisTemplate redisTemplate;
  10. @Test
  11. public void testRedistTemplate() {
  12. System.out.println(redisTemplate);
  13. ValueOperations valueOperations = redisTemplate.opsForValue();//字符串
  14. ListOperations listOperations = redisTemplate.opsForList();//列表
  15. HashOperations hashOperations = redisTemplate.opsForHash();//哈希
  16. SetOperations setOperations = redisTemplate.opsForSet();//集合
  17. ZSetOperations zSetOperations = redisTemplate.opsForZSet();//有序集合
  18. }
  19. /**
  20. * 操作字符串类型的数据
  21. */
  22. @Test
  23. public void testString(){
  24. // set get setex setnx
  25. redisTemplate.opsForValue().set("city", "潜江");
  26. String city = (String) redisTemplate.opsForValue().get("city");
  27. System.out.println(city);
  28. redisTemplate.opsForValue().set("code", "1234", 3, TimeUnit.MINUTES);
  29. redisTemplate.opsForValue().setIfAbsent("lock", "1");
  30. redisTemplate.opsForValue().setIfAbsent("lock", "2");
  31. }
  32. }

2)操作哈希类型的数据

  1. /**
  2. * 操作哈希类型的数据
  3. */
  4. @Test
  5. public void testHash(){
  6. //hset hget hdel hkeys hvals
  7. HashOperations hashOperations = redisTemplate.opsForHash();
  8. //hset
  9. hashOperations.put("100", "name", "张三");
  10. hashOperations.put("100", "age", "20");
  11. //hget
  12. String name = (String) hashOperations.get("100", "name");
  13. System.out.println(name);
  14. //hkeys
  15. Set keys = hashOperations.keys("100");
  16. System.out.println(keys);
  17. //hvals
  18. List values = hashOperations.values("100");
  19. System.out.println(values);
  20. //hdel
  21. hashOperations.delete("100", "age");
  22. }

3)操作列表类型的数据

  1. /**
  2. * 操作列表类型的数据
  3. */
  4. @Test
  5. public void testList() {
  6. //lpush lrange rpop llen
  7. ListOperations listOperations = redisTemplate.opsForList();
  8. //lpush
  9. listOperations.leftPushAll("mylist", "a", "b", "c");
  10. listOperations.leftPush("mylist", "d");
  11. //lrange
  12. List mylist = listOperations.range("mylist", 0, -1);
  13. System.out.println(mylist);
  14. //rpop
  15. listOperations.rightPop("mylist");
  16. //llen
  17. Long size = listOperations.size("mylist");
  18. System.out.println(size);
  19. }

4)操作集合类型的数据

  1. /**
  2. * 操作集合类型的数据
  3. */
  4. @Test
  5. public void testSet() {
  6. //sadd smembers scard sinter sunion srem
  7. SetOperations setOperations = redisTemplate.opsForSet();
  8. //sadd
  9. setOperations.add("set1", "a", "b", "c", "d");
  10. setOperations.add("set2", "a", "b", "x", "y");
  11. //smembers
  12. Set set1 = setOperations.members("set1");
  13. System.out.println(set1);
  14. //scard
  15. Long size = setOperations.size("set1");
  16. System.out.println(size);
  17. //sinter
  18. Set intersect = setOperations.intersect("set1", "set2");
  19. System.out.println(intersect);
  20. //sunion
  21. Set union = setOperations.union("set1", "set2");
  22. System.out.println(union);
  23. //srem
  24. setOperations.remove("set1", "a", "b");
  25. }

5)操作有序集合类型的数据

  1. /**
  2. * 操作有序集合类型的数据
  3. */
  4. @Test
  5. public void testZset() {
  6. //zadd zrange zincrby zrem
  7. ZSetOperations zSetOperations = redisTemplate.opsForZSet();
  8. //zadd
  9. zSetOperations.add("zset1", "a", 10);
  10. zSetOperations.add("zset1", "b", 12);
  11. zSetOperations.add("zset1", "c", 9);
  12. //zrange
  13. Set zset1 = zSetOperations.range("zset1", 0, -1);
  14. System.out.println(zset1);
  15. //zincrby
  16. zSetOperations.incrementScore("zset1", "c", 10);
  17. //zrem
  18. zSetOperations.remove("zset1", "a","b");
  19. }

6)通用命令的操作

  1. /**
  2. * 通用命令操作
  3. */
  4. @Test
  5. public void testCommon() {
  6. //keys exists type del
  7. //keys
  8. Set keys = redisTemplate.keys("*");
  9. System.out.println(keys);
  10. //exists
  11. Boolean name = redisTemplate.hasKey("name");
  12. Boolean set1 = redisTemplate.hasKey("set1");
  13. //type
  14. for (Object key: keys) {
  15. DataType type = redisTemplate.type(key);
  16. System.out.println(type.name());
  17. }
  18. //del
  19. redisTemplate.delete("mylist");
  20. }

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/812638
推荐阅读
相关标签
  

闽ICP备14008679号