zoukankan      html  css  js  c++  java
  • Redis五种常用数据类型

    string

    • 字符串常用操作

      1.存入字符串键值对

       SET key value

      2.批量存储字符串键值对

       MSET key value [key value ...]

      3.获取一个字符串键值

       GET key

      4.批量获取字符串键值

       MGET key [key ...]

      5.删除一个键

       DEL key [key ...]

      6.设置一个键的过期时间(秒)

       EXPIRE key seconds

     

    • 原子加减

      1.将key中存储的数字值加一

       INCR key

      2.将key中存储的数字值减一

       DECR key

      3.将key所存储的值加上increment

      INCRBY key increment

      4.将key所存储的值减去decrement

      DECRBY key decrement

     

    • 单值缓存

      SET key value

      GET key

     

    • 对象缓存

      1.SET user:1 value(json格式数据)

      2.MSET user:1:name test user:1:balance 10086

      MGET user:1:name user:1:balance

     

    • 分布式锁

      SETNX product:10001 true 			//返回1代表获取锁成功
      SETNX product:10001 true 			//返回0代表获取锁失败
      ....执行业务操作
      DEL product:10001 		 			//执行完业务释放锁
      
      SET product:10001 true ex 10 nx 	//防止程序意外终止导致死锁
      

        

       

    • 计数器

      INCR article:readcount:{文章id}

      GET article:readcount:{文章id}

     

    • Web集群session共享

      spring session + redis 实现session共享

     

    • 分布式系统全局序列号

      //redis批量生成序列号提升性能
      INCRBY orderId 1000

     

    hash

    • hash常用操作

      1.存储一个哈希表key的键值

      HSET key field value

      2.获取一个不存在的哈希表key的键值

      HSETNX key field value

      3.在一个哈希表key中存储多个键值对

      HMSET key field value [field value ...]

      4.获取哈希表key对应的field键值

      HGET key field

      5.批量获取哈希表key中多个field键值

      HMGET key field [field ...]

      6.删除哈希表key中的field键值

      HDEL key field [field ..]

      7.返回哈希表key中field数量

      HLEN key

      8.返回哈希表key中所有的键值

      HGETALL key

      9.为哈希表key中field键的值加上增量increment

      HINCRBY key field increment

     

    • 对象缓存 (类似map)

      HMSET user {userId}:name test {userId}:age 10
      
      HMGET user 1:name 1:age

    list

    • list常用操作

      1.将一个或多个值value插入到key列表的表头(最左边)

      LPUSH key value [value ...]

      2.将一个或多个值value插入到key列表的表尾(最右边)

      RPUSH key value [value ...]

      3.移除并返回key列表的头元素

      LPOP key

      4.移除并返回key列表尾头元素

      RPOP key

      5.返回列表key中指定区间内的元素,区间以偏移量start和stop指定

      LRANGE key start stop

      6.从key列表表头弹出一个元素,若列表中没有元素,阻塞则等待timeout秒,如果timeout=0,一直阻塞等待

      BLPOP key [key ...] timeout

      7.从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待

      BRPOP key [key ...] timeout

     

    set

    • set 常用操作

      1.往集合key中存入元素,元素存在则忽略,若key不存在则新建 SADD key member [member ...]

      2.从集合key中删除元素 SREM key member [member ...]

      3.获取集合key中的所有元素 SMEMBERS key

      4.获取集合key的元素个数 SCARD key

      5.判断member元素是否存在于集合key中 SISMEMBER key member

      6.从集合key中选出count个元素,元素不从key中不删除 SRANDMEMBER key [count]

      7.从集合key中选出count个元素,元素不从key中删除 SPOP key [count]

    • set运算操作

      1.交集运算 SINTER [key ...]

      2.将交集结果存入新集合destination中 SINTERSTORE destination key [key ...]

      3.并集运算 SUNION key [key ...]

      4.将并集结果存入新集合destination中 SUNIONSTORE destination key [key ...]

      5.差集运算 SDIFF key [key ...]

      6.将差集结果存入新集合destination中 SDIFFSTORE destionation key [key ...]

     

    sorted Set(zSet)

      有序集合(sorted set)和集合(set)都不允许重复的成员;不同的是每个元素都会关联一个double类型的分数;redis正是通过分数来为集合中的成员进行从小到大的排序;有序集合的成员是唯一的,但分数(score)却可以重复;zSet的api与Set的api大致相同;

      1.向有序集合添加一个或多个成员,或者更新已存在成员的分数

         ZADD key score1 member1 [score2 member2] 2.通过索引区间返回有序集合指定区间内的成员 ZRANGE key start stop [WITHSCORES]

      3.移除有序集合中的一个或多个成员

         ZREM key member [member ...]

      4.通过分数返回有序集合指定区间内的成员

         ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]

      5.返回有序集合中指定成员的索引

         ZRANK key member,其中member按score值递增(从⼩到⼤)

     

     

    关于NOSQL的优势

      非关系型数据库,数据与数据之间没有关联关系。就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题;

      类型

      1. 键值(key-value)存储数据库
      2. 列存储数据库:键仍然存在,但是指向了多个列,HBase (eg:博客平台(标签和文章),日志)
      3. 文档型数据库 MongoDb (eg:淘宝商品的评价)
      4. 图形数据库 Neo4j (eg:好友列表)

     

      扩展:

        MongoDB是一个基于分布式文件存储的数据库。有C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案;

        MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系数据库当中功能最丰富,最像关系型数据库的;

        文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但是比行要复杂的多);  
        集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表;

      易扩展

      NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性;数据之间无关系,这样就非常容易扩展;也无形之间,在架构的层面上带来了可扩展的能力;

      大数据量,高性能

      NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单;一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高;而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了;

      灵活的数据模型

      NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式;而在关系数据库里,增删字段是一件非常麻烦的事情;如果是非常大数据量的表,增加字段简直就是一个噩梦;这点在大数据量的web2.0时代尤其明显;

  • 相关阅读:
    初识Spring框架IOC属性注入
    JSP:在本地获取图片后立即展示选择的图片
    JavaWeb手机短信实现前台利用JS获取随机验证码,倒计时效果
    通过form表单上传文件,后台接收的方法
    封装数据库方法
    JavaWeb无限级分销结构分析
    JavaWeb忘记密码后通过邮箱进入修改密码的界面
    JavaWeb通过快递单号展示物流信息转JSON显示(servlet)
    markdown 语法测试
    example数据库
  • 原文地址:https://www.cnblogs.com/coder-zyc/p/12194682.html
Copyright © 2011-2022 走看看