您的位置:首页 > 数据库 > Redis

Redis安装和使用记录

2015-09-29 01:41 871 查看
最近因项目需要使用了Redis,这里记录一下使用心得,方便以后查阅!

首先,介绍一下Redis,Redis是一个开源的,使用C语言编写、支持网络、可基于内存亦可持久化的Key-Value数据库。

一、Redis安装

1、下载

wget http://download.redis.io/releases/redis-3.0.2.tar.gz
2、解压

tar -zxvf redis-3.0.2.tar.gz

3、编译

make MALLOC=libc

4、运行

./src/redis-server redis.conf

5、测试

./src/redis-cli

redis> set foo bar

OK

redis> get foo

"bar"

6、停止服务

src/redis-cli shutdown

二、Redis数据类型



这个图(引用redisbook)展示了Redis各种数据类型。这里作简单介绍一下:

1、字符串

2、lists,即列表,底层实现用的是链表,插入快,定位慢

lpush 列表名字 value 向列表左侧插入数据

rpush 列表名字 value 向列表右侧插入数据

lange 列表名字 start stop 列出列表中从编号start到编号stop的元素

3、集合sets,redis的集合,是一种无序的集合,集合中的元素没有先后顺序

sadd key member [member ...]

将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。

假如 key 不存在,则创建一个只包含 member 元素作成员的集合。

sismember key member

判断 member 元素是否集合 key 的成员。

如果 member 元素是集合的成员,返回 1 。

如果 member 元素不是集合的成员,或 key 不存在,返回 0 。

smembers key

返回集合 key 中的所有成员。

不存在的 key 被视为空集合。

4、有序集合sorted sets,很多时候,我们都将redis中的有序集合叫做zsets,这是因为在redis中,有序集合相关的操作指令都是以z开头的。

三、Redis常用命令

键值相关命令:

1、keys pattern(返回满足给定pattern的所有key)

2、exists key(确认一个key是否存在)

3、del key(删除一个key)

4、expire key second(设置一个key的过期时间,单位:秒;例如 expire randomcode 60)

5、move(将当前数据库中的key转移到其它数据库中,例如 move age 1;将key从当前数据库移到数据库1)

6、persist key(移除给定key的生存时间,将这个key从带生存时间的key转换成持久的,即一个不带生存时间、永不过期的key)

7、randomkey(随机返回key空间的一个key)

8、rename oldkey newkey(重命名key)

9、type key(返回key所存储的值的类型。返回值:none[key不存在]、string[字符串]、list[列表]、set[集合]、zset[有序集合]、hash[哈希表])

服务器相关命令:

1、ping(测试与服务器连接是否仍然生效,如果连接正常就返回一个pong)

2、select(切换到指定的数据库,数据库索引号index用数字值指定,以0作为起始索引)

3、quit(请求服务器关闭与当前客户端的连接)

4、dbsize(返回当前数据库的key的数量)

5、info(获取服务器的信息和统计)

6、flushdb(删除当前选择数据库中的所有key)

7、flushall(删除所有数据库中的所有key)

8、设置密码和鉴权(设置密码可以通过配置文件中requirepass项的值,或者实用config set requirepass password),用法如下:

# 设置密码

redis> config set requirepass pwd123987   # 将密码设置为 pwd123987

OK

redis> quit                                     # 退出再连接,让新密码对客户端生效

$ redis

redis> ping                                     # 未验证密码,操作被拒绝

(error) ERR operation not permitted

redis> auth wrong_password_testing              # 尝试输入错误的密码

(error) ERR invalid password

redis> auth pwd123987                     # 输入正确的密码

OK

redis> ping                                     # 密码验证成功,可以正常操作命令了

PONG

# 清空密码

redis> config set requirepass ""   # 通过将密码设为空字符来清空密码

OK

redis> quit

$ redis                            # 重新进入客户端

redis> ping                        # 执行命令不再需要密码,清空密码操作成功

PONG

四、Redis高级实用特性

1、主从复制
redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。
redis主从复制特点:
1)、master可以拥有多个slave
2)、多个slave可以连接同一个master外,还可以连接到其它slave
3)、主从复制不会阻塞master,在同步数据时,master可以继续处理client请求。

当配置好slave后,slave与master建立连接,然后发送sync命令。无论第一次连接还是重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。如果master同时受到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。

2、持久化
通常,Redis将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据持久化。一是使用快照的方式(也是默认的方式),将内存中的数据不断写入磁盘(一个二进制文件,dump.rdb);二是类似MySQL的日志方式,记录每次更新的日志(即AOF方式)。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。

下面介绍详细的快照保存过程:

1)、redis调用fork,现在有了子进程和父进程

2)、父进程继续处理client请求,子进程负责将内存内容写入到临时文件。

3、事务控制
redis对事务的支持目前还比较简单。redis只能保证一个client发起的事务中的命令可以连续执行,而中间不会插入其它client命令。由于redis是单线程来处理所有client的请求。一般情况下redis在接受到一个client发来的命令后会立即处理并返回
multi:标记一个事务块的开始。
discard:清空事务的命令队列并退出事务上下文,即事务回滚。

好了,就写先这么多了,后续再补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息