Redis的认识和基本操作

Stella981
• 阅读 522

 Redis是什么

Redis 是一个高性能的开源的、C语言写的Nosql(非关系型数据库),数据保存在内存中。

Redis 是以key-value形式存储的Nosql,和传统的关系型数据库不一样。不一定遵循传统数据库的一些基本要求,比如说,不遵循sql标准,事务,表结构等等,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

redis的优势

1.数据保存在内存,存取速度快,并发能力强

2.它支持存储的value类型相对memcached更多,包括string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型)。

3.redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库(如MySQL)起到很好的补充作用。

4.它提供了Java,C/C++,C#,PHP,JavaScript等客户端,使用很方便。

5.Redis支持集群(主从同步)。数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。

6.支持持久化,可以将数据保存在硬盘的文件中

7.支持订阅/发布(subscribe/publish)功能 QQ群

数据存储:

    存放到内存中,并且还能不定期持久化到硬盘.

Value类型:

     相较于memcached支持Value更多

客户端支持:

    支持多种客户端-跨语言

超大并发支持:

    支持集群

 Mysql、Memcached和Redis的比较

Redis的认识和基本操作

储过期:存储数据时设置一个有效期,时间到了就没了.

场景:订单,vip,短信验证码,游戏道具,优惠券,红包等等

Memcached和Redis的相同点和不同点? Memcached?

相同点:

都是key-value类型Nosql,都存放数据到内存中,读写效率高,而且都支持存储过期.

不同点:

redis相较于Memcached还支持持久化到磁盘,数据安全更高.

redis相较于Memcached支持value类型更多.

redis的使用场景

中央缓存  计数器应用  实时攻防系统  排行榜  设定有效日期  自动去重(set数据结构可自动去重)  队列  消息订阅

在java中使用Redis

首先我们需要导入redis的jar包,(commons-pool2-2.2.jar   ,jedis-2.5.2.jar)

然后我们可以准备一个枚举类 获取得到jedis

public enum  RedisUtil {
    REDIS_POOL;
    private  static JedisPool pool;

    static {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(10);//最大连接数
        config.setMaxIdle(4);//最小连接数
         pool = new JedisPool(config, "127.0.0.1");

    }

    public Jedis getjedis(){
        return pool.getResource();
    }

}

然后我们就可以在测试类中对Redis进行操作了,

普通存值的操作

Redis的认识和基本操作

@Test
public void testJedisStringOper() throws Exception{
    Jedis jedis = JeditUtil.INSTANCE.getJedis();
    //清空当前数据库
    jedis.flushDB();
    System.out.println("name这个key是否存在:"+jedis.exists("name"));//false
    jedis.set("name","songsong");
    System.out.println("name的值:"+jedis.get("name"));//songsong
    System.out.println("所有的Key:"+jedis.keys("*"));//[name]
    jedis.del("name");
    System.out.println("所有的Key:"+jedis.keys("*"));//[]

    JeditUtil.INSTANCE.closeJedis();
}

 string操作

@Test
public void testJedisString() throws Exception{
    Jedis jedis = JeditUtil.INSTANCE.getJedis();
    //清空当前数据库
    jedis.flushDB();
    jedis.set("name","songsong");
    System.out.println("name的值:"+jedis.get("name"));//songsong
    jedis.append("name","123456");
    System.out.println("追加之后的name的值:"+jedis.get("name"));//songsong123456
    
    JeditUtil.INSTANCE.closeJedis();
}

List操作

