最近因项目需要使用了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数据类型

怎么查看本地电脑是否装了redis 查看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:清空事务的命令队列并退出事务上下文,即事务回滚。


好了,就写先这么多了,后续再补充。