Redis的介绍以及操作实现

7 篇文章 0 订阅
2 篇文章 0 订阅

Resdis

现存问题

1、传统的数据请求量过大,数据量过大时,速度就会变得奇慢无比或者直接宕机
2、搭建集群后,Session数据无法共享,而且传统的锁操作也失效了。
3、传统的关系型数据库无法是一个非结构化数据的存储,这时就出来了NOSQL

NOSQL

NOSQL:非关系统数据库,泛指除了关系统数据库之外的数据库。

  • Key-Value:Redis
  • 面向列存储:Hbase
  • 文档型:Mongodb,Elasitcsearch
  • 图形化:Neo4j
Redis 介绍

Redis是基于C语言编写的非关系型数据库,基于内存存储,还支持持久化,还提供了多种存储数据的结构,针对多种编程语言都提供了相应的API操作,并且还提供了主从,哨兵以及集群结构,解决性能瓶颈和单点故障问题。

安装 连接Redis
docker-compose.yml文件
version: '3.1'
services:
  redis:
    restart: always
    image: 10.0.134.175:5000/redis:5.0.9
    container_name: redis
    ports:
      - 6379:6379
    volumes:
      - ./conf/redis.conf:/usr/local/redis/redis.conf
      - ./data:/data
    command: ["redis-server","/usr/local/redis/redis.conf"]

连接Redis服务
Redis 存储数据的结构

Redis 存储数据的结构一共有8种,重用的有5种

  • key-string //存储简单的数据,一个key对应一个信息。
  • key-hash //存储一个对象的信息
  • key-list // 存储一个列表,可以实现栈和队列结构
  • key-set //存储一个集合,提供并集,交集和差集的操作(不允许重复,存储无序)、
  • key-zset // 存储一个集合,实现排行榜等操作(不允许重复,存取有序,根据指定的score)
  • HyperLogLog:(了解)
  • geo:(了解)
  • 位图:(了解)
Redis的操作(官网http://redisdoc.com/有好多,现在写的都是常用的)
String命令
  • set key value //设置key和value
  • set key // 通过key 获取value
  • setex key second value // 设置key和value的同时指定key的生存时间
  • setnx key value //当key不存在时,设置key和value,如果key存在,什么都不做
  • incr key // 将key对应的value自增1(value必须是数值)
  • decr key // 将key对应的value自减1(value必须是数值)
hash命令
list命令
set命令
zset命令
key命令
库的操作
  • flushdb // 删除当前库的全部key
  • flushall // 删除全部库的全部key
  • dbsize //查看当前库中key的个数
  • lastsave //查看最后一次写操作的时间
  • minitor //监控Redis命令的执行时间,发起者,以及具体命令

Java连接Redis操作

创建项目,导入依赖

<dependencies>
 <dependency>
     <groupId>redis.clients</groupId>
     <artifactId>jedis</artifactId>
     <version>2.9.0</version>
 </dependency>
 <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.12</version>
 </dependency>
</dependencies>
  • 创建Jedis对象,传参(Redis对应服务器的ip地址,端口号)
  • 用byte[]的方式存储对象,需要SerializationUtils.serialize()方法来序列化数组,同时实体类需要实现序列化(Serializable)
  • 用JSON方式存储对象,需要导入依赖
<!--        jsonlib,jackson,gson,fastJSON-->
<dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>fastjson</artifactId>
 <version>1.2.47</version>
</dependency>
  • 在JSON.toJSONString(value)方法实现转成Json字符串类型
  • 用连接池操作Redis,创建GenericObjectPoolConfig对象,指定连接池信息,再new JedisPool(poolConfig,“10.0.131.232”,6379)创建对象,通过pool获取Jedis对象jedisPool.getResource()
  • 管道批量操作
   @Test
    public void test1(){
        //0. 创建GenericObjectPoolConfig对象,指定连接池信息
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        poolConfig.setMaxTotal(100);
        poolConfig.setMaxIdle(10);
        poolConfig.setMinIdle(5);
        poolConfig.setMaxWaitMillis(3000);
        //1. 创建JedisPool对象.
        JedisPool jedisPool = new JedisPool(poolConfig,"10.0.131.232",6379);

        //2. 通过pool获取Jedis对象
        Jedis jedis = jedisPool.getResource();
        //3. 操作.
        //3.1 声明管道.
        Pipeline pipelined = jedis.pipelined();
        for (int i = 0; i <= 99999; i++) {
            //3.2 向管道添加牡蛎
            pipelined.incr("yyyy");
        }
        //3.3 将管道的命令全部发送给Redis执行.
        pipelined.sync();
        //4. 还回jedis对象.
        jedis.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值