redis知识点

来源:互联网 发布:自学程序员要看什么书 编辑:程序博客网 时间:2024/06/15 11:53
Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。
Redis有三个主要特点,使它优越于其它键值数据存储系统 。

1、Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。

2、与其它键值数据存储相比,Redis有一组相对丰富的数据类型。

3、Redis可以将数据复制到任意数量的从机中。
以下是Redis的一些优点。
异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。
操作具有原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。
Redis与其他键值存储系统
Redis是键值数据库系统的不同进化路线,它的值可以包含更复杂的数据类型,可在这些数据类型上定义原子操作。
Redis是一个内存数据库,但在磁盘数据库上是持久的,因此它代表了一个不同的权衡,在这种情况下,在不能大于存储器(内存)的数据集的限制下实现非常高的写和读速度。

内存数据库的另一个优点是,它与磁盘上的相同数据结构相比,复杂数据结构在内存中存储表示更容易操作。 因此,Redis可以做很少的内部复杂性。

开启redis服务
redis-server redis.conf
连接客户端
[root@cqs redis-2.8.3]# redis-cli -h 127.0.0.1 -p 6379 -a "" #连接客户端,-h 主机ip -p 端口号 -a 认证密码
查看当前的配置
127.0.0.1:6379> config get *            #获取全部的配置值
127.0.0.1:6379> config get daemonize    #获取daemonize配置值
设置对应的配置值
127.0.0.1:6379> config set loglevel "notice"   #设置loglevel的值

redis的数据类型,支持5种。
1、字符串

Redis中的字符串是一个字节序列。Redis中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达512兆字节的任何内容。
eg.
127.0.0.1:6379>set foo "bar"
OK
127.0.0.1:6379>get foo
"bar"
127.0.0.1:6379> del foo
(integer) 1
127.0.0.1:6379> get foo
(nil)
2、散列/哈希
Redis散列/哈希(Hashes)是键值对的集合。Redis散列/哈希是字符串字段和字符串值之间的映射。因此,它们用于表示对象。每个散列/哈希可以存储多达2^32 - 1个健-值对(超过40亿个)。
eg.
127.0.0.1:6379> HMSET usekey username "cqs" password "cqs123" point 200
OK
127.0.0.1:6379> hgetall usekey
1) "username"
2) "cqs"
3) "password"
4) "cqs123"
5) "point"
6) "200"
3、列表
Redis列表只是字符串列表,按插入顺序排序。可以向Redis列表的头部或尾部添加元素。列表的最大长度为2^32 - 1个元素(4294967295,每个列表可容纳超过40亿个元素)。
eg.
127.0.0.1:6379> LPUSH alist "cjj"
(integer) 1
127.0.0.1:6379> LPUSH alist "cjh"
(integer) 2
127.0.0.1:6379> LPUSH alist "cqw"
(integer) 3
127.0.0.1:6379> LLEN alist
(integer) 3
127.0.0.1:6379> LRANGE alist 0 2
1) "cqw"
2) "cjh"
3) "cjj"
4、集合
Redis集合是字符串的无序集合。在Redis中,您可以添加,删除和测试成员存在的时间O(1)复杂性。一个集合中的最大成员数量为2^32 - 1(即4294967295,每个集合中元素数量可达40亿个)个。
eg.
127.0.0.1:6379> SADD databases "mysql"
(integer) 1
127.0.0.1:6379> SADD databases "pgsql"
(integer) 1
127.0.0.1:6379> SADD databases "oracle"
(integer) 1
127.0.0.1:6379> SADD databases "oracle"    #被oracle添加了两次,但是由于集合的唯一属性,所以它只算添加一次。
(integer) 0
127.0.0.1:6379> SMEMBERS databases
1) "oracle"
2) "pgsql"
3) "mysql"
5、可排序集合

Redis可排序集合类似于Redis集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复。
eg.
127.0.0.1:6379> ZADD sort_databases 0 "mysql"
(integer) 1
127.0.0.1:6379> ZADD sort_databases 0 "pgsql"
(integer) 1
127.0.0.1:6379> ZADD sort_databases 1 "oracle"
(integer) 1
127.0.0.1:6379> ZADD sort_databases 1 "oracle"
(integer) 0
127.0.0.1:6379> ZRANGEBYSCORE sort_databases 0 5
1) "mysql"
2) "pgsql"
3) "oracle"


Redis发送订阅
Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 发布订阅(pub/sub)实现了消息系统,发送者(在redis术语中称为发布者)在接收者(订阅者)接收消息时发送消息。传送消息的链路称为信道。
在Redis中,客户端可以订阅任意数量的信道。
在以下示例中,一个客户端订阅名为“redisChat”的信道。
127.0.0.1:6379> SUBSCRIBE redisChat  
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
1) "message"
2) "redisChat"
3) "Learn redis by yii"

两个客户端在名称为“redisChat”的相同信道上发布消息,并且上述订阅的客户端接收消息。
当发送端发布一条信息时,订阅端会实时收到发送端的信息。
127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique" 
(integer) 0
127.0.0.1:6379> PUBLISH redisChat "Learn redis by yii" 
(integer) 1


