-------------------Redis基本数据类型-------------------
1、String 字符串
    1、概念
        1、String 是redis最基本的类型,value 不仅可以是 String,也可以是数字;使用 Strings 类型,可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模式);string类型是二进制安全的。意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象;string类型是Redis最基本的数据类型,一个键最大能存储512MB。
 
    2、命令
        1、set:设置key对应的值为string类型的value。
            >set "name" "hello"
        2、setnx(set if not exists):将key设置值为value,如果key不存在,这种情况下等同set命名;当key值存在,什么也不做。
            >setnx "name" "hello"
        3、setex:设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期。
            >setex "color" 10 "red"
            >get "color" --- red
            十秒过后
            >get "color" --- (nil)
        4、setrange:覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。
            >set "email" "redis@126.com" --- "ok"
            >setrange "email" 6 "gmail.com" --- (integer) 14
            >get "email" --- redis@gmail.com
        5、mset:一次设置多个值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。
            >mset "key1" "python" "key2" "c++" --- "ok"
            >get "key1" --- "hello"
            >get "key2" --- "world"
        6、mget:一次获取多个key的值,如果对应key不存在,则对应返回nil。
            >mget "key1" "key2" "key3"
        7、msetnx:对应给定的keys到他们相应的values上。只要有一个key已经存在,msetnx一个操作也不会执行。
            >msetnx "key1" "hello" "key2" "world" --- (integer) 0
        8、getset:设置key的值,并返回key的旧值。
            >get "name" --- "hello"
            >getset "name" "newName" --- "hello"
            >get "name" --- "newName"
        9、getrange key start end:获取指定key的value值的字符串。是由start和end的位移决定的。
            >get "name" --- "newName"
            >getrange "name" 1 3 --- "ewN"
        10、incr 对key的值加1 操作
            >set "age" 18 --- "ok"
            >incr "age" --- (integer) 19
            >get "age" ---"19"
        11、incrby:用incr类似,加指定值,key不存在的时候会设置key,并认为原来的value值为0。
            >incrby age 5 ---(integer) 24
            >incrby age1111 5 --- (integer) 5
            >get age1111 --- "5"
 
 
        12、decr:对key的值做的事渐减操作,decr一个不存在key,则设置key为1.
            >get age --- "24"
            >decr age --- "23"
 
        13、decrby:同decr,减指定值,key不存在的时候会设置key,并认为原来的value值为1.
            >get age --- "23"
            >decrby age 10 --- "13"
 
        14、append:给指定key的字符串值追加value,返回新字符串值的长度。例如我们向name的值追加一个"redis"字符串:
            >set "name" "value" --- OK
            >append "name" "_newValue" --- (integer) 14
            >get "name" ---"value_newValue"
 
2、Hash 哈希
    1、概念:
        Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象;Redis中每个hash可以存储2的32次方-1个键值对(40多亿)
    2、命令:
        1、hset:设置指定的hash field1。
        >hset "myhash" "field1" "hello" --- (integer) 1
 
        2、hsetnx:只在key指定的哈希集中不存在的字段时,设置字段的值。如果key指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。如果字段已存在,该操作无效果。
        >hsetnx "myhash" "field1" "hello"。 --- (integer) 1
 
        3、hmset:同时设置hash多个field。
        >hmset "myhash" "field1" "hello" "field2" "world" ---OK
 
        4、hget:获取指定的hash值的field。
        >hget "myhash" "field1" --- "hello"
 
        5、hgetall:获取所有的hash值的数据。
        >hgetall "myhash" ---
            1) "field1"
            2) "hello"
            3) "field2"
            4) "world"
 
        6、hmget:获取hash值的多个field值。
        >hmget "myhash" "field1" "field2" "field3" ---
            1) "hello"
            2) "world"
            3) (nil)
 
        7、hincrby:指定的hash field值,加上给定的值。
        >hset "myhash" "field3" "0" --- (integer) 1
        >hincrby "myhash" "field3" 1 --- (integer) 1
        >hincrby "myhash" "field3" -8 --- (integer) -7
 
        8、hexists:测试指定field是否存在。
        >hexists "myhash" "field1" --- (integer) 1
        >hexists "myhash" "field9" --- (integer) 0
 
        9、hkeys:查看指定哈希中所有的key值。
        >hkeys "myhash" ---
            1) "field1"
            2) "field2"
            3) "field3"
 
        10、hdel:从key指定的哈希集中移除指定的域。
        >hdel "myhash" "field1" --- (integer) 1
 
        11、hlen:返回指定hash的field数量。
        >hlen "myhash" --- (integer) 2
 
        12、hvals:返回指定hash中所有的value值。
        >hvals "myhash" ---
            1) "world"
            2) "-7"
 
