侧边栏壁纸
  • 累计撰写 793 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

redis 安装设置

Dettan
2022-01-18 / 0 评论 / 0 点赞 / 96 阅读 / 1,586 字
温馨提示:
本文最后更新于 2022-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
外连设置
②、在配置文件88行左右(行数在右下角),protected-mode yes 改成 no


②、在配置文件61行左右(行数在右下角),注释掉172.0.0.1(默认redis是只能内网127.0.0.1访问,如果想外网访问需要修改绑定的地址)
③、设置redis可以一直在后台运行,以守护进程方式运行,即关闭SSH工具程序也在运行。将 daemonize no 改成 daemonize yes(在128行左右)
④、密码设置,将”#requirepass foobared“ 取掉注释改成 requirepass 123456(或者其它你需要的密码)(在480行左右)

先不说问题...先走步骤:
1、先安装gcc
yum -y install gcc
redis的安装和使用步骤
https://redis.io/download
安装时小心翼翼的按照官网上面的步骤执行命令. 
$ wget http://download.redis.io/releases/redis-5.0.4.tar.gz
$ tar xzf redis-5.0.4.tar.gz
$ cd redis-5.0.4
$ make
$ src/redis-server
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
然后
然后
ok正常执行完毕....然后在Java代码中调用Redis。(使用Jedis方式调用)
1、导包
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
2.测试代码
package com.king.editor.redis;
 
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * @Description
 * @Author HuHuanJin
 * @Date 2019-04-27 15:53
 */
public class RedisConfig {
    public static void main(String[] args) {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(1000);//最大空闲时间
        config.setMaxWaitMillis(1000); //最大等待时间
        config.setMaxTotal(500); //redis池中最大对象个数
 
        JedisShardInfo sharInfo = new JedisShardInfo("47.105.175.98", 6379,1000);
        sharInfo.setPassword("a123456");
        List<JedisShardInfo> list = new ArrayList<JedisShardInfo>();
        list.add(sharInfo);
        ShardedJedisPool pool = new ShardedJedisPool(config, list);
        ShardedJedis jedis2 = pool.getResource();
        jedis2.set("mm", "meimei");
        System.out.println(jedis2.get("hhj"));
        System.out.println(jedis2.get("mm"));
 
    }
}
3.允许main 方法.验证猜想.结果
报错了.....我一脸懵逼..........怎么会不行呢?哪一步出错了?开始研究1.第一时间查看报错信息:java.net.SocketTimeoutException: connect timed out
2.超时了.没有连接上服务?于是检查ip.端口,都没有问题啊.
3.id问题?.cmd 开始ping一下redis的ip.网络也是通的,(把防火墙关闭)
4.端口问题?telnet xx 6379 ,结果
不通哦....端口不对?通过端口确认,发现是端口不通 ,于是上网查一下,
https://my.oschina.net/yitiaoxianyu/blog/914176
然后确定。再重启redis-server,就可以愉快的运行阿里云服务器上的redis了
到此.我非常开心.....马上去试了一下.又报错了
Caused by: redis.clients.jedis.exceptions.JedisDataException: 
DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, 
我踏马的....来气.明明已经改了redis.config文件了呀.redis.config没有修改生效?经过一系列的查看,发现redis.config是确定被修改了.问题是启动redis命令: 
./src/redis-server &
这样启动没有引用指定redis.config......redis读取不到我修改的redis.config.解决问题是启动redis命令:
./src/redis-server ./redis.conf &
在测试一下
问题得解决!
在上述过程中,发现用kill -9 pid的形式杀进程,重启redis之后.之前set的数据不存在了...这里涉及到redis的持久化策略:
一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。
具体配置.下一篇研究.............
------------------------------------------------------------------------------------------------------
1.redis 中文存储乱码问题
在redis 中存储中文,读取会出现乱码(其实不是乱码,只是不是我们存的中文显示)
1 redis> set test "我们"  
2 OK  
3 redis> get test  
4 "\xe6\x88\x91\xe4\xbb\xac"  
如何在get时取到它的中文呢?只需要在redis-cli 后面加上 --raw
redis> get test
"我们"
------------------------------------------------------------------------------------------------------
2.Redis (error) NOAUTH Authentication required.解决方法
出现认证问题,应该是设置了认证密码,输入密码既可以啦
注意密码是字符串形式!
1.
127.0.0.1:6379> auth "yourpassword"
------------------------------------------------------------------------------------------------------
3.设置redis访问密码
1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,)
(1)首先进入redis,如果没有开启redis则需要先开启:[root@iZ94jzcra1hZ bin]# redis-cli -p 6379127.0.0.1:6379> 
(2)查看当前redis有没有设置密码:127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
(3)为以上显示说明没有密码,那么现在来设置密码:127.0.0.1:6379> config set requirepass abcdefgOK127.0.0.1:6379> 
(4)再次查看当前redis就提示需要密码:127.0.0.1:6379> config get requirepass(error) NOAUTH Authentication required.127.0.0.1:6379>
2.第二种方式 (永久方式)需要永久配置密码的话就去redis.conf的配置文件中找到requirepass这个参数,如下配置:
修改redis.conf配置文件
# requirepass foobaredrequirepass 123 指定密码123
保存后重启redis就可以了
------------------------------------------------------------------------------------------------------
4.redis程序报Could not get a resource from the pool异常
其实也就是在执行
jedis = jedisPool.getResource();
这一步时出错了
解决方案:
1.可能是你的redis服务没开启,检查下。2.可能的原因有你的防火墙没有开放Redis的端口,可以配置打开,也可以直接关掉防火墙。
3.确认开启了之后就修改你的redis.conf文件,
3.1把bind 127.0.0.1注释掉,即把redis的访问权限改成所有的IP都能访问 (比如远程访问)
3.2把保护模式关闭.即protected-mode yes 改为 no (在redis3.2之后,redis增加了protected-mode,在这个模式下,即使注释掉了bind 127.0.0.1,再访问redisd时候还是报错)
0

评论区