Redis

Redis

安装

linux上安装

网址 : redis.io

找个文件存放redis.io安装包

命令:

wget  http://download.redis.io/releases/redis-5.0.2.tar.gz    下载
tar xzf redis-5.0.2.tar.gz                                    解压
cd  redis-5.0.2/src									   		进入 redis 文件下src目录
make													编译

注意: 如果你linux上没有 gcc或wget需要下载,gcc是让linux 可以编译源码的编译包

yum install gcc
yum install wget
启动

在redis-5.0.2 目录下

./src/redis-server redis.conf

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-var7zT3u-1664810973004)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220916134207.png)]

windows上 安装

网址:https://github.com/microsoftarchive/redis

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ni8aJtbn-1664810973007)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220916134944.png)]

下载 后缀为.zip的文件

并解压

启动

进入cmd模式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8QpMOFJA-1664810973008)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220916135533.png)]

Redis基本配置

在redis文件下找下 redis.conf 并进入,命令: vi redis.conf

配置项示例说明
daemonizedaemonize yes修改位置:136行,是否用后台运行,默认为no
portport 6379设置端口号,默认为6379
logfilellogfile ‘redis.log’设置日志文件
databasesdatabases 255设置redis数据库总量
dirdir数据文件目录设置数据文件储存位置
requirepassrequirepass 12345设置使用密码
设置 redis 后台运行
linux

修改 deamonize 配置项为后台运行,并保存重启 命令: redis-server redis.conf

windows 上暂时不弄,有时间弄
后台查看 报错(netstat not found):

后台查看6379端口是否被占

netstat -tulpn

需要下载 net-tools

yum install net-tools

下载后,重新查看后台,说明已经redis后台运行了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f1h7Ovrl-1664810973009)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220916151636.png)]

强制关闭redis

kill -9 + redis对应的PID

kill -9 34412                                          
客户端关闭(安全)

关于客户端后面会描述

redis-cli shutdown
设置连接密码

在 redis.conf或redis.windows.conf 中注释 requirepass 那行 ,并且设置密码

连接 redis

auth +密码

Redis客户端(需redis-server run 状态)

在redis文件下启动client

redis-cli

Redis通用命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AqIQFFot-1664810973010)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220918193506.png)]

Redis数据类型

String - 字符串类型

键 值

String 最大512mb 建议单个kv不超过100kb

字符串命令:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-40bLvAtM-1664810973011)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220918205444.png)]

Hash - Hash 类型

Hash类型用于存储结构化数据,有点类似 java中的 map

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZCjQgNf-1664810973012)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220918210432.png)]

deldel emp:1删除 emp:1 中的所有键

List - 类型

命令示例说明
rpushrpush list c向 list 右边插入 c,可以插入多个
lpushlpush list b向 list 左边插入 b,可以插入多个
lrangelrange list 0 -1显示list中的所有键
rpoprpop list弹出list中的最右键
lpoplpop list弹出 list 中的最左键

Set - 类型

Set集合是字符吕的无序集合,集合成员是唯一的

单词 :
intersection 交集

union set 并集

difference set 差集

命令示例说明
saddsadd set_test a建一个set_test 集合,增加一个键,可以插入多个,根据需求决定
smemberssmembers set_test查看set_test集合中的所有属性
sintersinter set_test set_test2查看两个集合交集 属性
sunionsunion set_test set_test2查看两个集合并集 属性
sdiffsdiff set_test set_test2差集有前后顺序,以前面的集合为准,显示的是set_test没有的属性

Zset - 有序集合类型

Zset集合是字符串有序集合,集合成员是唯一的

命令示例说明
zaddzadd zset_test 100 a
zrangezrange zset_test 0 -1显示zset_test所有
withscoreszrange zset_test 0 -1显示zset_test所有,并显示分数
zrangebyscorezrangebyscore zset_test 100 1003显示分数为100-103的键

连接外部服务器的redis

修改redis.conf

关闭保护模式
protected-mode no		-> protected-mode yes
设置可连接的ip
bind 127.0.0.1		->	bind 0.0.0.0

0.0.0.0 表示任何ip 都可以连接

防火墙开放6379端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload    重新加载防火墙,使设置生效

解读: firewall-cmd 表示 防火墙命令

zone=public 公共区域的防火墙

–add-port=6379/tcp 增加开放6379端口,允许tcp协议数据传输

permanent 设置永久生效,如果没有加上这一句,重启后之前的就会失效

注意服务器是阿里云,腾讯云等:

如果是外部服务器,如阿里云,腾讯云等,你还要在其安全组开启redis端口,一般默认为6379,(使用命令没有用,头疼,搞了一下午,教训呀)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K9WTrHoC-1664810973014)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220919190303.png)]