3、List 列表
    1、概念:
        列表类型可以存储一个有序的字符串列表,常用的操作时向列表两端添加元素,或者获得列表的某一个片段;列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为O(I),获取越接近两端的元素,速度就越快。
    2、命令:   
        1、lpush:从左边向list列表中插入数据。
        >lpush "mylist" "100001"
        >lpush "mylist" "100002"
        >lpush "mylist" "100003" "100004"
 
        2、rpush:从右边向list列表中插入数据。
        >rpush "mylist" "100005"
        >rpush "mylist" "100006"
 
        3、lpop:从列表左侧将数据弹出。
        >lpop "mylist" --- "100004"
 
        4、rpop:从列表右侧将数据弹出。
        >rpop "mylist" --- "100006"
 
        5、llen:获取列表中元素的个数。
        >llen "mylist":--- (integer) 4
 
        6、lrange key start stpo:返回索引从start到stop之间的所有元素(包含两端元素)。
        >lrange "mylist" 0 -1 ---
            1) "100003"
            2) "100002"
            3) "100001"
            4) "100005"
 
        7、lrem key count value:删除列表中前count个值为value的元素,返回删除的个数
            1、count>0时 lrem 命令从列表左边开始删除前count个值为value的元素。
            2、count<0时 lrem命令从列表右边开始删除前count个值为value的元素。
            3、count=0时 lrem命令会删除所有值为value的元素。
        >lpush "mylist" 2 2 2 --- (integer) 7
        >rpush "mylist" 2 2 --- (integer) 10
        >lrem "mylist" 1 2 --- (integer) 1
        >lrem "mylist" -2 2 --- (integer) 2
        >lrem "mylist" 0 2 --- (integer) 2
 
        8、lindex key index:根据索引下标获取指定的列表元素。
            >lindex "mylist" 1 --- "100002"
 
        9、ltrim key start end:可以删除指定索引范围之外的所有元素,其指定列表范围的方法和lrange命令相同。
            >ltrim "mylist" 0 -2 --- OK
 
        10、linsert key before|after privot value:首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是before还是after来决定将value插入到该元素的前面还是后面,返回插入后列表元素的个数
            >lrange "mylist" 0 -1 ---
                1) "100003"
                2) "100002"
                3) "100001"
                4) "100005"
 
            >linsert "mylist" before "100003" "3"
            >linsert "mylist" after "100003" "4" 
                1) "3"
                2) "100003"
                3) "4"
                4) "100002"
 
        11、rpoplpush source destination:将元素从一个列表转到另一个列表。
            >rpoplpush "mylist" "mylistnew" --- "100002"
            >lrange "mylistnew" 0 -1
                1) "100002"
 
4、Set 集合
    1、概念:
        在集合中的每个元素都是不同的,且没有顺序。一个集合类型(set)键可以存储至多2的32次-1个字符串。集合类型的常用操作时向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型在Redis内部是使用值为空的散列表(hash table)实现,所以这些操作的时间复杂度都是O(I)。最方便的是多个集合类型键之间还可以进行并集、交集、差集运算。
    2、集合与列表的区别:
        列表具有有序性,集合具有唯一性。
    2、命令:
        1、sadd:用来向集合中添加一个或多个元素,如果键不存在则会自动创建。因为在一个集合中不能有相同的元素,所以如果要加入的元素已经存在于集合中聚会忽略这个元素。
        >sadd letters a ---
        >sadd letters a b c ---
 
        2、smembers key:命令会返回集合中的所有元素
        >smembers letters
 
        3、sismember key member:判断一个元素是否在集合中是一个时间复杂度为O(I)的操作,无论集合中有多少个元素,sismember命令始终可以极快的返回结果。当值存在是sismembers 命令返回1 ,当值不存在或键不存在是返回0
        >sismember letters a
        >sismember letters d
        4、集合间运算
            1、sdiff key:对多个集合执行差集运算。
            >sadd setA 1 2 3
            >sadd setB 2 3 4
            >sdiff setA setB
            >sdiff SetB setA
            2、sinter key:对多个集合执行交集运算。
            >sinter setA setB
            3、sunion key:对多个集合执行并集运算。
            >sunion setA setB
        5、scard key:获取集合中元素个数。
            >smembers letters
            >scard letters
        6、spop letters:从集合中弹出一个元素。
            >spop letters
            >smembers letters
 
