Redis是一个速度非常快的非关系型数据库,可以存储键与5中不同数据结构类型之间的映射。这5种数据结构分别是STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)、ZSET(有序集合)。

STRING(字符串)

和其他编程语言或者其他键值存储提供的字符串非常相似。

SET 设置值

GET 获取值

DEL 删除值

127.0.0.1:> set hello world
OK
127.0.0.1:> get hello
"world"
127.0.0.1:> del hello
(integer)
127.0.0.1:> get hello
(nil)
127.0.0.1:>

常用API:

API 说明 复杂度
get key 获取key对应的value O(1)
set key value 设置key-value,不管key是否存在,都设置 O(1)
del key 删除key-value O(1)
incr key key自增1,如果key不存在,自增后get(key)=1 O(1)
decr key key自减1,如果key不存在,自减后get(key)=-1 O(1)
incrby key k key自增k,如果key不存在,自增后get(key)=k O(1)
decr key k key自减k,如果key不存在,自减后get(key)=-k O(1)
setnx key value key不存在,才设置 O(1)
set key value xx key存在,才设置 O(1)
mget key1 key2 key3 ... 批量获取key,原子操作 O(n)
mset key1 value1 key2 value2 ... 批量设置key-value O(n)
getset key newvalue set key newvalue并返回旧的value O(1)
append key value 将value追加到旧的value O(1)
strlen key 返回字符串的长度(注意中文) O(1)
incrbyfloat key 2.3 增加key对应的值2.3 O(1)
getrange key start end 获取字符串指定下标的所有值 O(1)
setrange key index value 设置指定下标(index)所有对应的值 O(1)

LIST(列表)

列表可以有序存储多个字符串,其中字符串可以相同。

LPUSH    将元素推入列表的左端

RPUSH    将元素推入列表的右端

LPOP    将元素从列表左端弹出

RPOP    将元素从列表右端弹出

LINDEX    获取列表在给定位置上的单个元素

LRANGE     获取列表在给定范围的所有元素

127.0.0.1:> rpush list-key item
(integer)
127.0.0.1:> rpop list-key
"item"
127.0.0.1:> rpop list-key
"item"
127.0.0.1:> rpush list-key item
(integer)
127.0.0.1:> rpush list-key item2
(integer)
127.0.0.1:> rpush list-key item
(integer)
127.0.0.1:> lrange list-key -
) "item"
) "item2"
) "item"
127.0.0.1:> lindex list-key
"item2"
127.0.0.1:> lpop list-key
"item"
127.0.0.1:> lrange list-key -
) "item2"
) "item"
127.0.0.1:>

常用API:

API
说明
复杂度
lpush key value1 [value2]
将一个或多个值推入列表的左端
O(1)
rpush key value1 [value2]
将一个或多个值推入列表的右端
O(1)
linsert key before|after value newValue
在list指定的值前|后插入newValue
O(n)
lpop key
移除并返回列表最左端的元素
O(1)
rpop key
移除并返回列表最右端的元素
O(1)
ltrim key start end
按照索引范围修剪列表
O(n)
lindex key offset
返回列表中偏移量为offset的元素
O(n)
lrange key start end(包含end)
获取列表指定索引范围所有元素
O(n)
llen key
获取列表长度
O(1)
lset key index newValue
设置列表指定索引值为newValue
O(n)
blpop key timeout
lpop阻塞版本,timeout为阻塞超时时间,=0为不阻塞
O(1)
brpop key timeout
rpop阻塞版本,timeout为阻塞超时时间,=0为不阻塞
O(1)

SET(集合)

集合可以存储不同多个字符串,且无序。

SADD    将元素添加到集合中

SREM    从集合里面移除元素,如果这个元素存在

SISMEMBER    快速检查一个元素是否已经存在集合中

SMEMBERS    获取集合包含的所有元素(如果集合包含的元素非常多,那么命令执行速度回很慢,谨慎使用)

127.0.0.1:> sadd set-key item
(integer)
127.0.0.1:> sadd set-key item2
(integer)
127.0.0.1:> sadd set-key item3
(integer)
127.0.0.1:> sadd set-key item
(integer)
127.0.0.1:> smembers set-key
) "item3"
) "item2"
) "item"
127.0.0.1:> sismember set-key item4
(integer)
127.0.0.1:> sismember set-key item
(integer)
127.0.0.1:> srem set-key item2
(integer)
127.0.0.1:> srem set-key item2
(integer)
127.0.0.1:> smembers set-key
) "item3"
) "item"
127.0.0.1:>

常用API:

