Redis入门

本文介绍了Redis的基本概念、特点,包括其作为NoSQL数据库的快速性、语言支持、持久化策略以及RDB和AOF两种持久化方法。还详细讲解了Redis的配置、常用命令、数据类型和在Java中的使用,以及与Mysql的配合应用。
摘要由CSDN通过智能技术生成

Redis基础

Redis是Key-Value型NoSQL数据库,将数据存储在内存中,同时也能持久化到磁盘,Redis常用于缓存,利用内存的高效提高程序的处理速度。

Redis的特点:

  • 速度快
  • 广泛的语言支持
  • 持久化
  • 多种数据结构
  • 主从复制
  • 分布式与高可用

Redis常用基本配置项:
在这里插入图片描述

./src/redis-server redis.conf 启动redis服务
./src/redis-cli shutdown 关闭redis服务
./src/redis-cli -p 端口号 启动redis客户端,-p指定端口(修改默认端口后连接redis需要加端口)

Redis数据库的名称是一个一个的数字,默认是0-15,一共16个数据库,可在redis.conf文件中修改databases

设置requirepass后,启动客户端后需要输入auth 密码登陆

Redis通用命令:
在这里插入图片描述

Redis常用数据类型:

  • String 字符串类型
  • Hash 键值对类型
  • List 列表类型
  • Set 集合类型
  • Zset 有序集合类型

String 字符串类型
String最大512mb,建议单个不超过100kb

常用字符串命令:
在这里插入图片描述
Hash 键值对类型
Hash类型用于存储结构化数据
在这里插入图片描述
常用Hash命令:
在这里插入图片描述
List 列表类型
List列表就是一系列字符串的“数组”,按插入顺序排序;
List列表最大长度为2的32次方-1,可以包含40亿个元素

List命令:
在这里插入图片描述

lrange list 0 -1 输出列表中的元素

Set 集合类型
Set集合是字符串的无序集合,且集合成员唯一
sadd set1 b c d 往set1中添加元素
smembers set1 查看set1中的元素
sinter set1 set2 交集
sunion set1 set2 并集
sdiff set1 set2 差集,set1中有的,set2中没有的

Zset 集合类型
Zset集合是字符串的有序集合,且集合成员唯一
zadd zset1 99 c 往zset1中添加元素,并设置分数(元素按分数排序)
zrange zset1 0 -1 查看zset1中的元素
zrange zset1 0 -1 withscores 查看zset1中的元素和分数

Java中使用Redis

Jedis:
由Java语言开发的Redis客户端工具,对Redis命令进行了封装,方便上手

添加依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.0.0</version>
</dependency>

连接到redis数据库

//端口为默认端口时,可以不写
Jedis jedis = new Jedis("192.168.77.129",6379);
//选择数据库2
jedis.select(2);      

jedis操作字符串类型:

jedis.set("sn","7788-9900");
String sn = jedis.get("sn");  
//可传入String数组或byte数组
jedis.mset(new String[]{"title","婴幼儿奶粉","num","20"});
List<String> goods = jedis.mget(new String[]{"sn", "title", "num"});         
Long num = jedis.incr("num");

jedis操作Hash类型:

jedis.hset("student:332","name","小明");
String name = jedis.hget("student:332","name");
Map<String,String> hash = new HashMap<>();
hash.put("name","小李");
hash.put("age","18");
jedis.hmset("student:331",hash);

Map<String,String> smap = jedis.hgetAll("student:331");        

jedis操作List类型:

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

利用Redis缓存数据:

public class CacheSample {
    public static void main(String[] args) {
        new CacheSample();
        //将数据从Redis中提取出来
        System.out.println("请输入要查询对商品编号:");
        String goodsId = new Scanner(System.in).next();
        Jedis jedis = new Jedis("192.168.77.129",6379);
        try{
            jedis.select(3);
            String key = "goods:"+goodsId;
            if(jedis.exists(key)){
                String json = jedis.get(key);
                Goods goods = JSON.parseObject(json,Goods.class);
            }else{
                System.out.println("不存在该商品编号");
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            jedis.close();
        }
    }
    public CacheSample(){
        Jedis jedis = new Jedis("192.168.77.129",6379);
         try{
             //将数据存储到redis中
             List<Goods> goodsList = new ArrayList<>();
             goodsList.add(new Goods(8800,"苹果","",3.5f));
             goodsList.add(new Goods(8801,"橙子","",5f));
             goodsList.add(new Goods(8802,"香蕉","",2f));
             jedis.select(3);
             for(Goods goods:goodsList){
                 String json = JSON.toJSONString(goods);
                 String key = "goods:"+goods.getGoodsId();
                 jedis.set(key,json);
             }
         }catch (Exception e){
            e.printStackTrace();
        }finally {
            jedis.close();
        }
    }
}

Redis持久化策略:
Redis持久化策略,将数据持久化到磁盘上,当启动Redis后可以从磁盘将数据加载到内存中,然后在内存中读取数据。
实现Redis持久化策略的方式:
1.RDB(数据快照模式),定期存储,保存的是数据本身,当服务器启动时,可以从RDB文件中恢复数据集。
2.AOF(追加模式),每次修改数据时,同步到硬盘(写操作日志),保存的是数据的变更记录。在服务器重启时,会把所有的写操作重新执行一遍,实现数据备份,当写操作集过大时,Redis会重写写操作集。

zrange和zrangebyscore:
在这里插入图片描述

jedis连接失败时:

  • 解除保护模式:redis.conf文件中,设置protected-mode no
  • 关闭防火墙:systemctl stop firewalld.service

Redis作为内存数据库,读取写入的速度非常快,经常用来存储数据、页面等缓存内容。
Mysql和Redis在处理大量读取数据操作时,一般需要配合使用,如获取大量帖子或新闻,就可以使用Redis将MySQL中的数据获取到,然后直接从Redis中读取数据,效率比较快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值