-------------------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. 【逻辑漏洞】基于BurpSuite的越权测试实战教程

    一.什么是越权漏洞?它是如何产生的? 越权漏洞是Web应用程序中一种常见的安全漏洞.它的威胁在于一个账户即可控制全站用户数据.当然这些数据仅限于存在漏洞功能对应的数据.越权漏洞的成因主要是因为开发人员 ...

  2. 关于vue组件的一个小结

    用vue进行开发到目前为止也有将近一年的时间了,在项目技术选型的时候隔壁组选 react的时候我们坚持使用vue作为前端的开发框架.虽然两者思想上的差异不大,但是vue的语法在代码的可读性以及后期的维 ...

  3. 切糕[HNOI2013]

    经过千辛万苦小A 得到了一块切糕,切糕的形状是长方体,小A 打算拦腰将切糕切成两半分给小B.出于美观考虑,小A 希望切面能尽量光滑且和谐.于是她找到你,希望你能帮她找出最好的切割方案. 出于简便考虑, ...

  4. CSS样式----浮动(图文详解)

    标准文档流 宏观地讲,我们的web页面和photoshop等设计软件有本质的区别:web页面的制作,是个"流",必须从上而下,像"织毛衣".而设计软件,想往哪里 ...

  5. Spring Boot中使用 Spring Security 构建权限系统

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...

  6. Exceptionless 本地部署踩坑记录

    仅已此文记录 Exceptionless 本地部署所遇到的问题 1.安装ElasticSearch文本 执行elasticsearch目录中的elasticsearch.bat 没有执行成功. 使用命 ...

  7. 流畅python学习笔记:第十七章:并发处理

    第十七章:并发处理 本章主要讨论Python3引入的concurrent.futures模块.在python2.7中需要用pip install futures来安装.concurrent.futur ...

  8. 用ubuntu的grpb2引导Remix OS

    Remix OS游戏版,这里下载:http://youxi.jide.com/ 安装简单.我这里要解决的是安装后用ubunu的grub2菜单去引导它. 方法如下: 进入ubuntu系统里修改其grub ...

  9. android 学习 ListView使用补充

    前面两篇学习适配器的时候用的就是listview,主要是简单的添加,今晚在看了下listview滚动状态事件和动态加载数据,一个小demo. listview的滚动状态主要有三种,onScrollSt ...

  10. Lightoj1205——Palindromic Numbers(数位dp+回文数)

    A palindromic number or numeral palindrome is a 'symmetrical' number like 16461 that remains the sam ...