Redis数据结构和常用API
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的更多相关文章
- Redis数据类型的常用API以及使用场景
一.通用命令 1.keys 遍历出所有的key 一般不在生产环境使用 2.dbsize key的总数 3.exists key 4.del key 删除指定key-value 5.expire k ...
- redis数据结构和常用命令
redis常用数据结构 String 最简单的K_V,value可以是数字或者字符串,使用场景:微博数.普通计数,命令:get set incr(加1) decr(减1) mget(获取多个值),se ...
- Redis数据结构及常用命令(草稿)
通用命令 数据类型 string 字符 list 列表 set 集合 zset 有序集合 hash 散列(字典中的字典) bitmap 位图 hyperloglog
- redis学习(二) redis数据结构介绍以及常用命令
redis数据结构介绍 我们已经知道redis是一个基于key-value数据存储的数据结构数据库,这里的key指的是string类型,而对应的value则可以是多样的数据结构.其中包括下面五种类型: ...
- RedisTemplate访问Redis数据结构(介绍和常用命令)
Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...
- Redis系列(二):Redis的5种数据结构及其常用命令
上一篇博客,我们讲解了什么是Redis以及在Windows和Linux环境下安装Redis的方法, 没看过的同学可以点击以下链接查看: Redis系列(一):Redis简介及环境安装. 本篇博客我们来 ...
- Redis 实战 —— 04. Redis 数据结构常用命令简介
字符串 P39 Redis 的字符串是一个有字节组成的序列,可以存储以下 3 种类型的值:字节串(byte string).整数.浮点数. 在需要的时候, Redis 会将整数转换成浮点数.整数的取值 ...
- Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数
1.Redis和nosql简介,api调用 14.1/ nosql介绍 NoSQL:一类新出现的数据库(not only sql),它的特点: 1. 不支持SQL语法 2. 存储结构跟传统关系型数 ...
- 第18章 Redis数据结构常用命令
18-1 字符串的一些基本命令 18-1 :配置Spring关于Redis字符串的运行环境 <bean id="poolConfig" class="redis.c ...
随机推荐
- Effective C++ 读书笔记(1-7)
作者 Scott Meyers 翻译作者 侯捷 C++ 神牛 台湾人 术语: 1.explicit C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生.声明 ...
- Python进阶开发之元类编程
系列文章 √第一章 元类编程,已完成 ; 本文目录 类是如何产生的如何使用type创建类理解什么是元类使用元类的意义元类实战:ORM . 类是如何产生的 类是如何产生?这个问题肯定很傻.实则不然,很多 ...
- HTML 返回顶部
每次看淘宝,看微信,都回有回到顶部的小logo,小图标,或者双击返回顶部.所以就学习了如何返回顶部的操作,一开始是联想html中的链接描点,在开头出设置个标签,下面点击另外一个标志回去.有三种觉得比较 ...
- 什么是分布式锁及正确使用redis实现分布式锁
分布式锁 分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性. 举个不太恰当的例子:假设共享的资源就是一个房子,里面有各种书,分布式系统就是要进屋看书的人,分布式锁 ...
- ORC文字识别软件破解版
下载地址:http://pan.baidu.com/s/1bnCiXdl 点击 然后可以免费用了ABBYY了!!
- 前端为什么非要动静分离 说一下CDN托管的意义
大型Web应用对速度的追求并没有止步于仅仅利用浏览器缓存,因为浏览器缓存始终只是为了提升二次访问的速度,对于首次访问的加速,我们需要从网络层面进行优化,最常见的手段就是CDN(Content Deli ...
- JavaScript-通过原型继承一个对象
<script> //通过原型继承一个对象 //inherit()返回了一个继承原自原型对象P的属性的新对象 //這裡使用ECMAScript5中的object.create()函數(如果 ...
- Redis in Python:HyperLogLog(pfadd、pfcount、pfmerge)
redis HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值. 基数:集合中不同元素的数量.比如 [foo', 'bar', 'foobar', 'bar', 'test' ...
- Python 函数式编程和面向对象编程
函数式编程 函数:function.函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式.函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同 高阶函数 ...
- 一次完整的HTTP网络请求过程详解
0. 前言 从我们在浏览器的地址栏输入http://blog.csdn.net/seu_calvin后回车,到我们看到该博客的主页,这中间经历了什么呢?简单地回答这个问题,大概是经历了域名解析.TC ...