Redis
数据类型
Redis最为常用的数据类型主要有以下五种:
String、Hash、List、Set、Sorted set
在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的:
首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:type 代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存 储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串 的,当然前提是这个字符串本身可以用数值表示,比如:”123” “456”这样的字符串。
下面我们先来逐一的分析下这五种数据类型的使用和内部实现方式:
String
常用命令:
set,get,decr,incr,mget 等。
实现方式:
String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
Hash
常用命令:
hget,hset,hgetall 等。
List
常用命令:
lpush,rpush,lpop,rpop,lrange等。
实现方式:
Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
Set
常用命令:
sadd,spop,smembers,sunion 等。
实现方式:
set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
Sorted Set
常用命令:
zadd,zrange,zrem,zcard等
实现方式:
Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的 是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
Redis的安装与启动
官网下载:http://Redis.io/download
安装
tar zxvf redis-2.8.9.tar.gz
cd redis-2.8.9
直接make 编译
make
可使用root用户执行make install
,将可执行文件拷贝到/usr/local/bin目录下。
Part I. 直接启动
加上&
号使redis以后台程序方式运行
./redis-server &
检测后台进程是否存在
ps -ef |grep redis
检测6379端口是否在监听
netstat -lntp | grep 6379
使用redis-cli
客户端检测连接是否正常
./redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set key “hello world”
OK
127.0.0.1:6379> get key
“hello world”
停止使用客户端
redis-cli shutdown
因为Redis可以妥善处理SIGTERM信号,所以直接kill -9也是可以的
kill -9 PID
Part II. 通过指定配置文件启动
配置文件
可为redis服务启动指定配置文件,配置文件 redis.conf 在Redis根目录下。
修改daemonize为yes,即默认以后台程序方式运行。
daemonize no
可修改默认监听端口
port 6379
修改生成默认日志文件位置
logfile “/home/redis/logs/redis.log”
配置持久化文件存放位置
dir /home/redis/data/redisData
启动时指定配置文件
redis-server ./redis.conf
如果更改了端口,使用redis-cli
客户端连接时,也需要指定端口,例如:
redis-cli -p 6380
其他方式的启停同直接启动一样。
Part III. 使用Redis启动脚本设置开机自启动
启动脚本
推荐在生产环境中使用启动脚本方式启动redis服务。
启动脚本 redis_init_script 位于位于Redis的 /utils/ 目录下。
redis习惯性用监听的端口名作为配置文件等命名
redis服务器监听的端口
REDISPORT=6379
服务端所处位置,在make install后默认存放与/usr/local/bin/redis-server
,如果未make install则需要修改该路径,下同。
EXEC=/usr/local/bin/redis-server
客户端位置
CLIEXEC=/usr/local/bin/redis-cli
Redis的PID文件位置
PIDFILE=/var/run/redis_${REDISPORT}.pid
配置文件位置,需要修改
CONF=”/etc/redis/${REDISPORT}.conf”
配置环境
1. 根据启动脚本要求,将修改好的配置文件以端口为名复制一份到指定目录。
需使用root用户。
mkdir /etc/redis
cp redis.conf /etc/redis/6379.conf
- 将启动脚本复制到/etc/init.d目录下,本例将启动脚本命名为redisd(通常都以d结尾表示是后台自启动服务)。
cp redis_init_script /etc/init.d/redisd
- 设置为开机自启动
此处直接配置开启自启动
chkconfig redisd on
将报错误:
service redisd does not support chkconfig
参照 此篇文章 ,在启动脚本开头添加如下两行注释以修改其运行级别:
/bin/sh
chkconfig: 2345 90 10
description: Redis is a persistent key-value database
再设置即可成功。
设置为开机自启动服务器
chkconfig redisd on
打开服务
service redisd start
关闭服务
service redisd stop