Nosql-Redis

Nosql

概述:

  • NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,它泛指非关系型的数据库。随着互联网2003年之后web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的交友类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

分类:http://www.nosql-database.org/

Redis是什么?

redis是一个key-vlue类型Nosql!主要用途用来做缓存,查询速度很快!严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

优势:

  • 数据存储在内存中,存取速度快,并发能力强
  • 它支持存储的value类型相对memcached更多,包括string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型)。
  • 很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库(如MySQL)起到很好的补充作用。
  • 它提供了Java,C/C++,C#,PHP,JavaScript等客户端,使用很方便。
  • Redis支持集群(主从同步)。
  • 支持持久化,可以将数据存储在内存中
  • 支持订阅/发布(subscribe/publish)功能 QQ群

使用场景:

  • 作为中央缓存–同时集群,介于服务器和数据库之间
  • 计数器应用 自动过期数据----实时防攻击系统
  • 总积分榜,今日积分榜,周积分,月积分,季度积分
    方案:从数据库中查出来计算.使用Redis的自动过期
  • 自动去重
  • 队列:可以把名额放到内存队列(redis),内存就能处理高并发访问。
    价格低,数量有限,有约束的时间:访问的多,服务器压力很大.
  • 消息订阅系统

Redis服务器客户端安装

  • 网上下载压缩包解压直接使用(官网的是lincx版本的)

服务端启动:

  • cmd===》redis-server.exe redis.conf

客户端启动:

  • 命令提示符:redis-cli.exe -h ip -p port
客户端常见命令提示符
  • auth pwd 输入密码
  • keys * 查看所有key
  • set key value
  • get key
  • mset/mget 多个值一起设置
  • Incr key–将 key 中储存的数字值增1(key不存在,则初始化为0,再加1)
  • decr key–将 key 中储存的数字值减1(key不存在,则初始化为0,再减1)
  • incrBy key //自增多少
  • decrBy key
  • del key
  • flushdb 删除单个库里的数据
  • flushall 删除所有库中的数据
面试题:redis如何实现队列和堆栈的?
  • 队列:lpush key —》 rpop key(左进右)
  • 堆栈:lpush key —》 lpop key(左进左出)

java 客户端

java客户端使用jedis操作redis
  1. pom依赖导入
  2. 创建jedis对象
  3. auth输入密码
  4. api获取资源
  5. 资源关闭
Jedis jedis = new Jedis("127.0.0.1");
jedis.auth("zxc992123");
String set = jedis.set("name", "张三");
System.out.println(jedis.get("name"));
连接池

为什么使用连接处?

  • 每次客户访问的时候都会去jedis创建对象,这样对内存本就珍贵的服务器来说jedis就失去了意义。
连接池的使用
  1. pom导入依赖
  2. 创建连接池配置对象
  3. 创建连接池
  4. 通过连接池获取一个资源-jedis
  5. 操作api
  6. jedis资源关闭
  7. 连接池关闭
//连接池配置对象
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//高峰时最大连接数
jedisPoolConfig.setMaxTotal(20);
//空闲时最大连接数
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxWaitMillis(5*1000);//最大等待时间
jedisPoolConfig.setTestOnBorrow(true);//获得连接是测试是否通畅
//        获取连接池
JedisPool localhost = new JedisPool(jedisPoolConfig, "localhost",6379,3000,"zxc992123");

Jedis jedis = localhost.getResource();
List<Employee> employees = employeeMapper.selectAll();
employees.forEach(e->{
    jedis.set(e.getUsername(), e.toString());
    System.out.println(jedis.get(e.getUsername()));
});
jedis.close();
localhost.destroy();

淘汰策略

为什么需要淘汰?

  • 内存珍贵

有哪些淘汰策略

  • volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
  • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
  • no-enviction(驱逐):禁止驱逐数
  • redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。

持久化策略

redis的持久化策略有哪些?

  • RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照,默认开启该模式.
  • 如何关闭 rdb 模式:
  • save “”
  • save 900 1 - 至少在900秒的时间段内至少有一次改变存储同步一次
  • save xxx
  • save 60 10000
  • AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值