Redis 对象的使用

一、概述

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。

键的类型只能为字符串,值支持五种数据类型:字符串(STRING)列表(LIST)集合(SET)散列表(HASH)有序集合(ZSET)

Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。

Redis 性能极高,Redis能读的速度是110000次/s,写的速度是81000次/s

Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

二、五种数据类型

在这里插入图片描述
Redis数据库中的每个键值对都是由对象组成的,其中:

  • 数据库键总是一个字符串对象(string object)
  • 数据库键的值则可以是字符串对象列表对象(list object)、哈希对象(hash object)、集合对象(set object)、有序集合对象(sorted set object) 这五个对象其中的一种。
String(字符串)

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。一个键最大存储也是 512MB。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据不出现错误,比如保存jpg图片或者序列化的对象。

比如C语言的char数组就不能保存任何数据,如果数据中包含\0,则会错误地认为字符串结束,即不是二进制安全的。

> set hello world
OK
> get hello
"world"
> del hello
(integer) 1
> get hello
(nil)
List(列表)

Redis LIST(列表)是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),也可在头部或尾部删除一个元素。

列表最多可存储 2的32次方 - 1 个元素 (4294967295, 每个列表可存储40多亿)。

数据量大时使用双向链表实现。

127.0.0.1:6379> lpush ooc a
(integer) 1
127.0.0.1:6379> lpush ooc b
(integer) 2
127.0.0.1:6379> rpush ooc c
(integer) 3
127.0.0.1:6379> lrange ooc 0 2
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> lrange ooc 0 -1
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> lindex ooc 2
"c"
127.0.0.1:6379> lpop ooc
"b"
127.0.0.1:6379> lrange ooc 0 -1
1) "a"
2) "c"
127.0.0.1:6379> rpop ooc
"c"
127.0.0.1:6379> lrange ooc 0 -1
1) "a"
Set(集合)

Redis的Set是string类型无序集合

数据量大时使用哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

sadd 命令添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。

集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

> sadd set-key item
(integer) 1
> sadd set-key item2
(integer) 1
> sadd set-key item3
(integer) 1
> sadd set-key item
(integer) 0

> smembers set-key
1) "item"
2) "item2"
3) "item3"

> sismember set-key item4
(integer) 0
> sismember set-key item
(integer) 1

> srem set-key item2   # 删除元素
(integer) 1
> srem set-key item2
(integer) 0

> smembers set-key
1) "item"
2) "item3"
Hash(散列表)

Redis hash 是一个键值对(key -> value)集合。

Redis hash 是一个 field 和 value 的映射表(均为string 类型),hash 特别适合用于存储对象

每个 hash 可以存储 2的32次方 -1 键值对(40多亿)。

数据量大时使用哈希表实现。

> hset hash-key sub-key1 value1
(integer) 1
> hset hash-key sub-key2 value2
(integer) 1
> hset hash-key sub-key1 value1
(integer) 0

> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"

> hdel hash-key sub-key2
(integer) 1
> hdel hash-key sub-key2
(integer) 0

> hget hash-key sub-key1
"value1"

> hgetall hash-key
1) "sub-key1"
2) "value1"
Zset (sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序

zset的成员是唯一的,但分数(score)却可以重复。成员不允许重复的功能通过哈希表来实现。

数据量大时使用跳跃表实现。

> zadd zset-key 728 member1   # zadd key score member 
(integer) 1
> zadd zset-key 982 member0
(integer) 1
> zadd zset-key 982 member0
(integer) 0

> zrange zset-key 0 -1 withscores  # 取出 0 到 n ,(按分数第几个)
1) "member1"
2) "728"
3) "member0"
4) "982"

> zrangebyscore zset-key 0 800 withscores  # 取出分数 0 到 800
1) "member1"
2) "728"

> zrem zset-key member1  # 删除
(integer) 1
> zrem zset-key member1
(integer) 0

> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值