初识Redis

初识Redis
Redis是一个速度非常快的非关系数据库(non-relational database),它可以存储键(key)与5种不同类型的值(value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬 盘,可以使用复制特性来扩展读性能,还可以使用客户端分片[1]来扩展写性能,接下来的几节将分别介绍Redis的这几个特性。

1.1 Redis简介


1.1.2附加特性
Redis拥有两种不同形式的持久化方法,它们都可以用小而紧凑的格式将存储在内存中的数据写入到磁盘:
     第一种持久化方法为时间点转储(point- in-time dump),转储操作既可以在“指定时间段内有指定数量的写操作执行”这一条件被满足时执行,又可以通过调用两条转储到磁盘(dump-to-disk) 命令中的任何一条来执行;
     第二种持久化方法将所有修改了数据库的命令都写入到一个只追加(append-only)文件里面,用户可以根据数据的重要程 度,将只追加写入设置为从不同步(sync)、每秒钟同步一次或者每写入一个命令就同步一次。

Redis实现了主从复制特性:执行复制的从服务器会连接上主服务器,接收主服务器发送的完整数据库的初始副本(copy);之后主服务器执行的写命令, 都会被发送给所有连接着的从服务器去执行,从而实时地更新从服务器的数据集。因为从服务器包含的数据会不断地进行更新,所以客户端可以向任意一个从服务器 发送读请求,以此来避免对主服务器进行集中式的访问。

1.2 Redis数据结构介绍



1.3 Redis常用命令使用方法

1.3.1 字符串命令

命令行为
GET获取存储在给定键中的值
SET设置存储在给定键中的值
DEL删除存储在给定键中的值(这个命令可以用于所有类型)

使用示例:
# redis-cli   #启动redis-cli客户端
127.0.0.1:6379> set hello world    #将键hello的值设置为world
OK                                                #SET 命令在执行成功时返回 OK ,Python 客户端会将这个 OK 转换成 True
127.0.0.1:6379> get hello             #获取储存在键 hello 中的值
"world"                                         # 键的值仍然是 world ,跟我们刚才设置的一样
127.0.0.1:6379> del hello             #删除这个键值对
(integer) 1                                    # 在对值进行删除的时候,DEL 命令将返回被成功删除的值的数量
127.0.0.1:6379> get hello             # 因为键的值已经不存在,所以尝试获取键的值将得到一个 nil
(nil)                                               # Python 客户端会将这个 nil 转换成 None

1.3.2 列表命令

命令行为
RPUSH将给定值推入到列表的右端
LRANGE获取列表在给定范围上的所有值
LINDEX获取列表在给定位置上的单个元素
LPOP从列表的左端弹出一个值,并返回被弹出的值

使用示例:
127.0.0.1:6379> rpush list-key item    # 在向列表推入新元素之后,该命令会返回列表的当前长度。
(integer) 1                                           #
127.0.0.1:6379> rpush list-key item2  #
(integer) 2                                           #
127.0.0.1:6379> rpush list-key item    #
(integer) 3                                           #
127.0.0.1:6379> lrange list-key 0 -1   # 使用0为范围的起始索引,-1为范围的结束索引,
1) "item"                                             # 可以取出列表包含的所有元素。
2) "item2"                                           #
3) "item"                                             #
127.0.0.1:6379> lindex list-key 1     # 使用LINDEX可以从列表里面取出单个元素。
"item2"                                               #
127.0.0.1:6379> lpop list-key         # 从列表里面弹出一个元素,被弹出的元素不再存在于列表。
"item"                                                #
 127.0.0.1:6379> lrange list-key 0 -1  #
1) "item2"                                          #
2) "item"                                            #

1.3.3 集合命令

命令行为
SADD将给定元素添加到集合
SMEMBERS返回集合包含的所有元素
SISMEMBER检查给定元素是否存在于集合中
SREM如果给定的元素存在于集合中,那么移除这个元素

使用示例:
127.0.0.1:6379> sadd set-key item       # 在尝试将一个元素添加到集合的时候,
(integer) 1                                             # 命令返回1表示这个元素被成功地添加到了集合里面,
127.0.0.1:6379> sadd set-key item2     # 而返回0则表示这个元素已经存在于集合中。
(integer) 1                                                                           
127.0.0.1:6379> sadd set-key item       
(integer) 0                                           
127.0.0.1:6379> smembers set-key      # 获取集合包含的所有元素将得到一个由元素组成的序列,
1) "item"                                               # Python客户端会将这个序列转换成Python集合。
2) "item2"                                            
3) "item3"                                            
127.0.0.1:6379> sismember set-key item4   # 检查一个元素是否存在于集合中,
(integer) 0                                                    # Python客户端会返回一个布尔值来表示检查结果。
127.0.0.1:6379> sismember set-key item   
(integer) 1                                             
127.0.0.1:6379> srem set-key item2    # 在使用命令移除集合中的元素时,命令会返回被移除的元素数量。
(integer) 1                                           
127.0.0.1:6379> srem set-key item2    
(integer) 0                                           
127.0.0.1:6379>  smembers set-key
1) "item"
2) "item3"

跟字符串和列表不一样,集合除了基本的添加操作和移除操作之外,还支持很多其他操作,比如SINTERSUNIONSDIFF三个命令就可以分别执行常见的交集计算、并集计算和差集计算。

1.3.4 散列命令

命令行为
HSET在散列里面关联起给定的键值对
HGET获取指定散列键的值
HGETALL获取散列包含的所有键值对
HDEL如果给定键存在于散列里面,那么移除这个键

使用示例:
127.0.0.1:6379> hset hash-key sub-key1 value1 # 在尝试添加键值对到散列的时候,
(integer) 1                                         # 命令会返回一个值来表示给定的键是否已经存在于散列里面。
127.0.0.1:6379> hset hash-key sub-key2 value2 
(integer) 1                                         
127.0.0.1:6379> hset hash-key sub-key1 value1 
(integer) 0
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"

1.3.5 有序集合

有序集合和散列一样,都用于存储键值对:其中有序集合的每个键称为成员(member),都是独一无二的,而有序集合的每个值称为分值(score),都必须是浮点数。有序集合是Redis里面唯一既可以根据成员访问元素(这一点和散列一样),又可以根据分值以及分值的排列顺序来访问元素的结构。

命令行为
ZADD将一个带有给定分值的成员添加到有序集合里面
ZRANGE根据分值的排序顺序,获取有序集合在给定位置范围内的所有元素
ZRANGEBYSCORE获取有序集合在给定分值范围内的所有元素
ZREM如果给定成员存在于有序集合,那么移除这个成员


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值