Redis数据类型及操作

原创 2012年03月27日 19:27:47

本文由larrylgq编写,转载请注明出处:http://blog.csdn.net/larrylgq/article/details/7399769

作者:吕桂强

邮箱:larry.lv.word@gmail.com

strings 类型

string 类型是二进制安全的。

redis 的 string 可以包含任何数据,比如 jpg 图片或者序列化的对象。从内部实现来看其实 string 可以看作 byte 数组,最大上限是 1G 字节
struct sdshdr {
 long len;//buf的长度
 long free;//buf剩余可用字节数
 char buf[];//实际的字符串内容
};


1:set

设置 key 对应的value(string类型)

> set name larry

ok

2:setnx

即set not exist,如果 key 已经存在,返回 0

> set name larry

ok

>setnx name larry

(integer) 0

3:setex
存储键值对,并设置有效期

>setex name 10 larry
ok

>get name

"larry"

10秒钟后...

>get name

(nil)

4:setrange

有就替换,没有就用\x00代替缺少的字符来替换,数字代表开始替换的下标
> get name
"larry"
>setrange name 0 lv

(integer) 5
>get name
"lvrry"

>setrange name 10 lv

"lvrry\x00\x00\x00\x00\x00lv"

5:mset

每次设置多个key值

>mset key1 value1 key2 value2

ok

6:msetnx

一次设置多个 key 的值,具有原子性,同时成功或失败,失败返回0,所有操作回滚

7:get

根据key获取值,不存在返回(nil)

>get asdasds

(nil)

8:getset

获取旧值并设置一个新值,不存在返回(nil)

>get name

"larry"

>getset name lv

"larry"

>get name

"lv"

>getset dsadasd lv

(nil)

9:getrange

根据指定的下标获取值,负数表示从右边开始

>getrange 0 1 name

"la"

10:mget

返回多个值,不存在返回(nil)

>get name sdadasd

1)"larry"

2)(nil)

11:incr

加加操作,如果字符不是int型会报错(error) ERR value is not an integer or out of range

> set age 20
OK
 incr age
(integer) 21

12:incrby

加操作

> get age
"21"
> incrby age 5
(integer) 26

13:decr

减减操作

14:decrby

减操作

15:append

追加操作,返回字符串长度

>append name lv

(integer) 15

>get name

"larrylv"

16:strlen

返回value的长度

hashes 类型

新建的 hash 对象开始是用 zipmap(又称为 small hash)来存储的,当条件超个以下配置
hash-max-zipmap-entries 64 //字段最多 64 个
hash-max-zipmap-value 512 //value 最大为 512 字节

Redis 自动将 zipmap 替换成正常的 hash 实现.

1:hset

> hset testhash field1 test
(integer) 1

2: hsetnx

hsetnx testhash field1 test
(integer) 1
> hsetnx testhash field1 test
(integer) 0

3:hmset
> hmset testhash field1 a field2 b
OK
4:hget
 >hget testhash field1
"a"
5:hmget
> hmget testhash field1 field2 field3
1) "a"
2) "b"
3) (nil)
6:hincrby
类似incrby
7:hexists
>hexists testhash field10

(integer) 0

8:hlen
返回hash 的 field 数量
>len testhash

(integer) 2

9:hdel

删除返回删除成功的数目

> hdel testhash field1 field2
(integer) 2

10:hkeys

返回当前hash所有的key

11:hvals
返回当前hash所有value

12:hgetall
返回整个hash

lists:每个元素带前后指针,所以元素占用空间为:元素大小+24字节+16字节

list 类型是一个子元素为 string 类型的双向链表。最大长度为(2的 32 次方)。

可以通过 lpush,lpop,rpush,rpop 从链表的头部,尾部进行添加,删除元素。

另外为了防止轮询 list 的 pop 操作还有阻塞版本
1:lpush
在list 的头部添加string元素,返回list长度

>lpush testlist "larry"
(integer) 1

2:rpush
在list 的尾部添加string元素

3:linsert

在特定位置添加string元素,失败返回(integer) -1
 linsert testlist before "lv"
(integer) 2

4:lset
设置指定下标的值,下标越界会报错(error) ERR index out of range

> lset testlist 0 ok
OK

5:lrem
按顺序删除count个指定value内容的值,count=0全删,>0正序删,<0倒序删

