Redis入门

1 Redis

1.1 NoSQL

  • NoSQL( not only sql) 泛指非关系型数据库
  • 适用于处理处理超大规模的数据,和高并发的访问
  • redis和memcached是key-value的Nosql,主要用来做缓存的.

1.2 什么是Redis

1.Redis 是一个高性能的 开源的、C语言写的Nosql(非关系型数据库),数据保存可以存储在内存中或者磁盘中。
2. Redis 以key-value形式来储存,是一种数据结构化存储方法的集合。–数组 list set map

1.3 Redis的特点及优势

  1. 因为它对数据的保存主要是在内存中,读取性能高,并发性强。
  2. 支持的value形式较多,如:String,List,Set,zset(sorted set --有序集合)和hash(哈希类型)。
  3. redis有java.c++等 客户端,使用方便
  4. 支持集群
  5. 支持持久化,可以将数据转存到磁盘【只需要作少量的配置】
  6. 支持订阅,发布(subscribe/publish)等功能

1.4 MySQl Memcached和Redis的比较


Memcached和Redis的比较
相同点:都是key-value NoSQl,都是存储数据在内存中,读写速度快,都支持存储过期【用于道具,优惠券。。】
不同点: 1. Redis支持持久化
2. Redis支持的存储类型更多

1.5 Redis的安装

https://github.com/microsoftarchive/redis/releases

  • 解压后直接使用

1.6 使用redis-cli客户端常用命令

1.6.1 对value为String类型的操作

  • set key value //set name zhangsan 将支付串 zhangsan关联到name
  • get key 返回key关联的字符串值
  • mset mget 同时设置或获取多个值
  • incr key //将 key 中储存的数字值增1(key不存在,则初始化为0,再加1)
  • decr key //将 key 中储存的数字值减1(key不存在,则初始化为0,再减1)
  • incrBy key number//自增**
  • decrBy key number //减少

1.6.2 对key的操作

  • keys * 获取所有key的列表
  • del key 删除key
  • expire key xx 设置key的过期时间(xx秒后过期)
  • ttl key 查看key的过期时间
  • flushall 清空Redis服务器的所有数据,包括每个库
  • flushdb 清空Redis当前库的数据,Redis有16个库【index 0-15】

1.6.3 对list集合的常用操作

  • lpush key value 将一个或多个值 value 插入到列表 key 的表头(最左边)
  • rpush key value 将一个或多个值 value 插入到列表 key 的表尾(最右边)
  • lpop 移除并返回列表 key 的头(最左边)元素。
  • rpop 移除并返回列表 key 的头(最右边)元素
  • lrange key 0 -1 查询key中所有的元素
  • lrem key count value 根据count值移除列表key中与参数 value 相等的元素count > 0

1.6.4 对set集合的常用操作

  • sadd key member 将一个或多个 member 元素加入到集合 key 当中,重复的只留下一个
  • srem key member 移除集合 key 中的一个或多个 member 元素
  • smembers key 返回集合 key 中的所有成员

1.6.5 对hash类型的常用操作

  • hset key name value 添加一个name=>value键值对到key这个hash类型
  • hget key name 获取hash类型的name键对应的值
  • hmset key name1 key1 name2 key2 批量添加
  • hmget key name1 name2 批量获取值
  • hkeys 返回哈希表 key 中的所有键
  • hvals 返回哈希表 key 中的所有值
  • hgetall 返回哈希表 key 中,所有的键和值

1.6.6 Redis 事务

  • multi 标记一个事务块的开始。
  • exec 执行所有事务块内的命令
  • discard //取消事务,放弃执行事务块内的所有命令。
    Redis的事务在执行exec指令时,才批量执行操作,没有回滚操作,一个操作的失败不会影响到其他操作,这一点与java不同

1.6.7 订阅,发布

  • SUBSCRIBE channel [channel …] 订阅给定的一个或多个频道的信息。
  • PUBLISH channel message 将信息 message 发送到指定的频道 channel

1.6.7 设置密码命令

  • CONFIG SET requirepass 123456 将密码设置为123456
  • CONFIG SET requirepass “‘ 将密码设置为空
  • AUTH 123456 输入密码进行认证
    上面的设置会在重启服务器后失效

1.7 使用java操作Redis

1.7.1 导入需要的jar包

1.7.2 简单的操作

 //  1. 常规使用jedis
    @Test
    public void testRedis(){
        //ip 号
        String host ="127.0.0.1";
        //端口号
        int port = 6379;
        //超时时间 ms
        int timeout = 1000;

        //获取Jdeis 对象
        Jedis jedis = new Jedis(host, port, timeout);
        jedis.auth("123456");
        jedis.set("name", "twodog");
        System.out.println(jedis.get("name"));
        jedis.close();
    };