Redis的认识和基本操作

    @Test
    public void RedisList1() throws Exception{
        //将值赋值进去
        jedis.flushDB();//清除当前数据库中的数据
        jedis.lpush("list","aa","bb","ss","xx","dd");//会给list集合赋值
        SortingParams params = new SortingParams();//设置排序方式
        params.alpha();//给字符串修改排序方式
        System.out.println( jedis.lrange("list", 0, -1));//读取到具体的数据,o表示从0开始,-1结束

    }
    /**

set操作

Redis的认识和基本操作

hash的操作

 Redis的认识和基本操作

 Redis持久化配置

Redis 提供了两种不同级别的持久化方式:RDB和AOF,可以通过修改redis.conf来进行配置.

Redis的认识和基本操作

1.1.  RDB模式

RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照,默认开启该模式.

如何关闭 rdb 模式:

save ""

# save 900 1        //至少在900秒的时间段内至少有一次改变存储同步一次

# save xxx

# save 60 100008

1.2.  AOF追加模式

AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。

如何开启aof模式:

appendonly yes         //yes 开启,no 关闭

# appendfsync always //每次有新命令时就执行一次fsync 

#这里我们启用 everysec

appendfsync everysec //每秒 fsync 一次

# appendfsync no      //从不fsync(交给操作系统来处理,可能很久才执行一次fsync)

其它的参数请大家看redis.conf配置文件详解

淘汰策略

淘汰一些数据,达到redis数据都是有效的,确保内容优化。选择合适的淘汰策略进行淘汰。

1.1.  怎么淘汰

olatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。

当redis存放的数据到达配置的最大内容后,会按照配置淘汰策略进行淘汰.

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java如何操作非关系型数据库redis(
redis简单介绍:是一种Nosql数据库,Nosql全称是NotOnlySQL,是一种不同于关系型数据库的数据库管理系统设计方式。对NoSQL最普遍的解释是“非关系型的”,强调KeyValueStores和文档数据库的优点,而不是单纯的反对RDBMSSowhatcanIdowithJedis?All
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
2年前
Redis5版本集群搭建
一、简介1.1Redis是什么Redis是一个开源的,使用ANSIC编写,高性能的KeyValue的NoSQL数据库。1.2Redis特点(1)基于内存(2)可持久化数据(3)具有丰富的数据结构类型,适应非关系型数据的存储需求(4)支持绝大多数主流开发语言,如C
Stella981 Stella981
2年前
Redis01——Redis介绍
1、NoSQL数据库概述  NoSQL(NoSQLNotOnlySQL),意即“不仅仅是SQL”,泛指非关系型的数据库。  NoSQL不依赖业务逻辑方式存储,而以简单的keyvalue模式存储。因此大大的增加了  数据库的扩展能力  特点:不遵循SQL标准,不支持ACID,远超于SQL的性能  适
Stella981 Stella981
2年前
Redis安装及前后置启动
Redis简单介绍及在Linux上安装(这里测试用是版本:redis3.0.0.tar.gz)一:什么是Redis?redis就是C语言编写的一个高性能的键值存储(keyvalue)的非关系型数据库(NoSql)。二:非关系型数据库的优点与缺点优点:可以轻松地处理海量数据缺点:1.没有主外键,
Wesley13 Wesley13
2年前
NOSQL之REDIS
Redis是NoSQL中比较常典型的一个非关系型数据库,在日常工作中也是最为常见的。Redis是一个由C语言编写的开源的、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、KeyValue数据库,并提供多种语言的API。!(http://www.limlhome.cn/blog/wpcontent/uploads/2018/03/%E6%9
Stella981 Stella981
2年前
Redis_Basics
redis基本信息!(https://img2018.cnblogs.com/blog/1309611/201911/130961120191101193139501861498195.png)redis属于非关系型数据库,可存储大量的非结构化数据,操作方式为nosql,数据存储结构为keyvalue,可
Stella981 Stella981
2年前
Redis的简介
Redis简介Redis是一个高性能的keyvalue数据库。支持复杂的数据结构,支持持久化,支持主从集群,支持高可用,支持较大的value存储...Redis是一个nosql,非关系型数据库。Redis与其他keyvalue缓存产品有以下几个特点:Reids是基于内存
Stella981 Stella981
2年前
Redis常见面试题
redis介绍  Nginx是一个高性能的HTTP和反向代理服务器,及电子邮件代理服务器,同时也是一个非常高效的反向代理、负载平衡  Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、KeyValue数据库,并提供多种语言的API的非关系型数据库。传统数据库遵循ACI