文章目录
1.Jedis 1.介绍 2.环境配置 1.创建maven项目 2.pom.xml引入依赖 3.新建一个包并创建一个文件
3.Jedis远程连接到Redis 1.Redis放到服务器可以连接的前提条件 2.为Redis设置密码 1.编辑配置文件 2.找到 requirepass 3.设置密码为root 4.重启Redis,在shutdown的时候报错,原因是之前连接到了redis的客户端没有关闭,执行下面的指令关闭 5.然后再重启Redis,此时再次操作Redis就需要密码了
3.编写代码连接Redis
4.key操作
5.string操作
6.list操作
7.set操作
8.hash操作
9.zset操作
2.由于Redis被攻击了,所以重新配置 1.修改端口为7489 2.设置redis密码 3.使redis支持远程访问 4.重启redis 1.指定配置文件启动redis 2.查看是否启动 3.指定端口连接redis 4.测试密码 5.如果要关闭redis,在命令行关闭redis,输入shutdown
5.开放7489端口 1.宝塔开启端口 2.腾讯云开启端口 3.为了安全只允许本机ip访问
2.SpringBoot2整合Redis 1.环境配置 1.创建maven项目 2.pom.xml引入依赖 3.application.yml 配置redis 4.添加Redis的配置类(使用SpringBoot默认的会出些问题关于序列化的)RedisConfig.java
2.测试 1.编写测试的Controller 2.编写主启动类 3.启动测试 [localhost:8080/redisTest/set](http://localhost:8080/redisTest/set)
3.对list进行操作
4.注意事项 1.先看报错是无法识别的token 2.如果使用redisTemplate进行set会先序列化,然后读取的时候也会反序列化,但是直接在客户端set不会进行序列化,所以在使用redisTemplate进行反序列化的时候就会出现问题 3.解决方式:都使用程序进行操作即可
1.Jedis
1.介绍
2.环境配置
1.创建maven项目
2.pom.xml引入依赖
< dependency>
< groupId> redis.clients</ groupId>
< artifactId> jedis</ artifactId>
< version> 3.2.0</ version>
</ dependency>
3.新建一个包并创建一个文件
3.Jedis远程连接到Redis
1.Redis放到服务器可以连接的前提条件
确认端口开启 protected-mode(设置no支持远程访问) 注销bind = 127.0.0.1 最好设置一个密码在requirepass
2.为Redis设置密码
1.编辑配置文件
vim /etc/redis.conf
2.找到 requirepass
3.设置密码为root
4.重启Redis,在shutdown的时候报错,原因是之前连接到了redis的客户端没有关闭,执行下面的指令关闭
redis-cli shutdown nosave
5.然后再重启Redis,此时再次操作Redis就需要密码了
3.编写代码连接Redis
package com. sun. jedis ;
import org. junit. Test ;
import redis. clients. jedis. Jedis ;
public class Jedis_ {
@Test
public void con ( ) {
Jedis jedis = new Jedis ( "xxxx" , xxx) ;
jedis. auth ( "root" ) ;
String ping = jedis. ping ( ) ;
System . out. println ( "ping = " + ping) ;
jedis. close ( ) ;
}
}
4.key操作
1.代码
@Test
public void key ( ) {
Jedis jedis = new Jedis ( "xxxxxx" , xxxx) ;
jedis. auth ( "root" ) ;
jedis. set ( "k1" , "v1" ) ;
jedis. set ( "k2" , "v2" ) ;
jedis. set ( "k3" , "v3" ) ;
Set < String > keys = jedis. keys ( "*" ) ;
for ( String key : keys) {
System . out. println ( "key=" + key) ;
}
Boolean k1 = jedis. exists ( "k1" ) ;
System . out. println ( "k1是否存在?" + k1) ;
System . out. println ( "k2的ttl=" + jedis. ttl ( "k2" ) ) ;
String k3 = jedis. get ( "k3" ) ;
System . out. println ( "k3=" + k3) ;
jedis. close ( ) ;
}
2.结果
5.string操作
1.代码
@Test
public void string ( ) {
Jedis jedis = new Jedis ( "xxxxxx" , xxxx) ;
jedis. auth ( "root" ) ;
jedis. flushDB ( ) ;
jedis. mset ( "k1" , "v1" , "k2" , "v2" , "k3" , "v3" ) ;
List < String > mget = jedis. mget ( "k1" , "k2" , "k3" ) ;
for ( String s : mget) {
System . out. println ( s) ;
}
jedis. close ( ) ;
}
2.结果
6.list操作
1.代码
@Test
public void list ( ) {
Jedis jedis = new Jedis ( "xxxxxx" , xxxx) ;
jedis. auth ( "root" ) ;
jedis. flushDB ( ) ;
jedis. lpush ( "key" , "v1" , "v2" , "v3" ) ;
List < String > key = jedis. lrange ( "key" , 0 , - 1 ) ;
for ( String s : key) {
System . out. println ( s) ;
}
jedis. close ( ) ;
}
}
2.结果
7.set操作
1.代码
@Test
public void set ( ) {
Jedis jedis = new Jedis ( "xxxxxx" , xxxx) ;
jedis. auth ( "root" ) ;
jedis. flushDB ( ) ;
jedis. sadd ( "key" , "val1" , "val2" , "val3" ) ;
Set < String > key = jedis. smembers ( "key" ) ;
for ( String s : key) {
System . out. println ( s) ;
}
jedis. close ( ) ;
}
2.结果
8.hash操作
1.代码
@Test
public void hash ( ) {
Jedis jedis = new Jedis ( "xxxxxx" , xxxx) ;
jedis. auth ( "xxxxxxx" ) ;
jedis. flushDB ( ) ;
Map < String , String > map = new HashMap < String , String > ( ) ;
map. put ( "field1" , "value1" ) ;
map. put ( "field2" , "value2" ) ;
map. put ( "field3" , "value3" ) ;
jedis. hset ( "key" , map) ;
List < String > hmget = jedis. hmget ( "key" , "field1" , "field2" , "field3" ) ;
for ( String s : hmget) {
System . out. println ( s) ;
}
jedis. close ( ) ;
}
2.结果
9.zset操作
1.代码
@Test
public void zset ( ) {
Jedis jedis = new Jedis ( "xxxx" , xxxx) ;
jedis. auth ( "xxxx" ) ;
jedis. flushDB ( ) ;
jedis. zadd ( "key" , 1 , "zhangsan" ) ;
jedis. zadd ( "key" , 2 , "lisi" ) ;
jedis. zadd ( "key" , 3 , "wangwu" ) ;
Set < String > key = jedis. zrange ( "key" , 0 , - 1 ) ;
for ( String s : key) {
System . out. println ( s) ;
}
jedis. close ( ) ;
}
2.结果
2.由于Redis被攻击了,所以重新配置
1.修改端口为7489
2.设置redis密码
3.使redis支持远程访问
4.重启redis
1.指定配置文件启动redis
/usr/local/bin/redis-server /etc/redis.conf
2.查看是否启动
ps -aux | grep redis
3.指定端口连接redis
/usr/local/bin/redis-cli -p 7489
4.测试密码
5.如果要关闭redis,在命令行关闭redis,输入shutdown
5.开放7489端口
1.宝塔开启端口
systemctl start firewalld && firewall-cmd --permanent --add-port= 7489 /tcp && firewall-cmd --reload && firewall-cmd --query-port= 7489 /tcp
2.腾讯云开启端口
3.为了安全只允许本机ip访问
2.SpringBoot2整合Redis
1.环境配置
1.创建maven项目
2.pom.xml引入依赖
< parent>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-parent</ artifactId>
< version> 2.6.6</ version>
< relativePath/>
</ parent>
< properties>
< java.version> 1.8</ java.version>
</ properties>
< dependencies>
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-web</ artifactId>
</ dependency>
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-data-redis</ artifactId>
</ dependency>
< dependency>
< groupId> org.apache.commons</ groupId>
< artifactId> commons-pool2</ artifactId>
</ dependency>
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-test</ artifactId>
< scope> test</ scope>
</ dependency>
< dependency>
< groupId> com.fasterxml.jackson.core</ groupId>
< artifactId> jackson-databind</ artifactId>
< version> 2.13.2.2</ version>
</ dependency>
</ dependencies>
< build>
< plugins>
< plugin>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-maven-plugin</ artifactId>
</ plugin>
</ plugins>
</ build>
3.application.yml 配置redis
spring :
redis :
host : xxxxxx
port : xxxx
password : ******
database : 0
timeout : 1800000
lettuce :
pool :
max-active : 20
max-wait : -1
max-idle : 10
min-idle : 0
4.添加Redis的配置类(使用SpringBoot默认的会出些问题关于序列化的)RedisConfig.java
package com. sun. redis. config ;
import com. fasterxml. jackson. annotation. JsonAutoDetect ;
import com. fasterxml. jackson. annotation. JsonTypeInfo ;
import com. fasterxml. jackson. annotation. PropertyAccessor ;
import com. fasterxml. jackson. databind. ObjectMapper ;
import com. fasterxml. jackson. databind. jsontype. impl. LaissezFaireSubTypeValidator ;
import org. springframework. cache. CacheManager ;
import org. springframework. cache. annotation. CachingConfigurerSupport ;
import org. springframework. cache. annotation. EnableCaching ;
import org. springframework. context. annotation. Bean ;
import org. springframework. context. annotation. Configuration ;
import org. springframework. data. redis. cache. RedisCacheConfiguration ;
import org. springframework. data. redis. cache. RedisCacheManager ;
import org. springframework. data. redis. connection. RedisConnectionFactory ;
import org. springframework. data. redis. core. RedisTemplate ;
import org. springframework. data. redis. serializer. Jackson2JsonRedisSerializer ;
import org. springframework. data. redis. serializer. RedisSerializationContext ;
import org. springframework. data. redis. serializer. RedisSerializer ;
import org. springframework. data. redis. serializer. StringRedisSerializer ;
import java. time. Duration ;
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate < String , Object > redisTemplate ( RedisConnectionFactory factory) {
RedisTemplate < String , Object > template =
new RedisTemplate < > ( ) ;
System . out. println ( "template=>" + template) ;
RedisSerializer < String > redisSerializer =
new StringRedisSerializer ( ) ;
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer =
new Jackson2JsonRedisSerializer ( Object . class ) ;
ObjectMapper om = new ObjectMapper ( ) ;
om. setVisibility ( PropertyAccessor . ALL , JsonAutoDetect. Visibility . ANY ) ;
om. activateDefaultTyping (
LaissezFaireSubTypeValidator . instance, ObjectMapper. DefaultTyping . NON_FINAL , JsonTypeInfo. As . WRAPPER_ARRAY ) ;
jackson2JsonRedisSerializer. setObjectMapper ( om) ;
template. setConnectionFactory ( factory) ;
template. setKeySerializer ( redisSerializer) ;
template. setValueSerializer ( jackson2JsonRedisSerializer) ;
template. setHashValueSerializer ( jackson2JsonRedisSerializer) ;
return template;
}
@Bean
public CacheManager cacheManager ( RedisConnectionFactory factory) {
RedisSerializer < String > redisSerializer =
new StringRedisSerializer ( ) ;
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new
Jackson2JsonRedisSerializer ( Object . class ) ;
ObjectMapper om = new ObjectMapper ( ) ;
om. setVisibility ( PropertyAccessor . ALL , JsonAutoDetect. Visibility . ANY ) ;
om. activateDefaultTyping (
LaissezFaireSubTypeValidator . instance, ObjectMapper. DefaultTyping . NON_FINAL , JsonTypeInfo. As . WRAPPER_ARRAY ) ;
jackson2JsonRedisSerializer. setObjectMapper ( om) ;
RedisCacheConfiguration config = RedisCacheConfiguration . defaultCacheConfig ( )
. entryTtl ( Duration . ofSeconds ( 600 ) )
. serializeKeysWith ( RedisSerializationContext. SerializationPair . fromSerializer ( redisSerializer) )
. serializeValuesWith ( RedisSerializationContext. SerializationPair . fromSerializer ( jackson2JsonRedisSerializer) )
. disableCachingNullValues ( ) ;
RedisCacheManager cacheManager = RedisCacheManager . builder ( factory)
. cacheDefaults ( config)
. build ( ) ;
return cacheManager;
}
}
2.测试
1.编写测试的Controller
package com. sun. redis. controller ;
import org. springframework. data. redis. core. RedisTemplate ;
import org. springframework. web. bind. annotation. RequestMapping ;
import org. springframework. web. bind. annotation. RestController ;
import javax. annotation. Resource ;
@RestController
@RequestMapping ( "/redisTest" )
public class TestController {
@Resource
private RedisTemplate < String , Object > redisTemplate;
@RequestMapping ( "/set" )
public String set ( ) {
redisTemplate. opsForValue ( ) . set ( "name" , "孙显圣" ) ;
return redisTemplate. opsForValue ( ) . get ( "name" ) . toString ( ) ;
}
}
2.编写主启动类
package com. sun. redis ;
import org. springframework. boot. SpringApplication ;
import org. springframework. boot. autoconfigure. SpringBootApplication ;
@SpringBootApplication
public class RedisApplication {
public static void main ( String [ ] args) {
SpringApplication . run ( RedisApplication . class , args) ;
}
}
3.对list进行操作
1.代码
@RequestMapping ( "/list" )
public String list ( ) {
redisTemplate. delete ( "key" ) ;
redisTemplate. opsForList ( ) . leftPushAll ( "key" , "v1" , "v2" , "v3" ) ;
List < Object > range = redisTemplate. opsForList ( ) . range ( "key" , 0 , - 1 ) ;
return range. toString ( ) ;
}
2.结果
4.注意事项
1.先看报错是无法识别的token
2.如果使用redisTemplate进行set会先序列化,然后读取的时候也会反序列化,但是直接在客户端set不会进行序列化,所以在使用redisTemplate进行反序列化的时候就会出现问题
3.解决方式:都使用程序进行操作即可