redis key和value数据类型
exists key
del key1 key2
Redis 的vaule
redis 提供五种数据类型:string,hash,list,set 及sorted set。
string 是最基本的类型,而且string 类型是二进制安全的。意思是redis 的string 可以
包含任何数据。比如jpg 图片或者序列化的对象。从内部实现来看其实string 可以看作byte数组,最大上限是1G 字节。
set key value 设置 key对应 string 类型的值,返回 1 表示成功,0失败。
setnx key value 如果 key 不存在,设置 key 对应 string 类型的值。如果 key 已经存在,返
回0。SET if Not eXists』
set a 1 后get a 返回的是“1”,并且type a是字符串。
get key 获取 key对应的 string值,如果 key不存在返回 nil
getset key value 先获取 key的值,再设置 key的值。如果 key不存在返回 nil。
mget key1 key2 ...... keyN 一次获取多个key 的值,如果对应 key不存在,则对应返回 nil。
mset key1 value1 ...... keyN valueN 一次设置多个 key的值,成功返回 1表示所有的值都设置
了,失败返回0 表示没有任何值被设置。
msetnx key1 value1 ...... keyN valueN 一次设置多个 key的值,但是不会覆盖已经存在的 key
incr key 对 key 的值做++操作,并返回新的值。注意 incr一个不是 int 的 value 会返回错
误,incr 一个不存在的key,则设置key 值为1。
decr key 对 key的值做--操作,decr一个不存在 key,则设置 key值为-1。
incrby key integer 对 key 加上指定值 ,key 不存在时候会设置 key,并认为原来的 value
是0。
decrby key integer 对key减去指定值。decrby完全是为了可读性,我们完全可以通过incrby
一个负值来实现同样效果,反之一样。
2.2.2. hash 类型
hash 是一个string 类型的field 和value 的映射表。添加,删除操作都是O(1)(平均)。
hash 特别适合用于存储对象。相对于将对象的每个字段存成单个string 类型。将一个对象
存储在hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是
新建一个hash 对象时开始是用zipmap(又称为small hash)来存储的。这个zipmap 其实并
不是hash table,但是zipmap 相比正常的hash 实现可以节省不少hash 本身需要的一些元
数据存储开销。尽管zipmap 的添加,删除,查找都是O(n),但是由于一般对象的field
数量都不太多。所以使用zipmap 也是很快的,也就是说添加删除平均还是O(1)。如果field
或者value 的大小超出一定限制后,redis 会在内部自动将zipmap 替换成正常的hash 实现.
这个限制可以在配置文件中指定。
hash-max-zipmap-entries 64 #配置字段最多64 个
hash-max-zipmap-value 512 #配置value 最大为512 字节
hset key field value 设置 hash field为指定值,如果 key不存在,则创建
- 返回值:
-
如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。
redis> HSET website google "www.g.cn" # 设置一个新域
(integer) 1 redis> HSET website google "www.google.com" # 覆盖一个旧域
(integer) 0
hget key field 获取指定的 hash field。
hmget key filed1....fieldN 获取全部指定的 hash filed。
hmset key filed1 value1 ...... filedN valueN 同时设置hash的多个 field。
hincrby key field integer 将指定的 hash filed 加上指定值。成功返回 hash filed 变更后的
值。
hexists key field 检测指定 field是否存在。
hdel key field 删除指定的 hash field。
hlen key 返回指定 hash的 field 数量。
hkeys key 返回 hash 的所有 field。
hvals key 返回 hash的所有 value。
hgetall 返回 hash的所有 filed和 value
list类型:参考:http://www.cnblogs.com/youxin/p/3585867.html
2.2.4. set 类型
set 是无序集合,最大可以包含(2 的32 次方-1)个元素。set 的是通过hash table 实现的,
所以添加,删除,查找的复杂度都是O(1)。hash table 会随着添加或者删除自动的调整大小。
需要注意的是调整hash table 大小时候需要同步(获取写锁)会阻塞其他读写操作。可能不
久后就会改用跳表(skip list)来实现。跳表已经在sorted sets 中使用了。关于set 集合类型
除了基本的添加删除操作,其它有用的操作还包含集合的取并集(union),交集(intersection),
差集(difference)。通过这些操作可以很容易的实现SNS 中的好友推荐和blog 的tag 功能。
SADD key member [member ...]
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
假如 key 不存在,则创建一个只包含 member 元素作成员的集合。
当 key 不是集合类型时,返回一个错误。
# 添加单个元素 redis> SADD bbs "discuz.net"
(integer) 1 # 添加重复元素 redis> SADD bbs "discuz.net"
(integer) 0 # 添加多个元素 redis> SADD bbs "tianya.cn" "groups.google.com"
(integer) 2 redis> SMEMBERS bbs
1) "discuz.net"
2) "groups.google.com"
3) "tianya.cn" smembers key 返回集合 key 中的所有成员。
srem key member 从 key 对应 set 中移除指定元素,成功返回 1,如果 member 在集合中不
存在或者key 不存在返回0,如果key 对应的不是set 类型的值返回错误。
spop key 删除并返回 key 对应 set 中随机的一个元素,如果 set 是空或者 key 不存在返回
nil。
srandmember key 同 spop,随机取 set中的一个元素,但是不删除元素。
smove srckey dstkey member 从srckey对应set中移除member并添加到dstkey对应set中,
整个操作是原子的。成功返回1,如果member 在srckey 中不存在返回0,如果key 不是set
类型返回错误。
scard key 返回 set的元素个数,如果 set是空或者 key不存在返回 0。
sismember key member 判断 member 是否在 set 中,存在返回 1,0 表示不存在或者 key 不
存在。
sinter key1 key2 …… keyN 返回所有给定key 的交集。
sinterstore dstkey key1 ....... keyN 返回所有给定 key的交集,并保存交集存到 dstkey下。
sunion key1 key2 ...... keyN 返回所有给定 key的并集。
sunionstore dstkey key1 ...... keyN 返回所有给定 key的并集,并保存并集到 dstkey下。
sdiff key1 key2 ...... keyN 返回所有给定 key 的差集。
sorted set 类型
sorted set 是有序集合,它在set 的基础上增加了一个顺序属性,这一属性在添加修
改元素的时候可以指定,每次指定后,会自动重新按新的值调整顺序。可以理解了有两列的
mysql 表,一列存value,一列存顺序。操作中key 理解为sorted set 的名字。
ZADD key score member [[score member] [score member] ...]
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。
score 值可以是整数值或双精度浮点数。
如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
当 key 存在但不是有序集类型时,返回一个错误。
对有序集的更多介绍请参见 sorted set 。
# 添加单个元素 redis> ZADD page_rank 10 google.com
(integer) # 添加多个元素 redis> ZADD page_rank baidu.com bing.com
(integer) redis> ZRANGE page_rank - WITHSCORES
) "bing.com"
) ""
) "baidu.com"
) ""
) "google.com"
) "" # 添加已存在元素,且 score 值不变 redis> ZADD page_rank google.com
(integer) redis> ZRANGE page_rank - WITHSCORES # 没有改变
) "bing.com"
) ""
) "baidu.com"
) ""
) "google.com"
) "" # 添加已存在元素,但是改变 score 值 redis> ZADD page_rank bing.com
(integer) redis> ZRANGE page_rank - WITHSCORES # bing.com 元素的 score 值被改变
) "bing.com"
) ""
) "baidu.com"
) ""
) "google.com"
) ""
ZREM key member [member ...]
移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。
当 key 存在但不是有序集类型时,返回一个错误。
ZINCRBY key increment member
Increments the score of member
in the sorted set stored at key
by increment
. If member
does not exist in the sorted set, it is added with increment
as its score (as if its previous score was0.0
). If key
does not exist, a new sorted set with the specified member
as its sole member is created.
An error is returned when key
exists but does not hold a sorted set.
The score
value should be the string representation of a numeric value, and accepts double precision floating point numbers. It is possible to provide a negative value to decrement the score.
Return value
Bulk string reply: the new score of member
(a double precision floating point number), represented as string.
Examples
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZINCRBY myzset 2 "one"
"3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"
redis>
redis key和value数据类型的更多相关文章
- Redis学习笔记1-Redis数据类型
Redis数据类型 Redis支持5种数据类型,它们描述如下: Strings - 字符串 字符串是 Redis 最基本的数据类型.Redis 字符串是二进制安全的,也就是说,一个 Redis 字符串 ...
- Redis学习手册(Set数据类型)
一.概述: 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存在等操作.需要说明的是,这些操作的时间复杂度 ...
- Redis系列(2)之数据类型
Redis系列(2)之数据类型 <Redis系列(1)之安装>中介绍了Redis支持以下几种数据类型,那么本节主要介绍学习下这几种数据类型的基本操作 字符串类型,string 散列类型,h ...
- Redis API与常用数据类型简介
Redis API与常用数据类型简介 一.Redis API For .Net 首先,不得不说Redis官方提供了众多的API开发包,但是目前Redis官方版本不支持.Net直接进行连接,需要使用一些 ...
- Redis key 相关命令
其实本质上,Redis 就是一个Key---Value 数据库.这里我先介绍下Redis中关于的key的相关命令, 注意:key是字符串存储,但是不能使用 空格 或者 “\n”,value 则可以使用 ...
- 3 Redis 的常用五大数据类型
2016-12-21 14:54:20 该系列文章链接NoSQL 数据库简介Redis的安装及及一些杂项基础知识Redis 的常用五大数据类型(key,string,hash,list,set,zse ...
- Redis学习之二 数据类型和相关命令
原文:https://www.cnblogs.com/lonelyxmas/p/9073928.html 如果还不懂安装的,请看 Windows环境下安装Redis Redis一共支持五种数据类型 1 ...
- 如何利用redis key过期事件实现过期提醒
https://blog.csdn.net/zhu_tianwei/article/details/80169900 redis自2.8.0之后版本提供Keyspace Notifications功能 ...
- Redis全方位详解--数据类型使用场景和redis分布式锁的正确姿势
一.Redis数据类型 1.string string是Redis的最基本数据类型,一个key对应一个value,每个value最大可存储512M.string一半用来存图片或者序列化的数据. 2.h ...
随机推荐
- 走进React的学习之路
GIT: 代码管理.https://git-scm.com/book/zh/v2 ES6: http://www.infoq.com/cn/minibooks/ES6-in-Depth Webpack ...
- NSMutableParagraphStyle /NSParagraphStyle
// NSParagraphStyleAttributeName 段落的风格(设置首行,行间距,对齐方式什么的)看自己需要什么属性,写什么 NSMutableParagraphStyle *par ...
- angularJS--神奇的$scope
我们在使用angularJS时,$scope对于angularJS是非常重要的,它是angularJS的基础,但$scope到底是什么呢?下面进行一些介绍. 1.$scope是一个普通的js对象 2. ...
- 10.21_Nutz批量插入顺序,POI,wiki持续关注,POI,SSH,数据库优先
(1)Nutz,dao的批量插入会关注顺序吗? http://www.douban.com/group/topic/64322582/ (2)工作需要优先!!! POI,SSH,数据库管理及plsq ...
- Windows下管理Python安装包
Pip:A tool for installing and managing Python packages. Pip在Python环境中的地方就相当于Ubuntu环境中的apt-get.以及Mac系 ...
- bootstrap实现手风琴功能(树形列表)
首先把架包拷进项目,然后在页面中引进css,js <script src="js/jquery/jquery-2.1.1.min.js"></script> ...
- Java中“|”和“||”用法的区别
例子: int a = 5; int b = 10; if(a > 4 | b++ > 10) { System.out.println("a:"+a+"\n ...
- CentOS 配置Apache+Mysql+PHP (yum)与卸载
一.安装Apache2 #yum -y install httpd 安装配置完成,启动httpd服务#service httpd start 二.安装Mysql1.安装mysql#yum -y ins ...
- php异步请求(可以做伪线程)
$fp = fsockopen("www.baidu.com", 80, $errno, $errstr, 30); stream_set_blocking($fp,0); ...
- Mysql修改设置root密码的命令及方法
方法一:使用SQL语句命令UPDATE 需用到Mysql自带的加密函数PASSWORD(string),该函数对一个明文密码进行加密,但不能解密.专门用于mysql.user(用户权限表)中设置密码, ...