zoukankan      html  css  js  c++  java
  • Redis学习笔记

    1、redis是?一个非关系型的key-value数据库
    2、jedis是redis的一个连接器,java可以使用jedis连接redis。
    2.1、jedis直接连接redis
      使用时导入jedis包。
      使用jedis类的构造器构造jedis对象并直接连接:Jedis jedis = Jedis(host,port);
      设置value使用,jedis.set(name,value);
      获取value使用:jedis.get(name);
      释放资源:jedis.close();
    2.2、jedispool连接redis
      首先配置JedisPoolConfig:JedisPoolConfig  config  = new JedisPoolConfig();
      对JedisPoolConfig进行设置:config.setMaxTotal();//最大连接数
                              config.setMaxIdel();//最大空闲连接数:最多可以存在的空闲连接,多余的会被释放。
      获得连接池:JedisPool pool = new JedisPool(JedisPoolConfig,host,port);
      获得Jedis对象:Jedis jedis = pool.getResource();
      设置value使用,jedis.set(name,value);
      获取value使用:jedis.get(name);
      释放资源:jedis.close();
    3、Redis的数据结构。
    3.1、有哪些?
      [字符串String]、字符串列表list、有序字符串集合sorted set、[哈希hash]、无序字符串集合set。[常用]
    3.2、NAME的定义
      NAME的长度不要过长,不能超过1024,消耗内存。
      不要过短,降低NAME的可用性。
    3.3、String
      以二进制方式操作,存入和读取的数据是相同的。长度最大可以达到512M。
      command:赋值:set NAME VALUE
                  获取:get NAME
                  先获取再设置该NAME的值:getset NAME VALUE
                  删除:del NAME
                  增加:incr NAME   --将NAME的VALUE加一不能加一(value不能转为整型)的返回错误,如果NAME不存在,将VALUE设置为0,再加一
                  减少:decr NAME   --将NAME的VALUE减一不能减一(value不能转为整型)的返回错误,如果NAME不存在,将VALUE设置为0,再减一
                  增加:incrby NAME num --将NAME的VALUE加num不能加num(value不能转为整型)的返回错误,如果NAME不存在,将VALUE设置为0,再加num
                  减少:decrby NAME num --将NAME的VALUE减num不能减num(value不能转为整型)的返回错误,如果NAME不存在,将VALUE设置为0,再减num
                  拼接字符串:append NAME STRING  --将STRING拼接到NAME后 返回stringlength
    3.4 Hash
      String KEY 和String Value的map容器
      每一个Hash可以存储4294967295个键值对
      command:赋值:hset HASH KEY VALUE              --将键值对KEY-VALUE设值到HASH中
                  多组赋值:hmset HASH KEY1 VALUE2 KEY2 VALUE2   --将键值对KEY1-VALUE1 KEY2-VALUE2设值到HASH中
                  取值:hget HASH KEY                --获取HASH的KEY的VALUE
                  多组取值:hmget HASH KEY1 KEY2       --获取HASH的KEY1和KEY2的VALUE
                  全部取值:hgetall HASH                 --获取HASH的所有值
                  删除KEY:hdel HASH KEY
                  删除多组KEY:hmdel HASH KEY1 KEY2
                  删除哈希:del HASH                     --删除哈希
                  增加数字:hincrby HASH KEY num      --将HASH中KEY的VALUE加num不能加num(value不能转为整型)的返回错误,如果HASH不存在,返回错误。如果KEY不存在,将VALUE设置为0,再加num
                  判断是否存在:hexist HASH KEY              --判断HASH中的KEY是否存在,是返回1,否返回0
                  判断hash的长度(属性数目):hlen HASH
                  获取所有的KEY:hkey HASH
    3.5、list
      按照插入顺序排序的字符串列表。如果list中所有元素被移除了,list也被删除。向一个list插入元素,如果list不存在,将会创建list。
      从前或者后端插入元素的效率很高,如果从中间插入,效率极低。
      list有ArrayList(数组)的方式存放数据(查询速度快,插入速度慢)。linkedlist(双向链表)的方式存放数据(插入删除速度快,查询速度慢)。
      command:两端添加:左侧添加:lpush LIST VALUE1 VALUE2 VALUE3  --将VALUE1 VALUE2 VALUE3放入LIST中,从左侧添加。
                             右侧添加:rpush LIST VALUE1 VALUE2 VALUE3  --将VALUE1 VALUE2 VALUE3放入LIST中,从右侧添加。
                  查看列表:左侧查看:lrange LIST num1 num2   --查询LIST中下标num1到num2的值如lrange list 0 -1 :遍历list
                  两端弹出:左端弹出:lpop
                             右侧弹出:rpop
                  列表长度:llen
                  插入仅当LIST存在时:lpushx LIST VALUE...
                  从头删除count个num:lrem LIST count num         --count大于0时,从头删除count个num,count小于0时,从右删除-count个num,当count为0时,删除LIST中所有num
                  设置:lset LIST num VALUE                                         --设置LIST中num位置的值为VALUE
                  插入:linsert LIST before/after VALUE1 VALUE2         --在LIST的VALUE1 前/后 插入VALUE2
                  组合命令?
                  rpoplpush:rpoplpush LIST1 LIST2 获取LIST1右侧的一个值赋在LIST2左侧
        使用场景:消息队列
    3.6、set
        基本同list但set集合不允许出现重复的元素同c++ Set
        每一个Set可以存储4294967295个元素。
        command:添加:sadd SET V1 V2 V3
                   删除:srem SET V1
                   查看:smembers SET                    --查看所有
                   判断是否在set中:sismember SET VALUE      --查看VALUE是否在SET中,成功返回1,
                   判断不同:sdiff SET1 SET2                  --返回SET1中与SET2第一个不同的VALUE
                   交集运算:sinter SET1 SET2                           --返回SET1和SET2的交集
                   并集运算:sunion SET1 SET2                   --返回SET1和SET2的并集
                   获取数量:scard SET
                   随机获得一个元素:srandmember SET
                   判断不同并存到新set:sdiffstore NEWSET SET1 SET2        --比较SET1和SET2不同,赋值给新set
                   获得交集并存到新set:sinterstore NEWSET SET1 SET2
                   获得并集并存到新set:sunionstore NEWSET SET1 SET2
        使用场景:跟踪保存具有唯一性的数据,如url/用户ID。用于维护对象间的关系
    3.7、sorted set
        与set的区别,每一个sorted set的元素都有一个分数与之关联,sorted set使用该分数对元素进行排序。成员时唯一的但分数可以重复。
        使用场景:游戏排名,微博话题
        command:添加:zadd SORT NUM VALUE ...                 --重复添加VALUE会将前一个覆盖。sorted set 会自动排序
                   获得分数:zscore SORT VALUE
                   获得数量:zcard SORT
                   删除元素:zrem SORT VALUE ...                      --可删除多个
                   查询元素:zrange SORT num1 num2                        --遍历 :zrange SORT0 -1
                   查询元素:zrange SORT 0 -1    withscore                  --遍历并打印出分数
                   反序查询元素:zrevrange
                   按照排名的序号删除元素:zremrangebyrank SORT NUM1 NUM2
                   按照分数的范围删除元素:zremrangerbyscore SORT score1 score2
                   zrangebyscore limit
                   zincrby
                   zcount
        使用场景:积分排行榜

    4、Redis的发布订阅者模式

      Redis可以使用基于发布订阅的消息通信模式执行数据分发,即客户端可以作为发布者、订阅者参与通信。

    4.1、command  

    • PSUBSCRIBE    基于模式订阅一个或多个通道:通道匹配给定正则表达式的模式
    • PUBLISH            向通道发布消息
    • PUBSUB           
      • PUBSUB CHANNELS [pattern]                                 查询当前活跃的通道
      • PUBSUB NUMSUB [channel-1 ... channel-N]           返回给定频道的订阅者数量, 订阅模式的客户端不计算在内
      • PUBSUB NUMPAT                                                   返回基于模式订阅的模式的数量
    • PUNSUBSCRIBE    解除基于模式的订阅
    • SUBSCRIBE     基于通道订阅一个或多个通道
    • UNSUBSCRIBE      解除基于通道的订阅

    5、Redis事务

      事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行,但是不支持callback回滚。

      事务的特点是:原子化、序列化、顺序化。

    5.1、command

      MULTI 、 EXEC 、 DISCARD 和 WATCH 。

      multi:开启一个事务块。

      exec:结束事务块命令集合的键入并执行。

      discard:中止事务。

      watch:监听一个或多个key,该key当另外的客户端改变时,中止当前事务。使用乐观锁:将监听的key在其他客户端的改变看作偶然事件,降低同步的性能消耗。

    Redis命令参考:http://doc.redisfans.com/

  • 相关阅读:
    内容收缩伸展
    分页浏览的导航栏Bootstrap和js两种方法
    Bootstrap-缩略图
    Bootstrap-进度条
    Bootstrap-点击“×”,可以关闭页面
    Bootstrap页头
    Bootstrap分页
    Bootstrap--面包屑路径导航
    Bootstrap--标签和徽章<新闻后面的new hot等>
    NSLog 去除上线版本
  • 原文地址:https://www.cnblogs.com/xiangleili/p/8709572.html
Copyright © 2011-2022 走看看