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) 1

# 添加多个元素

redis> ZADD page_rank 9 baidu.com 8 bing.com
(integer) 2

redis> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

# 添加已存在元素,且 score 值不变

redis> ZADD page_rank 10 google.com
(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES  # 没有改变
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

# 添加已存在元素,但是改变 score 值

redis> ZADD page_rank 6 bing.com
(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES  # bing.com 元素的 score 值被改变
1) "bing.com"
2) "6"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

ZREM key member [member ...]

移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

当 key 存在但不是有序集类型时,返回一个错误。

参考:https://redis.readthedocs.org/en/latest/

redis key和value

时间: 2024-10-12 08:55:01

redis key和value的相关文章

redis key expire

EXPIRE key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 在 Redis 中,带有生存时间的 key 被称为『易失的』(volatile). 生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET 命令覆写(overwrite),这意味着,如果一个命令只是修改(alter)一个带生存时间的 key 的值而不是用一个新的 key 值来代替(replace)它的话,那么生存时间不会被改变. 比

17 redis -key设计原则

书签系统 create table book ( bookid int, title char(20) )engine myisam charset utf8; insert into book values (5 , 'PHP圣经'), (6 , 'ruby实战'), (7 , 'mysql运维'), (8, 'ruby服务端编程'); create table tags ( tid int, bookid int, content char(20) )engine myisam charse

二、Redis KEY相关命令

Redis官网:https://redis.io 参考书籍:<Redis实战-红丸出品> 参考网址:http://redisdoc.com/index.html 1.查询当前数据库中的KEY个数 192.168.246.154>dbsize 2.查询当前数据库中的KEY 192.168.246.154:6379>keys pattren keys命令可以指定匹配模式,会返回所有符合给定模式pattern的KEY.常用的有: keys "*",当前数据库下的所有K

REDIS key notification

Commands Clients Documentation Community Download Support License Join us in London October 19th for the 2nd Redis Developers Day 2015 and October 20th for the Redis Unconference London. Redis Keyspace Notifications IMPORTANT Keyspace notifications i

redis key 空闲(一)

语法: redis 127.0.0.1:6379> COMMAND KEY_NAME 实例: redis 127.0.0.1:6379[1]> select 2 OK redis 127.0.0.1:6379[2]> set dabai redis OK redis 127.0.0.1:6379[2]> del dabai (integer) 1 redis 127.0.0.1:6379[2]> 键被删除成功,命令执行后输出 (integer) 1,否则将输出 (intege

Redis Key 过期策略

redis 官方提供的 conf https://raw.github.com/antirez/redis/2.2/redis.conf 中6中过期策略的具体方式.redis 中的默认的过期策略是volatile-lru .设置方式 config set maxmemory-policy volatile-lru maxmemory-policy 六种方式 volatile-lru:只对设置了过期时间的key进行LRU(默认值) allkeys-lru : 删除lru算法的key volatil

redis key设置过期时间

最近做的一个项目需要用到redis存储storm计算的结果,使用过程中发现我的redis使用内存空间一直在增大,颇为好奇,因为我都设置了key的过期时间了呀.. 最后一看代码才发现问题.原来我都是在代码中先调用expire()方法调用顺序有问题. expire(key,time) 如果当前redis没有这个key的时候默认是不操作的.哎,写代码千万得严谨啊

Redis key 相关命令

其实本质上,Redis 就是一个Key---Value 数据库.这里我先介绍下Redis中关于的key的相关命令, 注意:key是字符串存储,但是不能使用 空格 或者 “\n”,value 则可以使用任何字符串.(原因:\n 是命令的结束符,空格 是命令和参数的分隔符) 下面key相关命令 以及 部分实例 命令原型 时间复杂度 命令描述 返回值 KEYS pattern O(N) 时间复杂度中的N表示数据库中Key的数量.获取所有匹配pattern参数的Keys.需要说明的是,在我们的正常操作中

redis key的过期机制

redis是一个 高性能的key-value数据库.我们可以对其中的key设置一个过期时间,相关命令如下: 1.在创建一个key value 的时候同时设置过期时间 比如: set key1 value1 EX 60 表示: 我们想要将这个 key value 放到redis中,并在其中保存60秒. set key2 value2 PX 60 表示:我们想要将这个key value放到redis中,并在其中保存 60毫秒 2.对于已经存在的key value, 比如: 事先有 set key3