> lrem testlist 2 "lv"
(integer) 2

6:ltrim
只保留指定范围的数据
> ltrim testlist 1 -1//表示删掉第一个元素
OK

7:lpop
删除并返回头部数据

8:rpop
删除并返回尾部数据

9:rpoplpush
移除第一个list的尾部数据,将其添加到第二个list的头部

>rpoplpush testlist testlist2

10:lindex
返回 index 位置的元素
11:llen

返回list的长度
set

通过hash表实现

1:sadd

添加元素

> sadd testset "lv"
(integer) 1
2:srem
删除元素

3:spop
随机删除并返回一个元素

4:sdiff
返回两个set的差集,当前set独有的

5:sdiffstore
返回两个set的差集,将结果存为第三个set

6:sinter

返回2个set的交集

7:sinterstore

返回2个set的交集,另存为一个set

8:sunion
返回2个set的并集

9:sunionstore
返回2个set的并集,并另存为第三个set
10;smove
移动第一个set的元素到第二个set

11:scard

返回set的元素个数

12:sismember
返回set中特定值的个数

13:srandmember

随机返回一个元素,但是不删除

sorted sets

1:zadd

添加元素

> zadd testzset 1 "one"
(integer) 1

2:zrem

删除元素

3:zincrby

如果该元素存在,增加该元素的 score

4:zrank
返回当前元素的排名,从小到大

5:zrevrank
返回当前元素的排名,从小到大

6:zrevrange
按 score 从大到小排序,返回给定区间的元素

7:zrangebyscore
返回score 在给定区间的元素

8:zcount
返回给定score区间的元素数目

9:zcard

返回集合中元素数目

10:zscore
返回元素对应的score

11:zremrangebyrank
删除score排名在给定区间的元素

12:zremrangebyscore

删除score在给定区间的元素


另外redis支持强大的sort ... by ... get ... 操作:


> ./redis-cli sadd uid  001
1
> ./redis-cli sadd uid  002
1
>./redis-cli set uid:sort:001 98 #uid对应的评分
OK
> ./redis-cli set uid:sort:002 97
OK
> ./redis-cli set title:001 "iam 001" #uid对应的内容
OK
> ./redis-cli set title:002 "iam002"
OK
> ./redis-cli sort uid by uid:sort:* get title:* #从好友列表中获得id与uid:sort字段匹配后排序,并根据排序后的顺序,用key在uid表获得信息
1.iam 001
2. iam002




























redis数据类型指令整理

  • 2015年03月25日 18:18
  • 370KB
  • 下载

Redis数据类型及其操作

简介 redis默认端口是6379,自定义端口使用:reids-server –port 6380 关闭redis。在关闭redis前考虑到可能正在将内存中的数据同步到磁盘,强行关闭redis有...

redis数据类型和基本操作

Redis支持5种数据类型,分别是String,List,Hash,Set,Zset和Hash。      redis是一个高性能的key-value数据库,在介绍它的5种数据类型之前,先介...

Redis数据类型的相关操作

最近学习了下Redis,在网上搜集整理了一些Redis操作的相关命令,整理如下: 1. key-value        1.1普通复制    set mykey myValue --存在即覆盖   ...

Redis数据类型与基本操作

1. 简述Redis支持5种数据类型,分别为String、Hash、List、Set、Sort Set,其概述及操作如下。1.1 String 字符串 Redis的字符串是字节序列,有一个已知长度,且...

Redis数据类型和基本操作

redis基本介绍:      redis与其他K—V缓存产品特点:           1.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。    ...

2.Redis数据类型操作命令

help command :获取命令说明,命令不要;结尾 strings类型(二进制存储) 1.set key value    :设置key =value 2.get key   ...

redis数据类型操作与应用

Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储;它的数据模型非常独特,用的是单线程。另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不...

Redis实战《红丸出品》2.1 Redis数据类型及操作前言

转自:http://blog.chinaunix.net/uid-26785103-id-3215408.html 2.1 前言 Redis的作者antirez(Salvato...

Redis、Redis数据类型、Java对Redis的操作

看了一天NoSql的Redis数据库,命令太多了不总结了,整理一下数据类型和Java对Redis的相关操作。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Redis数据类型及操作
举报原因:
原因补充:

(最多只允许输入30个字)