1.7.3 使用Jedis 连接池

 	// 思路分析
 	//1 创建jedispool配置对象
    //2 做配置-四个
    //3 创建jedispool
    //4 通过jedispool获取连接
    //5 执行操作
    // 6 释放连接
    // 7 摧毁连接池-如果是真正项目中它应该是一个受spring管理的单例
    @Test
    public void testPool(){
        // 1.创建jedispool的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 2.做配置
        config.setMaxIdle(2); //闲置连接数
        config.setMaxTotal(10); //设置总链接数
        config.setMaxWaitMillis(1000*1);  //设置最大等待时间
        config.setTestOnBorrow(true); //获取连接时测试 连接是否畅通
        //3. 获取jedispool对象
        JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000 * 1,"123456");
        //获取连接的对象
        Jedis jedis = jedisPool.getResource();
        jedis.mset("name","gouzi","age","18");
        System.out.println(jedis.mget("name","age"));
        System.out.println("-------------------------------");
        System.out.println(jedis.keys("*"));
        //crud
        System.out.println(jedis.set("height", "180"));
        System.out.println(jedis.set("height", "200"));
        System.out.println(jedis.get("height"));
        System.out.println(jedis.del("height"));
        System.out.println(jedis.keys("*"));
        jedis.flushDB();
        //关闭连接
        jedis.close();
        //关闭连接池
        jedisPool.destroy();
    };

1.7.4 操作集合

 @Test
    public void testList(){
        // 1.创建jedispool的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 2.做配置
        config.setMaxIdle(2); //闲置连接数
        config.setMaxTotal(10); //设置总链接数
        config.setMaxWaitMillis(1000*1);  //设置最大等待时间
        config.setTestOnBorrow(true); //获取连接时测试 连接是否畅通
        //3. 获取jedispool对象
        JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000 * 1,"123456");
        //获取连接的对象
        Jedis jedis = jedisPool.getResource();
        //连接池操作集合
        jedis.lpush("student","3","7","4","1","5","9","2");
        //取值
       // System.out.println(jedis.lrange("student",0 ,-1 ));
        //升序排列集合
       // System.out.println(jedis.sort("student"));
        //降序排列
        SortingParams sortingParams1 = new SortingParams();
        sortingParams1.desc();
        sortingParams1.alpha();
        //System.out.println(jedis.sort("student", sortingParams1));
        //对字母排序
        jedis.lpush("language","java","c","python","test","ui");
        System.out.println(jedis.sort("language", sortingParams1));
    }
   

1.7.5 Redis 的事务

 // 4.jedis的事务  没有回滚,一个操作的失败不会影响其他操作
    @Test
    public void testTX(){
        // 1.创建jedispool的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 2.做配置
        config.setMaxIdle(2); //闲置连接数
        config.setMaxTotal(10); //设置总链接数
        config.setMaxWaitMillis(1000*1);  //设置最大等待时间
        config.setTestOnBorrow(true); //获取连接时测试 连接是否畅通
        //3. 获取jedispool对象
        JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000 * 1,"123456");
        //获取连接的对象
        Jedis jedis = jedisPool.getResource();
        //清空redis中的数据
        jedis.flushDB();
        jedis.mset("name","傻强","age","18");
        System.out.println(jedis.mget("name","age"));
        //开启事务
        Transaction multi = jedis.multi();
        //同时让name  跟age自增
        multi.incr("name");
        multi.incr("age");
        //提交事务
        List<Object> exec = multi.exec();
        System.out.println(exec);
        System.out.println(jedis.mget("name","age"));

        //关闭连接
        jedis.close();
        //关闭连接池
        jedisPool.destroy();

        //结论,jedis中的事务失败,不会回滚,不会影响已经执行的操作
    };

1.7.6 对Set Hash的操作

 @Test
    public void testCon(){
        // 1.创建jedispool的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 2.做配置
        config.setMaxIdle(2); //闲置连接数
        config.setMaxTotal(10); //设置总链接数
        config.setMaxWaitMillis(1000*1);  //设置最大等待时间
        config.setTestOnBorrow(true); //获取连接时测试 连接是否畅通
        //3. 获取jedispool对象
        JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000 * 1,"123456");
        //获取连接的对象
        Jedis jedis = jedisPool.getResource();
        //清空redis中的数据
        jedis.flushDB();
        //给Hash添加数据
        Map<String, String> map = (Map<String, String>) new HashMap();
        map.put("usa","iroman" );
        map.put("jpa", "奥特曼");
        map.put("chn", "燕双鹰");
        jedis.hmset("hero",map);
        //给set添加数据
        jedis.sadd("set","德邦","赵信","盖伦","蛮王","德邦");
        System.out.println(jedis.smembers("set"));  //set取值结果无序不重复
        System.out.println(jedis.hmget("hero","usa","jpa","chn"));
    };

1.8 Redis的持久化配置

1.8.1 RDB模式

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

``
save ""
# save 900 1        //至少在900秒的时间段内至少有一次改变存储同步一次
# save xxx
# save 60 10000
save 1 1  //在1秒内有1次改变就同步一次
``

1.8.2 AOF追加模式


如何开启aof模式:
appendonly yes //yes 开启,no 关闭
# appendfsync always //每次有新命令时就执行一次fsync
#这里我们启用 everysec
appendfsync everysec //每秒 fsync 一次
# appendfsync no //从不fsync(交给操作系统来处理,可能很久才执行一次fsync)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值