API
说明
复杂度
sadd key element
向集合key添加element(如果element已经存在,添加失败)
O(1)
srem key element
将集合key中的element移除
O(1)
sismember key element
检查元素element是否存在于集合key中
O(1)
smembers
返回集合包含的所有元素
O(N)

HASH(散列)

Redis可以存储多个键值对之间的映射,hash 是一个string类型的field和value的映射表,适合存储对象。和字符串一样,散列存储的值既可以存储字符串和数字值,并且可以对散列存储的数字值执行自增或自减操作。

HSET    在散列里面关联起给定的键值对

HGET    获取指定散列键的值

HGETALL    获取散列包含的所有键值对

HDEL    如果给定键存在于散列里面,那么删除这个键

127.0.0.1:> hset hash-key sub-key1 value1
(integer)
127.0.0.1:> hset hash-key sub-key2 value2
(integer)
127.0.0.1:> hset hash-key sub-key1 value1
(integer)
127.0.0.1:> hgetall hash-key
) "sub-key1"
) "value1"
) "sub-key2"
) "value2"
127.0.0.1:> hdel hash-key sub-key2
(integer)
127.0.0.1:> hdel hash-key sub-key2
(integer)
127.0.0.1:> hget hash-key sub-key1
"value1"
127.0.0.1:> hgetall hash-key
) "sub-key1"
) "value1"
127.0.0.1:>

常用API:

API
说明
复杂度
hget key field
获取hash key对应的field的value
O(1)
hset key field value
设置hash key对应的field的value
O(1)
hdel key field
删除hash key对应的field的value
O(1)
hexists key field
判断hash key是否有field
O(1)
hlen
获取hash key field的数量
O(1)
hmget key field1 field2 ...
批量获取hash  key的一批field对应的值
O(n)
hmset key field1 value1 field2 value2 ...
批量设置hash key的一批field value
O(n)
hgetall key
返回hash key 对应所有的field和value
O(n)
hvals key
返回hash key对应所有field的value
O(n)
hkeys key
返回hash key对应所有field
O(n)
hsetnx key field value
设置hash key对应的field的value(如果field已经存在,则失败)
O(1)
hincrby key field intCounter
hash key对应的field的value自增intCounter
O(1)
hincrbyfloat key field floatCounter
hash key对应的field的value自增floatCounter
O(1)

ZSET(有序集合)

有序集合和散列一样,都用于存储键值对:有序集合的键被称为成员(member),每个成员都是各不相同的;有序集合的值被称为分值(score),分值必须使用浮点数。有序集合是Redis里面唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排列顺序来访问元素的结构。

使用场景:例如基于发表时间排序的文章列表、基于投票数量排序的文章列表等。

ZADD    将一个带有给定分值的成员添加到有序集合里面

ZRANGE    根据元素在有序排列中所处的位置,从有序集合中取出多个元素

ZRANGEBYSCORE    获取有序集合在给定分值范围内的所有元素

ZREM    如果给定成员存在于有序集合中,那么移除这个成员

127.0.0.1:> zadd zset-key  member1
(integer)
127.0.0.1:> zadd zset-key member0
(integer)
127.0.0.1:> zadd zset-key member0
(integer)
127.0.0.1:> zrange zset-key - withscores
) "member1"
) ""
) "member0"
) ""
127.0.0.1:> zrangebyscore zset-key withscores
) "member1"
) ""
127.0.0.1:> zrem zset-key member1
(integer)
127.0.0.1:> zrem zset-key member1
(integer)
127.0.0.1:> zrange zset-key - withscores
) "member0"
) ""
127.0.0.1:>

常用API:

API
说明
复杂度
zadd key score element(可以是多对的)
添加score和element
O(lonN)
zrem key element(可以是多个)
删除元素
O(1)
zscore key element
返回元素的分数
O(1)
zincrby key increScore element
增加或减少元素的分数
O(1)
zcard key
返回元素的总个数
O(1)
zrange key start end [WITHSCORES]
返回指定索引范围内的升序元素【分值】
O(lon(n)+m)
zrangebyscore key minScore maxScore[WITHSCORES]
返回指定分数范围内的升序元素【分值】
O(lon(n)+m)
zcount key minScore maxScore
返回有序集合内在指定分数范围内的个数
O(lon(n)+m)
zremrangebyrank key start end
删除指定排名内的升序元素
O(lon(n)+m)
zremrangebyscor key minScore maxScore
删除指定分数内的升序元素
O(lon(n)+m)

