Redis数据类型及操作

本文由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




























  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值