redis的数据类型和基本操作
Redis 的Key
Redis 的 key 是字符串类型,但是 key 中不能包括边界字符,由于 key 不是 binary safe的字符串,所以像"my key"和"mykey\n"这样包含空格和换行的 key 是不允许的。
- exits key 检测指定 key 是否存在,返回 1 表示存在,0 不存在
- del key1 key2 ...... keyN 删除给定 key,返回删除 key 的数目,0 表示给定 key 都不存在
- rename oldkey newkey 重命名一个 key,如果 newkey 存在,将会被覆盖,返回 1 表示成功,0 失败。可能是 oldkey 不存在或者和 newkey 相同。
- expire key seconds 为 key 指定过期时间,单位是秒。返回 1 成功,0 表示 key 已经设置过过期时间或者不存在。
Redis 的vaule
redis 提供五种数据类型: string,hash, list,set 及zset。
string 类型
string 是最基本的类型。可以作为以下类型使用:
- 字符串
- byte数组:string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。从内部实现来看其实 string 可以看作 byte数组,最大上限是 1G 字节。
- 长整数:类似于Long或者Int,但是由于redis是C语言编写的,所以在32位的机器上是32位,64位机器上是64位。
- 浮点型:双精度浮点数。类似于Double。
string 类型数据操作指令简介:
- set key value 设置 key 对应 string 类型的值,返回 1 表示成功,0 失败。
- setnx key value 如果 key 不存在,设置 key 对应 string 类型的值。如果 key 已经存在,返回 0。
- get key 获取 key 对应的 string 值,如果 key 不存在返回 nil
- mget key1 key2 ...... keyN 一次获取多个 key 的值,如果对应 key 不存在,则对应返回 nil。
- mset key1 value1 ...... keyN valueN 一次设置多个 key 的值,成功返回 1 表示所有的值都设置了,失败返回 0 表示没有任何值被设置。
- msetnx key1 value1 ...... keyN valueN 一次设置多个 key 的值,但是不会覆盖已经存在的 key
- incrby key integer 对 key 加上指定值 ,key 不存在时候会设置 key,并认为原来的 value是 0。
- GETRANGE
- SETRANGE
- APPEND
- SETEX key seconds valu:将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。
- GETBIT key offset字符串值指定偏移量上的位(bit)。
- SETBIT key offset字符串值指定偏移量上的位(bit)。
List(列表)
Redis列表是简单的字符串列表,实现是双向链表。
可以作为:双向链表,双端队列,栈,BlockingQueue等。
命令:
- BLPOP
BLPOP key1 [key2 ] timeout 取出并获取列表中的第一个元素,或阻塞,直到有可用 - BRPOP
BRPOP key1 [key2 ] timeout 取出并获取列表中的最后一个元素,或阻塞,直到有可用 - BRPOPLPUSH
BRPOPLPUSH source destination timeout 从列表中弹出一个值,它推到另一个列表并返回它;或阻塞,直到有可用 - LINDEX
LINDEX key index 从一个列表其索引获取对应的元素 - LINSERT
LINSERT key BEFORE|AFTER pivot value 在列表中的其他元素之后或之前插入一个元素 - LLEN
LLEN key 获取列表的长度 - LPOP
LPOP key 获取并取出列表中的第一个元素 - LPUSH
LPUSH key value1 [value2] 在前面加上一个或多个值的列表 - LPUSHX
LPUSHX key value 在前面加上一个值列表,仅当列表中存在 - LRANGE
LRANGE key start stop 从一个列表获取各种元素 - LREM
LREM key count value 从列表中删除元素 - LSET
LSET key index value 在列表中的索引设置一个元素的值 - LTRIM
LTRIM key start stop 修剪列表到指定的范围内 - RPOP
RPOP key 取出并获取列表中的最后一个元素 - RPOPLPUSH
RPOPLPUSH source destination 删除最后一个元素的列表,将其附加到另一个列表并返回它 - RPUSH
RPUSH key value1 [value2] 添加一个或多个值到列表 - RPUSHX
RPUSHX key value 添加一个值列表,仅当列表中存在
Set(集合)
可以理解为一堆值不重复的列表,类似数学领域中的集合概念,且Redis也提供了针对集合的求交集、并集、差集等操作。
set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
相关命令
- SADD
SADD key member [member ...] 添加一个或者多个元素到集合(set)里 - SACRD
SCARD key 获取集合里面的元素数量 - SDIFF
SDIFF key [key ...] 获得队列不存在的元素 - SDIFFSTORE
SDIFFSTORE destination key [key ...] 获得队列不存在的元素,并存储在一个关键的结果集 - SINTER
SINTER key [key ...] 获得两个集合的交集 - SINTERSTORE
SINTERSTORE destination key [key ...] 获得两个集合的交集,并存储在一个集合中 - SISMEMBER
SISMEMBER key member 确定一个给定的值是一个集合的成员 - SMEMBERS
SMEMBERS key 获取集合里面的所有key - SMOVE
SMOVE source destination member 移动集合里面的一个key到另一个集合 - SPOP
SPOP key [count] 获取并删除一个集合里面的元素 - SRANDMEMBER
SRANDMEMBER key [count] 从集合里面随机获取一个元素 - SREM
SREM key member [member ...] 从集合里删除一个或多个元素,不存在的元素会被忽略 - SUNION
SUNION key [key ...] 添加多个set元素 - SUNIONSTORE
SUNIONSTORE destination key [key ...] 合并set元素,并将结果存入新的set里面 - SSCAN
SSCAN key cursor [MATCH pattern] [COUNT count] 迭代set里面的元素
Hash(字典,哈希表)
就是HashMap。
相关命令
- HDEL
HDEL key field[field...] 删除对象的一个或几个属性域,不存在的属性将被忽略 - HEXISTS
HEXISTS key field 查看对象是否存在该属性域 - HGET
HGET key field 获取对象中该field属性域的值 - HGETALL
HGETALL key 获取对象的所有属性域和值 - HINCRBY
HINCRBY key field value 将该对象中指定域的值增加给定的value,原子自增操作,只能是integer的属性值可以使用 - HINCRBYFLOAT
HINCRBYFLOAT key field increment 将该对象中指定域的值增加给定的浮点数 - HKEYS
HKEYS key 获取对象的所有属性字段 - HVALS
HVALS key 获取对象的所有属性值 - HLEN
HLEN key 获取对象的所有属性字段的总数 - HMGET
HMGET key field[field...] 获取对象的一个或多个指定字段的值 - HSET
HSET key field value 设置对象指定字段的值 - HMSET
HMSET key field value [field value ...] 同时设置对象中一个或多个字段的值 - HSETNX
HSETNX key field value 只在对象不存在指定的字段时才设置字段的值 - HSTRLEN
HSTRLEN key field 返回对象指定field的value的字符串长度,如果该对象或者field不存在,返回0. - HSCAN
HSCAN key cursor [MATCH pattern] [COUNT count] 类似SCAN命令
ZSet(有序集合)
注意:ZSet内部是一个Set和跳跃链表。Set内部是一个Hash。
Redis有序集合类似Redis集合,不同的是增加了一个功能,即集合是有序的。一个有序集合的每个成员带有分数,用于进行排序。
Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员(这一段有问题,应该是hashmap中存储所有的成员来保证唯一性,skitlist用来保证顺序,里面存储的应该是core和指向成员的指针),排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
关于跳跃链表:
跳跃链表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间),并且对并发算法友好。
基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表(因此得名)。所有操作都以对数随机化的时间进行。
跳跃列表是按层建造的。底层是一个普通的有序链表。每个更高层都充当下面列表的"快速跑道",这里在层 i 中的元素按某个固定的概率 p 出现在层 i+1 中。平均起来,每个元素都在 1/(1-p) 个列表中出现,而最高层的元素(通常是在跳跃列表前端的一个特殊的头元素)在 O(log1/pn) 个列表中出现。
跳跃表参考:http://www.cnblogs.com/acfox/p/3688607.html
总之,跳跃表是有序的。作为索引的作用来实现ZSet。
使用场景
Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构。
可以作为PriorityQueue。不过元素不能重复。
相关命令
- ZADD
ZADD key score1 member1 [score2 member2] 添加一个或多个成员到有序集合,或者如果它已经存在更新其分数 - ZCARD
ZCARD key 得到的有序集合成员的数量 - ZCOUNT
ZCOUNT key min max 计算一个有序集合成员与给定值范围内的分数 - ZINCRBY
ZINCRBY key increment member 在有序集合增加成员的分数 - ZINTERSTORE
ZINTERSTORE destination numkeys key [key ...] 多重交叉排序集合,并存储生成一个新的键有序集合。 - ZLEXCOUNT
ZLEXCOUNT key min max 计算一个给定的字典范围之间的有序集合成员的数量 - ZRANGE
ZRANGE key start stop [WITHSCORES] 由索引返回一个成员范围的有序集合(从低到高) - ZRANGEBYLEX
ZRANGEBYLEX key min max [LIMIT offset count]返回一个成员范围的有序集合(由字典范围) - ZRANGEBYSCORE
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 返回有序集key中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员,有序集成员按 score 值递增(从小到大)次序排列 - ZRANK
ZRANK key member 确定成员的索引中有序集合 - ZREM
ZREM key member [member ...] 从有序集合中删除一个或多个成员,不存在的成员将被忽略 - ZREMRANGEBYLEX
ZREMRANGEBYLEX key min max 删除所有成员在给定的字典范围之间的有序集合 - ZREMRANGEBYRANK
ZREMRANGEBYRANK key start stop 在给定的索引之内删除所有成员的有序集合 - ZREMRANGEBYSCORE
ZREMRANGEBYSCORE key min max 在给定的分数之内删除所有成员的有序集合 - ZREVRANGE
ZREVRANGE key start stop [WITHSCORES] 返回一个成员范围的有序集合,通过索引,以分数排序,从高分到低分 - ZREVRANGEBYSCORE
ZREVRANGEBYSCORE key max min [WITHSCORES] 返回一个成员范围的有序集合,以socre排序从高到低 - ZREVRANK
ZREVRANK key member 确定一个有序集合成员的索引,以分数排序,从高分到低分 - ZSCORE
ZSCORE key member 获取给定成员相关联的分数在一个有序集合 - ZUNIONSTORE
ZUNIONSTORE destination numkeys key [key ...] 添加多个集排序,所得排序集合存储在一个新的键 - ZSCAN
ZSCAN key cursor [MATCH pattern] [COUNT count] 增量迭代排序元素集和相关的分数
redis的数据类型和基本操作的更多相关文章
- Redis数据类型的基本操作
Redis数据类型的基本操作 一.string类型 1.设置value
- 一文搞定Redis五大数据类型及应用场景
本文学习知识点 redis五大数据类型数据类型:string.hash.list.set.sorted_set 五大类型各自的应用场景 @TOC 1. string类型 1-1 string类型数据的 ...
- Redis常用数据类型介绍、使用场景及其操作命令
Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...
- Redis笔记(三)Redis的数据类型
前面说过,Redis的一大特性是支持丰富的数据类型, 这为更多的应用场景提供了可能. Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数 ...
- Redis常用数据类型
Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html Redis最为常用的数据类型主要有以下五种: ●Str ...
- Redis基本数据类型
-------------------Redis基本数据类型------------------- 1.String 字符串 1.概念 1.String 是redis最基本的类 ...
- Redis常用数据类型和事物以及并发
Redis数据类型 基本类型(String int): 如 set key value .get key 等 所有命令都是按照 key value keys * 可以将全部数据列出,其中后面的 &qu ...
- Redis五大数据类型的常用操作
在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...
- node.js中对 redis 的安装和基本操作
一.win下安装redis https://github.com/MicrosoftArchive/redis/releases 下载Redis-x64-3.2.100.zip,然后解压,放到自定义目 ...
随机推荐
- CTF—攻防练习之HTTP—暴力破解
攻击机:192.168.32.152 靶机:192.168.32.164 首先nmap,nikto -host ,dirb 扫描开放带端口,探测敏感文件,扫描目录 开放了21,22,80端口,看到一个 ...
- 【学习笔记】使用python将最新的测试报告以附件的形式发到指定邮箱
import smtplib, email, os, timefrom email.mime.multipart import MIMEMultipartfrom email.mime.text im ...
- Linux 基础整理
Linux系统的启动过程大体上可分为五部分:内核的引导:运行init:系统初始化:建立终端 :用户登录系统. 用户登录 Linux的账号验证程序是login,login会接收mingetty传来的用户 ...
- pandas 分组统计
# coding:utf-8 import pandas as pd import numpy as np # path = r'C:\Users\wuzaipei\Desktop\桂林三金项目签到情 ...
- 图解DMZ
图解DMZ 1. 概念介绍 DMZ是英文“demilitarized zone”的缩写,中文译为“隔离区”.“非军事区”.它是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题,而设立的一个非安 ...
- 多线程--CreateThread与_beginthreadex本质区别
转载 MoreWindows: 秒杀多线程第二篇 本文将带领你与多线程作第一次亲密接触,并深入分析 CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程 ...
- 【STM32】串行通信原理
(1)通信接口背景知识 并行通信: --传输原理:数据各个位同时传输 --优点:速度快 --缺点:占用引脚资源多 串行通信: ...
- Java小知识----List复制:浅拷贝与深拷贝
原文地址: https://blog.csdn.net/demonliuhui/article/details/54572908 List浅拷贝 众所周知,list本质上是数组,而数组的是以地址的形式 ...
- Spring MVC的异步模式(ResponseBodyEmitter、SseEmitter、StreamingResponseBody) 高级使用篇
DeferredResult高级使用 上篇博文介绍的它的基本使用,那么本文主要结合一些特殊的使用场景,来介绍下它的高级使用,让能更深刻的理解DeferredResult的强大之处. 它的优点也是非常明 ...
- (四)Java秒杀项目之JMeter压测
一.JMeter入门压测 1.打开JMeter工具,选中测试计划->右键添加->线程(用户)->线程组,页面中的线程数就是并发数,页面中的Ramp-Up时间(秒)表示通过多长时间启动 ...