Redis数据类型及特性和特点
1. 概述
1.1. Redis 简介
Redis 是速度⾮常快的⾮关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。
键的类型只能为字符串,值⽀持的五种类型数据类型为:字符串、列表、集合、有序集合、散列表。
Redis ⽀持很多特性,例如将内存中的数据持久化到硬盘中,使⽤复制来扩展读性能,使⽤分⽚来扩展写性能。
1.2. Redis 的优势
性能极⾼ – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s。
丰富的数据类型 - ⽀持字符串、列表、集合、有序集合、散列表。
原⼦ - Redis 的所有操作都是原⼦性的。单个操作是原⼦性的。多个操作也⽀持事务,即原⼦性,通过
MULTI 和 EXEC 指令包起来。
持久化 - Redis ⽀持数据的持久化。可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进⾏使⽤。
备份 - Redis ⽀持数据的备份,即 master-slave 模式的数据备份。
丰富的特性 - Redis 还⽀持发布订阅, 通知, key 过期等等特性。
1.3. Redis 与 Memcached
Redis 与 Memcached 因为都可以⽤于缓存,所以常常被拿来做⽐较,⼆者主要有以下区别:
数据类型
Memcached 仅⽀持字符串类型;
⽽ Redis ⽀持五种不同种类的数据类型,使得它可以更灵活地解决问题。
数据持久化
Memcached 不⽀持持久化;
Redis ⽀持两种持久化策略:RDB 快照和 AOF ⽇志。
分布式
Memcached 不⽀持分布式,只能通过在客户端使⽤像⼀致性哈希这样的分布式算法来实现分布式存储,这种⽅式在存储和查询时都需要先在客户端计算⼀次数据所在的节点。
Redis Cluster 实现了分布式的⽀持。
内存管理机制
Memcached 将内存分割成特定长度的块来存储数据,以完全解决内存碎⽚的问题,但是这种⽅式会使得内存的利⽤率不⾼,例如块的⼤⼩为 128 bytes,只存储 100 bytes 的数据,那么剩下的 28 bytes 就浪费掉了。
在 Redis 中,并不是所有数据都⼀直存储在内存中,可以将⼀些很久没⽤的 value 交换到磁盘。⽽ Memcached 的数据则会⼀直在内存中。
2. 数据类型
2.1. STRING
命令:
命令⾏为
GET获取存储在给定键中的值
SET设置存储在给定键中的值
DEL删除存储在给定键中的值(这个命令可以⽤于所有类型)⽰例:
127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
命令:
命令⾏为
RPUSH获取存储在给定键中的值
LRANGE设置存储在给定键中的值
LINDEX删除存储在给定键中的值(这个命令可以⽤于所有类型)LPOP删除存储在给定键中的值(这个命令可以⽤于所有类型)⽰例:
127.0.0.1:6379> rpush list item1
(integer) 1
127.0.0.1:6379> rpush list item2
(integer) 2
127.0.0.1:6379> rpush list item3
redis支持的五种数据类型
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "item1"
2) "item2"
3) "item3"
127.0.0.1:6379> lindex list 1
"item2"
127.0.0.1:6379> lpop list
"item1"
127.0.0.1:6379> lrange list 0 -1
1) "item2"
2) "item3"
2.3. SET
命令⾏为
SADD添加⼀个或多个元素到集合⾥SMEMBERS获取集合⾥⾯的所有元素SISMEMBER确定⼀个给定的值是⼀个集合的成员SREM从集合⾥删除⼀个或多个元素
⽰例:
127.0.0.1:6379> sadd set item1
(integer) 1
127.0.0.1:6379> sadd set item2
(integer) 1
127.0.0.1:6379> sadd set item3
(integer) 1
127.0.0.1:6379> sadd set item3
(integer) 0
127.0.0.1:6379> smembers set
1) "item3"
2) "item2"
3) "item1"
127.0.0.1:6379> sismember set item2
(integer) 1
127.0.0.1:6379> sismember set item6
(integer) 0
127.0.0.1:6379> srem set item2
(integer) 1
127.0.0.1:6379> srem set item2
(integer) 0
127.0.0.1:6379> smembers set
1) "item3"
2) "item1"
2.4. HASH
命令:
命令⾏为
HSET设置 hash ⾥⾯⼀个字段的值
HGET获取 hash 中域的值
HGETALL从 hash 中读取全部的域和值
HDEL删除⼀个或多个域
⽰例:
127.0.0.1:6379> hset myhash key1 value1
(integer) 1
127.0.0.1:6379> hset myhash key2 value2
(integer) 1
127.0.0.1:6379> hset myhash key3 value3
(integer) 1
127.0.0.1:6379> hset myhash key3 value2
(integer) 0
127.0.0.1:6379> hgetall myhash
1) "key1"
2) "value1"
3) "key2"
4) "value2"
5) "key3"
6) "value2"
127.0.0.1:6379> hdel myhash key2
(integer) 1
127.0.0.1:6379> hdel myhash key2
(integer) 0
127.0.0.1:6379> hget myhash key2
(nil)
127.0.0.1:6379> hgetall myhash
1) "key1"
2) "value1"
3) "key3"
4) "value2"
127.0.0.1:6379>
2.5. ZSET
命令:
命令⾏为
ZADD添加到有序 set 的⼀个或多个成员,或更新的分数,如果它已经存在ZRANGE根据指定的 index 返回,返回 sorted set 的成员列表

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。