本文章由几部分组成
1、 Redis概述和安装
1.1 概述
Redis是一种内存数据库(NoSQL),相比关系型数据库是存储在内存中的,不使用表,不存在不同数据类型之间的关联,减少了IO操作,可以极大的提高数据的查询效率。
memcached也是一种常用的内存数据库,这两者经常拿来比较。memcached更只支持字符串这种数据类型,Redis支持五种数据结构类型,可以解决更广泛的问题,并且既可以用作主数据库,又可以作为其他存储系统的辅助数据库。
常用数据库和缓存服务器的特性与功能比较
1.2 Linux环境下安装步骤
2、 Redis基本数据结构介绍
Redis是一个速度非常快速的非关系数据库(NRDB),它可以存储键(key)与5种不同类型的值(value)之间的映射。
2.1 字符串 STRING
字符串类型是Redis中最常见的一种数据类型,可以设置键和值都为STRING,如下示例所示:
> set mykey somevalue
OK
> get mykey
"somevalue"
SET:设置存储在指定键中的值
GET:获取给定键的value值
DEL:删除给定键的值
除了以上三种命令操作外,字符串还支持其他类型的命令操作,比方说数值字符串的自增和自减操作。
如下示例对数值字符串的增减:
2.2 列表 LIST
链表结构可以有序的存储多个字符串,并且字符串之间是可以重复的。
如下示例所示:
rpush mylist A
(integer) 1
rpush mylist B
(integer) 2
lpush mylist first
(integer) 3
lrange mylist 0 -1
1) “first”
2) “A”
3) “B”
RPUSH: 链表的右边插入给定值
LPUSH: 链表的左边插入给定值
LPOP: 从链表的左边获取值
RPOP: 从链表的右边获取给定值
LRANGE: 获取链表在给定范围上的所有值
LINDEX: 获取链表在给定位置上的单个元素
2.3 集合 SET
集合结构可以存储多个字符串,并且字符串之间是不可以重复的和无序的。其命令的相关操作如下示例所示:
sadd myset 1 2 3
(integer) 3
smembers myset
3
1
2
sismember myset 3
(integer) 1
sismember myset 30
(integer) 0
SADD: 将指定元素添加到集合
SMEMBERS: 返回集合包含的所有元素
SISMEMBER: 判断给定的元素是否在集合中
SREM: 如果指定的元素在集合中,那么移除这个元素
2.4 散列 HASH
Redis的散列可以存储多个键值对之间的映射,和字符串一样,散列存储的值既可以是字符串又可以是数字值。键值是无序排列的。
主要命令的相关操作如下示例所示:
hmset user:1000 username antirez
(integer) 1
hmset user:1000 birthyear 1977 verified 1
(integer) 1
hmset user:1000 verified 1
(integer) 1
hget user:1000 username
“antirez”
hget user:1000 birthyear
“1977”
hgetall user:1000
1) “username”
2) “antirez”
3) “birthyear”
4) “1977”
5) “verified”
6) “1”
HSET: 在散列中关联起给定的键值对。
HGET: 获取指定散列的值
HGETALL: 获取指定散列的所有值
HDEL: 如果给定值存在于散列中,那么就移除这个值
2.5 有序集合 ZSET
zadd hackers 1940 “Alan Kay”
(integer) 1
zadd hackers 1957 “Sophie Wilson”
(integer) 1
zadd hackers 1953 “Richard Stallman”
(integer) 1
zadd hackers 1949 “Anita Borg”
(integer) 1
zadd hackers 1965 “Yukihiro Matsumoto”
(integer) 1
zadd hackers 1914 “Hedy Lamarr”
(integer) 1
zadd hackers 1916 “Claude Shannon”
(integer) 1
zadd hackers 1969 “Linus Torvalds”
(integer) 1
zadd hackers 1912 “Alan Turing”
(integer) 1
zadd:
zrange:
zrem:
zrangebyscore:
3、redis的特性
3.1 发布与订购
3.2 复制(主从同步)
3.3 持久化(快照持久化和AOF持久化)
3.4 Redis事务
和数据库事务一样,具有ACID等特性。使用事务可以控制几个命令一起执行,并且在命令执行的过程中不被其他的命令打断。
事务执行的一般顺序:
1)开始事务
2)命令入队
3)执行事务
常用命令: MULTI (开始事务)、EXEC(执行事务)
redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED
redis 127.0.0.1:6379> GET book-name
QUEUED
redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
2) "C++"
3) "Programming"
客户端分片
Redis的分布式锁 (Distributed locks with Redis)
https://redis.io/topics/distlock
Redis的分布式,以及如何使用Redis处理一个能够包含数百GB数据、每秒处理上百万次请求的系统。
未完待续