Redis新手的坑,无法连接、缺少类、没有密码

阿西吧,自己太菜了,用SpringBoot调用Redis缓存的时候,出了各种问题,记录一下,大家别学我

本文有自己的经验,也有从其他博客整理来的零零散散的经验。

1、安装Redis

安装redis,一般有很多方法,比如yun安装,npm安装,直接压缩包安装,docker运行等等等等

先说yum里面的

yum安装比较简单

首先安装epel源

yum install -y epel-release

然后安装redis

yum install -y redis

设置成开机自启动

chkconfig redis on

卸载redis

yum remove redis

yum安装的配置文件的位置

配置文件在/etc/redis.conf

服务器和客户端在 /usr/bin/redis-server redis-cli

whereis redis 可以查看配置文件在哪

docker安装

docker会用的话,应该很清晰,

docker search redis

docker pull 镜像名

docker images 查看镜像

docker 默认没有配置文件,所以,默认使用问题很大

docekr 自定义配置文件启动 https://www.jianshu.com/p/ff599cddc869

压缩包安装

来自菜鸟

**下载地址:**http://redis.io/download,下载最新稳定版本。

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make

make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:

下面启动redis服务.

$ cd src
$ ./redis-server

注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。

$ cd src
$ ./redis-server ../redis.conf

redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

默认使用的是redis目录下的redis.conf文件,可以直接修改这个文件,也可以新建一个文件(这样比较保险)

2、redis配置文件

这里先不说高级配置

下面给了个中文翻译的配置文件(看不懂英文了可以看这个)

redis配置文件详解https://www.jianshu.com/p/41f393f594e8

就最简单的,让你的本地程序能访问远程服务器上的redis

错误:无法链接redis,默认情况下,外网是没办法访问redis的,需要修改配置

找到redis的配置文件 redis.conf

修改 protected-mode yes 改为:protected-mode no
注释掉 #bin 127.0.0.1

另外redis.conf中设置了密码也会出现这种情况,注释掉 #requirepass 这行

设置密码两种办法:

原文https://www.cnblogs.com/tenny-peng/p/11543440.html

需要使用./redis-cli进入redis,

客户端使用config get requirepass命令查看密码

>config get requirepass
1)"requirepass"
2)""    //默认空

客户端使用config set requirepass yourpassword命令设置密码

>config set requirepass 123456
>OK

一旦设置密码,必须先验证通过密码,否则所有操作不可用

>config get requirepass
(error)NOAUTH Authentication required

使用auth password验证密码

>auth 123456
>OK
>config get requirepass
1)"requirepass"
2)"123456"

另外一种办法

  1. 配置文件设置密码

在redis根目录下找到redis.windows.conf配置文件,搜索requirepass,找到注释密码行,添加密码如下:

# requirepass foobared
requirepass tenny     //注意,行前不能有空格

重启服务后,客户端重新登录后发现

>config get requirepass
1)"requirepass"
2)""

密码还是空?

网上查询后的办法:创建redis-server.exe 的快捷方式, 右键快捷方式属性,在目标后面增加redis.windows.conf, 这里就是关键,你虽然修改了.conf文件,但是exe却没有使用这个conf,所以我们需要手动指定一下exe按照修改后的conf运行,就OK了。

所以,这里我再一次重启redis服务(指定配置文件)

>redis-server.exe redis.windows.conf

客户端再重新登录,OK了。

>redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456
>config get requirepass
1)"requirepass"
2)"123456"

3、SpringBoot与Redis的坑

SpringBoot除去注解式的缓存外,还可以使用RedisTemplate来访问

注意RedisTemplate是RedisAutoConfiguration中,在系统启动时注入在系统中的Bean,所以我们使用需要引入

然后使用RedisTemplate获取ValueOperations类,用此进行操作。

 @Autowired
    StringRedisTemplate stringRedisTemplate;
    @Test
    void redisTest(){
        ValueOperations valueOperations=stringRedisTemplate.opsForValue();
        valueOperations.set("456","465");

        System.out.println(valueOperations.get("123"));
    }

java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool

这个看报错信息你应该知道是缺少了类,认真看一下是缺少了一个依赖(想不到吧,只是redis的依赖还不够)

引入依赖

		<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>

有用了求个赞,谢谢hxd

发布了65 篇原创文章 · 获赞 19 · 访问量 1万+
展开阅读全文

java.lang.NoClassDefFoundError

05-03

![图片说明](https://img-ask.csdn.net/upload/201705/03/1493780867_650176.png) linux下使用jedis,运行目录如上图,Main.java内容: ``` import redis.clients.jedis.exceptions.*; import redis.clients.jedis.*; import redis.clients.util.*; import org.apache.commons.pool2.*; import org.apache.commons.pool2.proxy.*; import org.apache.commons.pool2.impl.*; public class Main{ public static void main(String[] args){ Jedis jedis = new Jedis("127.0.0.1",6379); jedis.set("s2","123"); String result = jedis.get("s2"); System.out.println(result); jedis.close(); } } ``` 进入该目录下执行 javac -cp jedis-2.7.0.jar:commons-pool2-2.3.jar: Main.java 编译成功,然后运行 java Main报错: Exception in thread "main" java.lang.NoClassDefFoundError: redis/clients/jedis/Jedis at Main.main(Main.java:20) Caused by: java.lang.ClassNotFoundException: redis.clients.jedis.Jedis at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 1 more 编译成功了,但是运行时却找不到类?还是说编译其实也有问题,在Main.java中已经把两个外部jar包的所有类都import了。查了网上不少资料了但是还是没解决,平常都用IDE的,这次试试用javac然后就这样了。求解答,谢谢。 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览