初始Redis与安装
# 初始Redis与安装
# Redis简介
Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。在存储的时候采用 key-value 的形式。
它比起MySql之类的数据库,性能高得多,这是因为Redis是一种基于内存的缓存系统 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
它的数据通常存储在内存
中,但是Redis也会定时把数据写回硬盘中。在重启的时候可以再次加载到内存中进行使用。
# 支持的数据类型
Redis支持五种基本数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(有序集合)。
- string(字符串)是Redis最基本的类型,一个key对应一个value。string类型是二进制安全的,支持存储部分简单的数据类型,如数字、字符串等。
- hash(哈希)是一个键值对的集合,是string类型的field和value的映射表,特别适合用于存储对象。
- list(列表)是简单的字符串列表,按照
插入顺序排序
。 - set(集合)是string类型的
无序集合
、且集合中元素是唯一的,不重复
。 - zset(有序集合)是
set的有序版
本,每个元素都有一个分数,根据元素的分数进行排序。
# 安装
在linux环境下安装,因为Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:
yum install -y gcc tcl
# 下载安装包
wget http://download.redis.io/releases/redis-x.x.x.tar.gz
tar -xzvf redis-x.x.x.tar.gz
2
根据自己的需求,将 "x.x.x" 替换为你想要下载的Redis版本号。
# 编译与安装
cd redis-x.x.x
make && make install
2
编译(make)完成后进行安装(make install),当然你也可以将这两步分开执行。
默认的安装路径是在/usr/local/bin
的目录下。进入该文件夹,就可以发现此时它多了一些redis相关的文件,如:
- redis-cli:redis提供的命令行客户端
- redis-server:redis的服务端启动脚本
- redis-sentinel:redis的哨兵启动脚本
# 启动
在Redis的安装目录/usr/local/bin
中,执行一下命令:
./redis-server
直接运行redis-server
脚本,是前台方式运行,只要窗口关闭,redis服务就会挂掉,同时也无法执行其他操作。这种方式很不利于我们使用redis,因此我们通常推荐使用后台
方式启动:
- 后台启动
./redis-server --daemonize yes
Redis默认监听端口为6379
。如果你想修改端口,可以编辑配置文件redis.conf
进行相应的配置。
- 启动时,指定配置文件启动
./redis-server ../redis.conf
将守护进程修改为yes,即可后台运行。后一个参数为配置文件的路径,可以使用相对路径,也可以使用绝对路径。
# 修改配置文件
- 备份
cp redis.conf redis.conf bck
在修改配置文件之前,为了保险起见,我们先将配置文件进行一次备份。再进行修改
- 修改——以下是其中一些重要配置
# 监听的地址 默认是 127.0.0.1,修改为0.0.0.0 则可以在任意ip访问,生产环境不要这样设置
bind 127.0.0.1
# 守护进程 修改为yes后即可后台运行,默认为 no
daemonize no
# 密码,设置后 访问redis必须输入密码 默认是被注释掉的 不需要密码
# requirepass foobared
# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
# 监听的端口
port 6379
# 工作目录 默认是当前目录(server脚本所在的地址),日志、持久化等文件都会保存在这个目录
dir ./
# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
# 数据库数量 默认为16,编号是0-15 ,设置几 代表使用几个数据库
databases 16
# In short... if you have replicas attached it is suggested that you set a lower
# limit for maxmemory so that there is some free RAM on the system for replica
# output buffers (but this is not needed if the policy is 'noeviction').
#
# maxmemory <bytes>
# 设置redis能使用的最大内存
maxmemory 512mb
# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
logfile ""
# 日志文件。默认为空,不记录日志,可以指定日志文件名
# logfile "redis.log"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 命令行操作
以下介绍的都是一些简单的常用命令,更多详细的还请参考官网。
# String
redis 127.0.0.1:6379>set strkey redis-demo
ok
redis 127.0.0.1:6379>get strkey
"redis-demo"
2
3
4
在以上实例中我们使用了 SET 和 GET 命令,键为 strkey。
# Hash
redis 127.0.0.1:6379>hset hashkey name tom
1
redis 127.0.0.1:6379>hget hashkey name
"tom"
2
3
4
以上例子我们使用了 hSET 和 hGET 命令,键为 hashkey。值为一个键值对-(name-tom)
# List
redis 127.0.0.1:6379>lpush listkey redis-test1
(integer) 1
redis 127.0.0.1:6379>lpush listkey redis-test22
(integer) 2
redis 127.0.0.1:6379>lrange listkey 0 10
1) "redis-test22"
2) "redis-test1"
2
3
4
5
6
7
上述例子中,使用lpush,存了一个List类型的数据,key为listkey
,值为一个数组
之后使用lrange key start stop
命令,获取列表指定范围内的元素。
# Set
redis 127.0.0.1:6379>sadd demo-key mysql
(integer) 1
redis 127.0.0.1:6379>sadd demo-key oracle
(integer) 1
redis 127.0.0.1:6379>sadd demo-key redis
(integer) 1
redis 127.0.0.1:6379>sadd demo-key mysql
(integer) 0
redis 127.0.0.1:6379>smembers demo-key
1) "mysql"
2) "redis"
3) "oracle"
2
3
4
5
6
7
8
9
10
11
12
上述例子中在set集合中添加了4次,但因为其中有重复的元素。因此demo-key
中只有三个元素。
# Sorted Set
redis 127.0.0.1:6379> zadd zkey 1 redis
(integer) 1
redis 127.0.0.1:6379> zadd zkey 2 oracle
(integer) 1
redis 127.0.0.1:6379> zadd zkey 3 mysql
(integer) 1
redis 127.0.0.1:6379> zadd zkey 3 mysql
(integer) 0
redis 127.0.0.1:6379> zadd zkey 4 mysql
(integer) 0
redis 127.0.0.1:6379> zrange zkey 0 10 withscores
1) "redis"
2) "1"
3) "oracle"
4) "2"
5) "mysql"
6) "4"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sorted set是有序集合,但是每个元素都会关联一个double类型的分数。
zadd key score1 member1[score2 member2]
-向有序集合添加一个或多个成员,或者更新已存在成员的分数
当然更多的时候,我们不会使用这种方式操作redis,而是在各种编程语言语言中集成的api进行使用。