5、zset(Sorted set:有序集合)
    1、概念:
    在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入,删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素,获得指定分数范围内的元素等与分数有关的操作。虽然集合中每个元素不同,但是他们的分数可以相同。
 
    2、有序集合与列表比较:
        1、相似处:
            1、二者都是有序的。
            2、二者都可以获得某一范围的元素。
        2、区别:
            1、列表类型是通过链表实现,获取靠近两端的数据速度快,当元素增加后,访问中间数据的速度会变慢。
            2、有序集合类型是使用散列和跳跃表实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度O(log(N)))。
            3、列表中不能简单的调整某个元素的位置,但是有序集合可以
            4、有序集合要比列表类型更消耗内存。
    2、命令:
        1、zadd:用来向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用心的分数替换原来的分数。zadd命令的返回值是新加入到集合中的元素的个数。
        >zadd scoreboard 89 Tom 67 Peter 100 David --- (integer) 3
        注:分数不仅是整数,还支持双精度浮点数.
 
        2、zscore key member:获取元素的分数
        >zscore scoreboard Tom --- "89"
 
        3、zrange key start top:按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素           
        >zrange scoreboard 0 -1
            1) "Peter"
            2) "Tom"
            3) "David"
 
        4、zrevrange key start top:按照元素分数从大到小的顺序放回索引从start到stop之间的所有元素
        >zrevrange scoreboard 0 -1
            1) "David"
            2) "Tom"
            3) "Peter"
 
        5、zrangebyscore key min max:按照元素分数从小到大的顺序返回分数在min和max之间的元素。
        >zrangebyscore scoreboard 85 100
            1) "Tom"
            2) "David"
 
        6、zincrby key increment member:增加一个元素的分数,返回值是更改后的分数。
        >zincrby scoreboard 4 Tom --- "93"

Redis基本数据类型的更多相关文章

  1. Redis常用数据类型介绍、使用场景及其操作命令

    Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...

  2. Redis笔记(三)Redis的数据类型

    前面说过,Redis的一大特性是支持丰富的数据类型, 这为更多的应用场景提供了可能. Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数 ...

  3. Redis常用数据类型

    Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html     Redis最为常用的数据类型主要有以下五种: ●Str ...

  4. Redis常用数据类型和事物以及并发

    Redis数据类型 基本类型(String int): 如 set key value .get key 等 所有命令都是按照 key value keys * 可以将全部数据列出,其中后面的 &qu ...

  5. Redis五大数据类型的常用操作

    在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...

  6. redis的数据类型及使用

    Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). String(字符串) st ...

  7. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  8. 一、Redis的数据类型

    一Redis的数据类型 string:字符串 hash:哈希 list:列表 set:集合 zset:有序集合(sorted set) 1.string(字符串) redis最基本的类型.可以理解成与 ...

  9. Redis的数据类型及其常用命令

    快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...

随机推荐

  1. 如何将Android Studio与华为软件开发云代码仓库无缝对接(二)

    上篇文章:如何将Android Studio与华为软件开发云代码仓库无缝对接(一) 上一章讲了,如何用Android Studio以软件开发云代码仓库为基础,新建一个项目.接下来,这一章继续讲建好项目 ...

  2. 花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)

    在弯管机加工中,由管子模型生成可直接进行弯管加工的YBC数据可以大大提高弯管编程过程.传统的做法是先用dxf数据文件(用autocad绘制管子的轴心线数据)转出XYZ数据,然后由XYZ数据转成YBC数 ...

  3. vue错误和解决方法

    1.Error in render function: "TypeError: Cannot read property 'matched' of undefined 原因:之前不知道,在引 ...

  4. IMPEX

    1.Impex是基于java Model的一种面向对象的数据操作手段,因此写impex代码前需要理清java Model之间的依赖关系. 2.基本语法:mode type[modifier=value ...

  5. NYOJ--513--A+B Problem IV(大数)

    A+B Problem IV 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这 ...

  6. java 使用https协议,cas认证PKIX path building failed错误解决方法

    如果遇到的是 上图的异常,请继续往下看. linux 下 添加 证书 (1) 获取网站安全证书 xx.cer ( 详情见随笔 获取网站安全证书 ) (2) 将上面导出的证书导入java中的cacert ...

  7. akoj-1074-人见人爱A^B

    人见人爱A^B Time Limit:1000MS  Memory Limit:65536K Total Submit:91 Accepted:55 Description 求A^B的最后三位数表示的 ...

  8. 给View添加手势,防止点击View上其他视图触发点击效果

    在开发过程中,我们可能会遇到这个问题. 当我们给一个view添加了手势,但是我们又不想点击view上面的视图也触发手势.如下图: 我们在红色view上添加了手势,但是又不想点击黄色view也触发.其实 ...

  9. HTML <div>和<span>

    块代码 <div>和<span> 1.. <style> .ccwTest { font-family: '.PingFang SC';">; co ...

  10. mysql阅读收录

    --mysql阅读收录 -----------------2014/07/02 # 复制相关: 1. 解释基于语句的复制中怎样处理functions,triggers,events和auto_incr ...