查看服务器ip(分内外网)
内网

如果你是在电脑上搭建的虚拟机,就是属于内网

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aTGMV266-1664810973014)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220919163139.png)]

外网

因为我这里写文章用的是阿里云服务器,属于外网

所有直接用外网 ip

注意事项:

Java客户端-Jedis

jedis 是java语言开发的redis 客户端工具包

网址:Clients | Redis

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLR4ruyM-1664810973016)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220919163724.png)]

进入GitHub - redis/jedis: Redis Java client designed for performance and ease of use.

看了下文档介绍,可以用Maven导入

Maven导入jedis

我这里版本是2.9.0,找到pom.xml粘贴进入就好了

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

java连接jedis

    @Test
    public void getConnRedis() {
        //注意要保持服务器开启redis-server,还分内外网,所有ip不一样,这里使用阿里云服务器,用公网ip
        Jedis jedis = new Jedis("公网ip",6379);
        try {
            jedis.auth("12345");
            jedis.select(2);
            System.out.println("redis 连接成功!");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            jedis.close();
        }
    }

java操作redis

String 类型
插入单个
//字符串
jedis.set("sn","2333434");

到服务器上查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zFmlkult-1664810973017)(https://cdn.jsdelivr.net/gh/leikuan123/images/images/微信截图_20220919191411.png)]

说明已经成功插入!

插入多个
jedis.mset(new String[]{"name","jjk","age","18"});
Hash 类型
单个
 //设置单个键为student1 属性为 name,值 为lili
jedis.hset("student1","name","lili");
多个
Map<String, String> map= new HashMap<>();
map.put("name","lili");
map.put("age","38");
map.put("sex","男");
jedis.hmset("student2",map);
//取出
Map<String, String> student2 = jedis.hgetAll("student2");
List类型

可以出现重复数据

//List
jedis.rpush("letter",new String[]{"d","e","f","g"});
jedis.lpush("letter",new String[]{"c","b","a"});
List<String> letter = jedis.lrange("letter", 0, -1);
jedis.lpop("letter");
jedis.rpop ("letter");
System.out.println(letter);

Jedis缓存数据

创建一个物品类

public class Goods {
    private int goodId;
    private String goodName;
    private long price;

    public Goods() {
    }

    public Goods(int goodId, String goodName, long price) {
        this.goodId = goodId;
        this.goodName = goodName;
        this.price = price;
    }

    public int getGoodId() {
        return goodId;
    }

    public void setGoodId(int goodId) {
        this.goodId = goodId;
    }

    public String getGoodName() {
        return goodName;
    }

    public void setGoodName(String goodName) {
        this.goodName = goodName;
    }

    public long getPrice() {
        return price;
    }

    public void setPrice(long price) {
        this.price = price;
    }
        @Override
    public String toString() {
        return "Goods{" +
                "goodId=" + goodId +
                ", goodName='" + goodName + '\'' +
                ", price=" + price +
                '}';
    }
}

类转成json字符串

网址:GitHub - 阿里巴巴/快速约翰逊:一个快速的JSON解析器/生成器。

导入Maven项目中的pom.xml

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.76</version>
</dependency>
代码
@Test
public void GoodsTest() {
    Jedis jedis = new Jedis("47.100.227.189", 6379);
    try {
        List<Goods> goodsArrayList = new ArrayList<>();
        goodsArrayList.add(new Goods(6696, "苹果", 5));
        goodsArrayList.add(new Goods(3493, "橘子", 7));
        goodsArrayList.add(new Goods(8990, "香蕉", 9));
        jedis.auth("12345");
        jedis.select(3);
        for (Goods g:goodsArrayList
             ) {
            //对象转成json格式的字符串
            String json = JSON.toJSONString(g);
            System.out.println(json);
            String key = "goods"+g.getGoodId();
            jedis.set(key,json);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        jedis.close();
    }
}
json字符串转成对应的类
代码:
@Test
public void jsonToClass(){
    Jedis jedis = new Jedis("47.100.227.189", 6379);
    try {
        jedis.auth("12345");
        jedis.select(3);
        String goodId = "goods"+"6696";
        Goods goods = JSON.parseObject(g, Goods.class);
        System.out.println(goods);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        jedis.close();
    }
}
   jedis.close();
}

}


#### json字符串转成对应的类

##### 代码:

@Test
public void jsonToClass(){
Jedis jedis = new Jedis(“47.100.227.189”, 6379);
try {
jedis.auth(“12345”);
jedis.select(3);
String goodId = “goods”+“6696”;
Goods goods = JSON.parseObject(g, Goods.class);
System.out.println(goods);
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值