热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis对象的使用

一、概述Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Re

一、概述

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"

推荐阅读
author-avatar
Wx丶华少
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有