zoukankan      html  css  js  c++  java
  • redis入门

    1.redis相关介绍:

    (1)Redis 是一个高性能的 开源的、C语言写的Nosql(非关系型数据库),数据保存可以存储在内存中或者磁盘中

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

    数据结构:数组,list,set,map

    redis提供了一下操作方法,我们使用这些方法就可以对存入字符串,组织成各种类型数据库结构(string,list,set,map).

    小结:

    (1) redis开源 高性能nosql数据库,数据可以存储在内存或磁盘上面

    (2) Redis 主要key-value结构形式存储,redis底层支持各种类型的数据存储结构

    包括 list set map string

    2.特点以及优势:

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

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

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

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

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

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

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

    总结:

    1) 数据存储:存放在内存,还支持持久化.-存取速度快,并发能力强,数据安全性高

    2) 支持value类型

    3) 支持多个语言客户端

    4) 还支持集群(支持高并发,海量数据)

    1.1. MysqlMemcachedRedis的比较

    mysql

    redis

    memcached

    类型

    关系型

    非关系型

    非关系型

    存储位置

    磁盘

    磁盘和内存

    内存

    存储过期

    不支持

    支持

    支持

    读写性能

    非常高

    非常高

    redis支持数据存储类型比memcached

    存储过期:

    一个数据存储是为他设置过期时间,时间一到数据就没有. 道具,会员,优惠券,订单,红包

    redismemcached的系统点和不同点?   你有用过memcached?

     相同点:都是key-valueNosql,数据存储在内存中,读写效率高,都支持存储过期.

     不同点:

    (1) redis支持持久化

    (2) redis支持存储类型更多

     3.安装Redis服务端

    1.Redis 的官方下载站是 http://redis.io/download,可以去上面下载最新的安装程序下来

    http://redis.cn/

    2.下载32或64:https://github.com/microsoftarchive/redis/releases

    绿色软件不需要安装,直接使用

    3.启动服务:redis-server.exe redis.windows.conf(带配置文件启动),也可以直接打开

    4.基本操作

    ​     对字符串操作
    ​                    set  key value 
    ​                    get  key
    ​                    mset /mget
    ​                    incr decr    incrBy  decrBy
    (2)对key的操作
    ​                    keys *
    ​                    expire key  seconds
    ​                    ttl  key
    ​                    del key
    ​                    flushall  清库 (0-15个)
    ​                    flushdb 清当前库
    ​                    select index
    (3)对list操作
    ​                    lpush(rpush)  key  value1/value2...
    ​                    lpop(rpop) key 弹出一个值
    ​                    lrange key start stop 搜索查询
    ​                    lrem key count value  移出
    ​                    lindex key index
    ​                    ltrim key start stop (对集合进行修剪)
    (4)set操作
    ​                    sadd  key members  添加值
    ​                    srem key member  删除值
    ​                    smembers key  查看可以对应的值
    (5)hash操作
    ​                    hset key name value  --设置key value
    ​                    hget key name --通过key获取值
    ​                    hmset key name1 key1 name2 key2 --批量设置
    ​                    hmget key name1 name2 --批量获取
    ​                    hkeys --获取所有的key
    ​                    hvals --获取所有的value
    ​                    hgetall --获取所有的key和value
    以后使用比较多的结构:
    ​    string /list /map(hash) /set ---常用

    5.设置密码:
    (1)在配置文件
    redis.windows.conf --添加 requirepass 123,注意不能有空格
    (2)在启动的时候  redis-server.exe redis.windows.conf
    (3)auth 123

    4.在idea中使用redis

    1.创建一个普通java项目

    2.导包:

     

    3.测试:创建一个测试类测试

    (1)普通测试,测试string

    @Test
        public void testRedis()throws Exception{
            //获取jedis对象,参数为服务器ip,默认端口6379,连接时间
            Jedis jedis = new Jedis("127.0.0.1", 6379, 1000);
            //初始化密码
            jedis.auth("123");
            //设置值
            jedis.set("name", "小飞");
            //取值
            System.out.println(jedis.get("name"));
            //关闭jedis对象
            jedis.close();
        }

    连接池创建jedis对象

     @Test
        public void testRedisPool()throws Exception{
            //获取jedis的连接池的配置对象
            JedisPoolConfig config = new JedisPoolConfig();
            //设置最大连接对象
            config.setMaxIdle(2);
            //设置连接的条数
            config.setMaxTotal(10);
            //获取连接池对象
            JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000,"123");
            //获取jedis对象
            Jedis jedis = jedisPool.getResource();
            jedis.set("age", "18");
            System.out.println(jedis.get("age"));
    
            System.out.println(jedis.get("name")); //get  获取
            System.out.println(jedis.keys("*")); //查看所有key
            System.out.println(jedis.del("name")); //删除key
            System.out.println(jedis.get("name")); //get //获取
            System.out.println(jedis.set("name","xxxxx")); //修改
            System.out.println(jedis.get("name")); //get*/
            jedis.close();
            jedisPool.destroy();
        }

    (3)测试list和set

     @Test
        public void testRedisListAndSet()throws Exception{
    
            //获取jedis的连接池的配置对象
            JedisPoolConfig config = new JedisPoolConfig();
            //设置最大连接对象
            config.setMaxIdle(2);
            //设置连接的条数
            config.setMaxTotal(10);
            //获取连接池对象
            JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000,"123");
            //获取jedis对象
            Jedis jedis = jedisPool.getResource();
            //清空当前库
            jedis.flushDB();
            /*(1)给list添加值
            jedis.lpush("users","周杰伦","双节棍","张无忌","流川枫");
            //去除所有的value为周杰伦的值
            jedis.lrem("users", 0, "周杰伦");
            System.out.println(jedis.lrange("users",0,-1));*/
            //(2)set操作,添加值
            jedis.sadd("students","x","o","xx","oo","x");
            System.out.println(jedis.smembers("students"));
        }

    (4) 测试hash和排序

    @Test
        public void testRedisHash()throws Exception{
    
            //获取jedis的连接池的配置对象
            JedisPoolConfig config = new JedisPoolConfig();
            //设置最大连接对象
            config.setMaxIdle(2);
            //设置连接的条数
            config.setMaxTotal(10);
            //获取连接池对象
            JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000,"123");
            //获取jedis对象
            Jedis jedis = jedisPool.getResource();
            //清空当前库
            jedis.flushDB();
           /* //添加值
            jedis.hset("student", "name", "关羽");
           //取值打印
            System.out.println(jedis.hget("student", "name"));*/
            //排序
            jedis.lpush("nums","1","3","5","9","2","6");
            System.out.println(jedis.lrange("nums", 0, -1));
            //升序
            System.out.println(jedis.sort("nums"));
            //降序,获取排序参数
            SortingParams sortingParams = new SortingParams();
            sortingParams.desc();//将参数设置为降序
            System.out.println(jedis.sort("nums", sortingParams));
            System.out.println("==================================================");
            //根据首字母排序
            jedis.lpush("everyNames","hong","dong","huang","am","fi");
            SortingParams sortingParams1 = new SortingParams();
            sortingParams1.alpha();
            sortingParams1.asc();//按字母升序a,b,c
            System.out.println(jedis.sort("everyNames",sortingParams1));
            jedis.close();
            jedisPool.destroy();
        }

    (5)测试事务

    @Test
        public void testTransaction()throws Exception{
            //获取jedis的连接池的配置对象
            JedisPoolConfig config = new JedisPoolConfig();
            //设置最大连接对象
            config.setMaxIdle(2);
            //设置连接的条数
            config.setMaxTotal(10);
            //获取连接池对象
            JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000,"123");
            //获取jedis对象
            Jedis jedis = jedisPool.getResource();
            //清空当前库
            jedis.flushDB();
            jedis.set("name", "anjela");
            jedis.set("age", "18");
            //开启事务,获取事务对象
            Transaction transaction = jedis.multi();
            //对值加1操作
            transaction.incr("name");//失败
            transaction.incr("age");//成功
            //提交事务,返回操作结果集
            List<Object> list = transaction.exec();
            System.out.println(list);
            jedis.close();
            jedisPool.destroy();
        }

    5.redis持久化配置

    持久化:坚持多久?no ,指把数据保存到磁盘的过程就称为持久化

    5.1. RDB模式

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

    如何关闭 rdb 模式:

    save ""

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

    # save xxx

    # save 60 10000

    5.2. AOF追加模式

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

    如何开启aof模式:

    appendonly yes         //yes 开启,no 关闭

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

    #这里我们启用 everysec

    appendfsync everysec //每秒 fsync 一次

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

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

     

  • 相关阅读:
    postgresql 排序索引
    postgresql 外键约束是否自动索引,unique约束是否自动建索引,主键是否自动建索引
    nginx缓存失效--vim选择后u将所有大小转换为了小写
    linux内核参数调优
    如何让自己的网站在搜索引擎中出现
    linux 查看系统版本
    nginx 模板
    深浅拷贝2
    字典 综合逻辑
    字典 dict
  • 原文地址:https://www.cnblogs.com/19930909a/p/12069631.html
Copyright © 2011-2022 走看看