Redis事务
Redis事务允许在单个步骤中执行一组命令。以下是事务的两个属性:
事务中的所有命令作为单个隔离操作并按顺序执行。不可以在执行Redis事务的中间向另一个客户端发出的请求。
Redis事务也是原子的。原子意味着要么处理所有命令,要么都不处理。
Redis事务由命令MULTI命令启动,然后需要传递一个应该在事务中执行的命令列表,然后整个事务由EXEC命令执行。
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set mykey "123"
QUEUED
127.0.0.1:6379> get myke
QUEUED
127.0.0.1:6379> get mykey
QUEUED
127.0.0.1:6379> EXEC  
1) OK
2) (nil)
3) "123"
127.0.0.1:6379> 


Redis备份
Redis数据库可以使用安全的方案,使得进行连接的任何客户端在执行命令之前都需要进行身份验证。要保护Redis安全,需要在配置文件中设置密码。
获取当前redis服务器的认证密码
127.0.0.1:6379> CONFIG get requirepass 
1) "requirepass"
2) ""
设置当前redis服务器的认证密码
127.0.0.1:6379> CONFIG SET requirepass "123"
OK
设置密码后,如果任何客户端运行命令而不进行身份验证,则会返回一个(error) NOAUTH Authentication required.的错误信息。 因此,客户端需要使用AUTH命令来验证。
127.0.0.1:6379> AUTH "123"
OK

Redis客户端连接
Redis在配置的监听TCP端口和Unix套接字上等待和接受客户端的连接(如果已启用)。 当接受新的客户端连接时,执行以下操作。
由于Redis使用复用和非阻塞I/O,因此客户端套接字处于非阻塞状态。
设置TCP_NODELAY选项是为了确保连接不延迟。
创建可读文件事件,以便Redis能够在套接字上读取新数据时收集客户端查询。
最大客户数:在Redis配置文件(redis.conf)中,有一个名称为maxclients的属性,它描述了可以连接到Redis的客户端的最大数量。
127.0.0.1:6379> CONFIG GET maxclients
1) "maxclients"
2) "10000"


redis键命令

下表列出了与键相关的一些基本命令。

编号命令描述1DEL key此命令删除一个指定键(如果存在)。2DUMP key此命令返回存储在指定键的值的序列化版本。3EXISTS key此命令检查键是否存在。4EXPIRE key seconds设置键在指定时间秒数之后到期/过期。5EXPIREAT key timestamp设置在指定时间戳之后键到期/过期。这里的时间是Unix时间戳格式。6PEXPIRE key milliseconds设置键的到期时间(以毫秒为单位)。7PEXPIREAT key milliseconds-timestamp以Unix时间戳形式来设置键的到期时间(以毫秒为单位)。8KEYS pattern查找与指定模式匹配的所有键。9MOVE key db将键移动到另一个数据库。10PERSIST key删除指定键的过期时间,得永生。11PTTL key获取键的剩余到期时间。12RANDOMKEY从Redis返回一个随机的键。13RENAME key newkey更改键的名称。14PTTL key获取键到期的剩余时间(以毫秒为单位)。15RENAMENX key newkey如果新键不存在,重命名键。16TYPE key返回存储在键中的值的数据类型。redis字符串命令

下表列出了一些用于在Redis中管理字符串的基本命令。

编号命令描述说明1SET key value此命令设置指定键的值。2GET key获取指定键的值。3GETRANGE key start end获取存储在键上的字符串的子字符串。4GETSET key value设置键的字符串值并返回其旧值。5GETBIT key offset返回在键处存储的字符串值中偏移处的位值。6MGET key1 [key2..]获取所有给定键的值7SETBIT key offset value存储在键上的字符串值中设置或清除偏移处的位8SETEX key seconds value使用键和到期时间来设置值9SETNX key value设置键的值,仅当键不存在时10SETRANGE key offset value在指定偏移处开始的键处覆盖字符串的一部分11STRLEN key获取存储在键中的值的长度12MSET key value [key value …]为多个键分别设置它们的值13MSETNX key value [key value …]为多个键分别设置它们的值,仅当键不存在时14PSETEX key milliseconds value设置键的值和到期时间(以毫秒为单位)15INCR key将键的整数值增加116INCRBY key increment将键的整数值按给定的数值增加17INCRBYFLOAT key increment将键的浮点值按给定的数值增加18DECR key将键的整数值减119DECRBY key decrement按给定数值减少键的整数值20APPEND key value将指定值附加到键

redis连接命令

下表列出了与Redis连接相关的一些基本命令。

序号命令说明1AUTH password使用给定的密码验证服务器2ECHO message打印给定的字符串信息3PING检查服务器是否正在运行4QUIT关闭当前连接5SELECT index更改当前连接的所选数据库
redis客户端命令
编号命令描述1CLIENT LIST返回连接到Redis服务器的客户端列表2CLIENT SETNAME为当前连接分配/设置新的名称3CLIENT GETNAME返回由CLIENT SETNAME设置的当前连接的名称4CLIENT PAUSE这是一个连接控制命令,能够将所有Redis客户端按指定的时间量(以毫秒为单位)挂起5CLIENT KILL此命令关闭指定的客户端连接。附:全文的相关知识链接:http://www.yiibai.com/redis/redis_quick_guide.html

0 0