Redis 简介

Redis是一个BSD许可的、开源的,基于内存数据结构存储的数据库、缓存和消息中间件。 它支持各种数据结构,例如字符串,哈希,列表,集合,有序集合,位图,超文本和地理空间索引的半径查询等。 Redis内置了复制,Lua脚本,LRU管理机制,事务和分级别的磁盘持久性。Redis通过Redis Sentinel提供高可用性,通过Redis Cluster进行自动分区。


Redis

安装

Redis是用ANSI C编写的,可以在大多数POSIX系统中使用,比如Linux, BSD,OS X,而且没有外部依赖,建议部署在linux上。我们以Ubuntu 14.04 LTS 为例来简单介绍一下,没有依赖,所以安装很简单:

1
2
$ apt-get install update
$ apt-get install redis-server

Redis install

从图上我们可以看到Redis已经启动了,而且Redis的默认端口是6379,安装在usr/bin/redis-server目录下。安装了redis服务端后,会自带安装一个命令行客户端程序 redis-cli,可以输入看看效果:

1
$ redis-cli

常用配置项

Redis服务器的配置文件是redis.conf,默认目录/etc/redis/下,常用的几个配置项: - requirepass ##修改密码。 - bind 127.0.0.1 ##ip地址,如果注释掉,其他电脑就可以访问了。 - port 6379 #端口 - logfile /var/log/redis/redis-server.log #日志目录和文件

开始使用

我们的示例基于python,所以我们安装一个python的支持包:

1
apt-get install python-redis

然后我们就可以看个python的小例子:

1
2
3
4
5
6
>>> import redis
>>> r = redis.StrictRedis(host='localhost', port=6379, db=0)
>>> r.set('foo', 'bar')
True
>>> r.get('foo')
'bar'

然后我们登陆下客户端看看情况。

1
2
$ redis-cli
redis 127.0.0.1:6379> keys * #查看目前所有的键值

可以看到列表中有foo

一些基本的操作命令

1.String类型,处理各类字符,部分示例:

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> set name tom //新增记录  
127.0.0.1:6379> get name //读取记录

127.0.0.1:6379> set age 4 //设置新纪录年龄

127.0.0.1:6379> incr age //原子递增
127.0.0.1:6379> get age // 5

127.0.0.1:6379> decr age //原子递减
127.0.0.1:6379> get age // 4

2.Hash类型,Redis存储的是Hashmap,部分示例:

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> hset user1 name tom //新增HASH 
127.0.0.1:6379> hget user1 name //获取HASH值

127.0.0.1:6379> hset user1 age 20
127.0.0.1:6379> hget user1 age

127.0.0.1:6379> hmset user1 sex famle city beijing //批量增加HASH值
127.0.0.1:6379> hgetall user1 //获取所有HASH字段和值

127.0.0.1:6379> hdel user1 city //删除某个字段127.0.0.1:6379> hgetall user1

3.List类型,实际上是一个双向链表,部分示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
127.0.0.1:6379> lpush users tom jackie jimi //加个多个元素到列表 

127.0.0.1:6379> lrange users 0 -1 //输出全部
127.0.0.1:6379> lrange users 0 2 //输出列表3个

127.0.0.1:6379> lpushx users lucy //向列表头部添加lucy元素
127.0.0.1:6379> rpushx users mark //向列表尾部添加mark元素
127.0.0.1:6379> lrange users 0 -1


127.0.0.1:6379> lpop users //移除列表第一个元素
127.0.0.1:6379> rpop users //移除列表最后一个元素
127.0.0.1:6379> lrange users 0 -1

127.0.0.1:6379> llen users //列表长度

4.set类型,无序集合,部分示例。

1
2
3
127.0.0.1:6379> sadd Uarrarys a b c d //添加a b c d到Uarrarys集合中
127.0.0.1:6379> smembers Uarrarys //Uarrarys集合的所有元素
127.0.0.1:6379> spop Uarrarys //Uarrarys集合中随机删除一个元素

5.sorted set类型,有序集合,每个成员必须关联一个float,redis通过它来为集合成员排序,部分示例。

1
2
3
127.0.0.1:6379> zadd Sarrarys 0 a 1 b 2 c 3 d //添加a b c d到Sarrarys集合中
127.0.0.1:6379> zcard Sarrarys //Sarrarys集合的成员数量
127.0.0.1:6379> zrange Sarrarys 0 1 withscores

6.Pub/Sub,Redis订阅和发布实现了通讯系统。发布者发送信息,而接收者订阅它们。

  • 在一个终端里先来订阅一下:
    1
    127.0.0.1:6379> subscribe mychat 

Redis subscribe

  • 再在另外一个终端发布一下看看:
    1
    127.0.0.1:6379>publish mychat "hello world!"

Redis publish

7.Transactions,事务是用来一次执行多个命令,一个事务中的所有命令作为单个独立的操作顺序执行。在Redis事务中的执行过程中不会被另一客户端发出的请求打断;Redis事务是原子的,这意味着要么所有的命令都执行,要么都不执行。

Redis事务由指令multi发起的,之后传递需要在事务中执行的命令,最后由exec命令执行所有命令,可以用discard取消事务。

1
2
3
4
5
6
7
8
9
127.0.0.1:6379> multi

127.0.0.1:6379> lpush users tom jackie jimi //加个多个元素到列表
127.0.0.1:6379> lpushx users lucy //向列表头部添加lucy元素
127.0.0.1:6379> rpushx users mark //向列表尾部添加mark元素

127.0.0.1:6379> exec

127.0.0.1:6379> lrange users 0 -1

8.其他常用命令

1
2
3
4
127.0.0.1:6379> ping  #连接状态。
127.0.0.1:6379> config get maxclients #最大连接数值
127.0.0.1:6379> config get dir #配置文件位置
127.0.0.1:6379> save #备份,将在redis目录中创建一个dump.rdb文件。

想在线练习练习,可以直接用我们的免费课程:Redis入门