NoSql与Redis初级

NoSql

NoSql的介绍

1.什么是NoSql

​ NoSQL(不仅仅是SQL not only SQL),泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题;

2.含义:

​ 不仅仅是sql (not only sql)

​ nosql是非关系型数据库;用来解决网站里面大数据和高并发问题

3.nosql数据库的分类

​ a.key-value键值对型nosql数据库—redis

​ b.列式存储型

​ c.文档型

​ d.图表型

Redis

Redis的认识

1.redis是一个开源的高性能nosql数据库,数据可以储存在内存或者磁盘上

2.redis主要是key_value结构形式储存,redis底层支持各种类型的数据储存结构

​ 如:list/set/map/hash/string

Redis的特点

1.数据储存在内存,读取和写入速度快

2.支持的类型较多

​ String/list/set/zset sorted set:有序集合和hash

3.支持磁盘的储存–完全持久化 操作–aof/rdb

4.支持数据过期–设置过期时间expire

5.支持集群操作

6.支持订阅和发布

面试题

Redis 和 Memcache区别:

区别:

在这里插入图片描述

支持类型 表储存 string/list/set/map map

相同:

1.memcached和redis都是使用key-value非关系型数据库

2.redis它是key-value型的非关系型数据库–常用作缓存

redis的使用

1.redis常被用做缓存

2.可以处理大数据量的计数问题

3.实时攻防系统

4.有效期应用

5.自动去重

6.排队的结构–FIFO–>消息队列

7.消息订阅和发布

Java操作Redis

1.安装

在这里插入图片描述

直接下载解压

2.String 操作

set key value get key

@Test
    public void Redistest() {
        String host = "127.0.0.1";
        int port = 6379;
        int timeout = 1000;
        Jedis jedis = new Jedis(host, port, timeout);
        jedis.set("ceshi", "测试redis链接");
        System.out.println(jedis.get("ceshi"));
        jedis.close();
    }

key的操作

keys * expire key second ttl key

@Test
    public void testAllkey() {
        String host = "127.0.0.1";
        int port = 6379;
        int timeout = 1000;
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMaxTotal(10);
        jedisPoolConfig.setTestOnBorrow(true);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
        Jedis resource = jedisPool.getResource();
        Set<String> keys = resource.keys("*");
        System.out.println(keys);
    }

list操作

lpush/rpush key value1/value2 lrange key start end lindex key index

@Test
    public void testList() {
        String host = "127.0.0.1";
        int port = 6379;
        int timeout = 1000;
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMaxTotal(10);
        jedisPoolConfig.setTestOnBorrow(true);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
        Jedis resource = jedisPool.getResource();
        resource.lpush("list", "{s:s1}", "{s:s2}", "{s:s3}");
        List<String> list = resource.lrange("list", 0, -1);
        System.out.println(list);
        resource.flushDB();
    }

set操作

sadd key val1 /val2/val3 smembers key srem key member

@Test
    public void testSet() {
        String host = "127.0.0.1";
        int port = 6379;
        int timeout = 1000;
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMaxTotal(10);
        jedisPoolConfig.setTestOnBorrow(true);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
        Jedis resource = jedisPool.getResource();
        resource.sadd("set", "{s:s1}", "{s:s2}", "{s:s3}");
        Set<String> set = resource.smembers("set");
        System.out.println(set);
        resource.flushDB();
    }

hash操作

hset key name value hget key name

hmset key name1 key1 name2 key2 hmget key name1 name2

@Test
    public void testHash() {
        String host = "127.0.0.1";
        int port = 6379;
        int timeout = 1000;
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMaxTotal(10);
        jedisPoolConfig.setTestOnBorrow(true);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
        Jedis resource = jedisPool.getResource();
        resource.hset("s", "name", "郭岩");
        resource.hset("s", "age", "30");
        resource.hset("s", "sex", "男");
        resource.hset("s", "intro", "丐帮帮主");
        List<String> hmget = resource.hmget("s", "name", "age", "sex", "intro");
        System.out.println(hmget);
        resource.flushDB();
    }

订阅 发布 事务

 //事务操作
    @Test
    public void test() {
        String host = "127.0.0.1";
        int port = 6379;
        int timeout = 1000;
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMaxTotal(10);
        jedisPoolConfig.setTestOnBorrow(true);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
        Jedis resource = jedisPool.getResource();
        Transaction multi = resource.multi();
        multi.set("name", "叶英");
        multi.set("age", "20");
        multi.incr("sex");
        multi.set("intro", "藏剑山庄 庄主");
        List<Object> exec = multi.exec();
        System.out.println(exec);
        resource.flushDB();
    }

Redis的持久化

1.为什么需要持久化?

​ 防止数据丢失

2.怎么持久化

​ 磁盘存储 和 内存磁盘

Redis实现持久化的两种方法:

1.zdb:在一个时间点内保存一个数据的快照

​ save 1 1 1s钟之内至少有一个变化的时候,做持久化

​ 缺点:

​ 1s 之内的数据 操作时候,丢失,不能做持久化

2.aof方式

追加执行的配置文件的方式 (配置文件就有操作的命令)

Redis保存的数据

定义:redis保存的数据不是永久的,我们可以通过设置过期时间,达到过期时间后,便会清理淘汰数据,到达内存最大值后也会清理淘汰数据

淘汰策略:

lru:淘汰最少使用–同一时间内参考使用次数

ttl:淘汰即将过期–同一时间参考剩余时间

random:随机

淘汰配置文件:

​ volatile-lru:从已设置过期的数据集中挑选最近最少使用的淘汰
​ volatile-ttr:从已设置过期的数据集中挑选将要过期的数据淘汰
​ volatile-random:从已设置过期的数据集中任意挑选数据淘汰
​ allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
​ allkeys-random:从数据集中任意挑选数据淘汰
​ noenviction:禁止淘汰数据

lru:淘汰最少使用–同一时间内参考使用次数

ttl:淘汰即将过期–同一时间参考剩余时间

random:随机

淘汰配置文件:

​ volatile-lru:从已设置过期的数据集中挑选最近最少使用的淘汰
​ volatile-ttr:从已设置过期的数据集中挑选将要过期的数据淘汰
​ volatile-random:从已设置过期的数据集中任意挑选数据淘汰
​ allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
​ allkeys-random:从数据集中任意挑选数据淘汰
​ noenviction:禁止淘汰数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值