Redis数据结构和常用API的更多相关文章

  1. Redis数据类型的常用API以及使用场景

    一.通用命令 1.keys  遍历出所有的key 一般不在生产环境使用 2.dbsize key的总数 3.exists key 4.del key  删除指定key-value 5.expire k ...

  2. redis数据结构和常用命令

    redis常用数据结构 String 最简单的K_V,value可以是数字或者字符串,使用场景:微博数.普通计数,命令:get set incr(加1) decr(减1) mget(获取多个值),se ...

  3. Redis数据结构及常用命令(草稿)

    通用命令 数据类型 string 字符 list 列表 set 集合 zset 有序集合 hash 散列(字典中的字典) bitmap 位图 hyperloglog

  4. redis学习(二) redis数据结构介绍以及常用命令

    redis数据结构介绍 我们已经知道redis是一个基于key-value数据存储的数据结构数据库,这里的key指的是string类型,而对应的value则可以是多样的数据结构.其中包括下面五种类型: ...

  5. RedisTemplate访问Redis数据结构(介绍和常用命令)

    Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...

  6. Redis系列(二):Redis的5种数据结构及其常用命令

    上一篇博客,我们讲解了什么是Redis以及在Windows和Linux环境下安装Redis的方法, 没看过的同学可以点击以下链接查看: Redis系列(一):Redis简介及环境安装. 本篇博客我们来 ...

  7. Redis 实战 —— 04. Redis 数据结构常用命令简介

    字符串 P39 Redis 的字符串是一个有字节组成的序列,可以存储以下 3 种类型的值:字节串(byte string).整数.浮点数. 在需要的时候, Redis 会将整数转换成浮点数.整数的取值 ...

  8. Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数

    1.Redis和nosql简介,api调用 14.1/ nosql介绍 NoSQL:一类新出现的数据库(not only sql),它的特点: 1.  不支持SQL语法 2.  存储结构跟传统关系型数 ...

  9. 第18章 Redis数据结构常用命令

    18-1 字符串的一些基本命令 18-1 :配置Spring关于Redis字符串的运行环境 <bean id="poolConfig" class="redis.c ...

随机推荐

  1. 批处理(Batch)---批处理脚本。

    批处理(Batch),也称为批处理脚本.顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中.批处理文件的扩展名为bat .目前比较常见的批 ...

  2. java项目获取根路径(web项目和application项目的区分)

    Java项目中经常要读取配置文件,涉及到读取配置文件的地方,就会要读定位文件的路径.因此,在项目如何正确获取文件路径尤为关键. 根据不同的java项目,在获取文件路径时候有一些 小区别 测试环境:E: ...

  3. JavaScript (一、ECMAScript )

    一.js简介和变量 1.JavaScript的概述组成和特点 a.JavaScript 是脚本语言,是世界上最流行的编程语言,这门语言可用于 HTML 和 web,更可广泛 用于服务器.PC.笔记本电 ...

  4. Python3 urllib.request库的基本使用

    Python3 urllib.request库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地. 在Python中有很多库可以用来抓取网页,我们先学习urlli ...

  5. Java动态代理(一)

    好久没有动笔了,最近想巩固一下自己的基础知识,最近听到一同事问为什么JDK动态代理不能代理类,一听感觉懵逼呀!自己好像也不能很好的描述出来,所以想用2篇文章来复习一下动态代理知识: 一.什么是静态代理 ...

  6. Tiny4412中断介绍

    通过几天裸板驱动开发,今天对ARM的中断做一些简单总结,前面我们已经了解了ARM的7种异常模式,中断是异常模式的一种,在ARM中异常事件发生将会触发中断,但是,所有的中断都不能直接访问cpu,而是都统 ...

  7. 【Quartz】持久化到数据库【五】

      前言 我们做到这里已经对Quartz定时器组件已经是学会了基本的使用了.但是我们有没有想过任务开启之后万一断掉了,当机了我们怎么办,你是否还想继续执行原先的任务.我们普通的创建是把任务放在内存中存 ...

  8. vs2017 x64 ibatis.net 平台调用 Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342 x64

    遇到的问题: 1.x86无法调用x64 2.调用ibatis.net的providers.config无法通过节点反射查找Oracle.DataAccess, Version=2.112.1.0, C ...

  9. 从JVM内存管理的角度谈谈JAVA类的静态方法和静态属性

    在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里,我们从JVM的内存管理原理的角度来认识Stack和Heap,并通过这些原理认清Java中静态方法和静态属性的问题. 一般,JVM的 ...

  10. Python Redis 的安装

    安装 可以去pypi上找到redis的Python模块: http://pypi.python.org/pypi?%3Aaction=search&term=redis&submit= ...