首先编译

tar -zxvf redis-3.0.3.tar.gz
cd redis-3.0.3
make
cd src
make install


make完成后,有产生可执行文件(绿色的)
                     redis-server:redis服务器的启动程序
                     redis-cli:redis命令行工具,也可为客户端
                     redis-benchmark:redis性能测试工具(读写)
                     redis-stat:redis状态检测工具(状态参数延迟)


移动文件,便于管理

mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc

cp /opt/yuanhai/redis-3.0.3/redis.conf   /usr/local/redis/etc

#并将src目录下的7个命令文件(绿色的),移动到/usr/local/redis/bin/ 
cp mkreleasehdr.sh  redis-sentinel  redis-server  redis-trib.rb    redis-benchmark  redis-check-dump redis-cli /usr/local/redis/bin


修改redis.conf 配置监听端口port 6379改为 port 6378

指定配置文件启动redis

./redis-server /usr/local/redis/etc/redis.conf


默认是前台运行

redis的后台启动并运行需要通过配置文件中的参数设置。

Redis的配置文件中有哪些配置呢?

daemonize 如果需要在后台运行,把该项改为yes

pidfile  当redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis服务时,需要指定不同的pid文件和端口

bind 绑定ip,设置后只接受来自该ip的请求

port 监听端口,默认是6379

loglevel 分为4个等级:debug verbose notice warning

logfile 用于配置log文件地址

databases 设置数据库个数,默认使用的数据库为0

save 设置redis进行数据库镜像的频率。

rdbcompression 在进行镜像备份时,是否进行压缩

dbfilename 镜像备份文件的文件名

Dir 数据库镜像备份的文件放置路径

Slaveof 设置数据库为其他数据库的从数据库

Masterauth 主数据库连接需要的密码验证

Requriepass 设置 登陆时需要使用密码

Maxclients 限制同时使用的客户数量

Maxmemory 设置redis能够使用的最大内存

Appendonly 开启append only模式

Appendfsync 设置对appendonly.aof文件同步的频率(对数据进行备份的第二种方式)

vm-enabled 是否开启虚拟内存支持   (vm开头的参数都是配置虚拟内存的)

vm-swap-file 设置虚拟内存的交换文件路径

vm-max-memory 设置redis使用的最大物理内存大小

vm-page-size 设置虚拟内存的页大小

vm-pages 设置交换文件的总的page数量

vm-max-threads 设置VM IO同时使用的线程数量

Glueoutputbuf 把小的输出缓存存放在一起

hash-max-zipmap-entries 设置hash的临界值

Activerehashing 重新hash



一、string 类型(redis的string可以包含任何数据,比如jpg图片或者序列化的对象)

set name lijie

setnx name lijie 如果key已经存在,返回0,不更新数据,nx是not exist的意思

get name 取出数据

setex 指定键的有效期

setex haicolor 10 red 

setrange email 6 li-jie.me 设置子字符串从第6位开始替换

mset/mget 批量设置 OK表示所有值都被设置了,失败返回零表示没有任何值被设置

mset key1 lijie1 key2 lijie2
msetnx跟setnx类似

getset 设置key的值并且返回key的旧值

getrange获取子字符串(前6个字符)

getrange email 0 5

incr/decr 递增/递减(步长为1)

incr key1

incrby/decrby 已指定的步长递增或递减,key不存在时设置key,并认为原来的value为0

incrby key1 6

incrby key1 -6

append 给指定key的value追加字符串,返回新字符串长度

strlen 查看key的value长度

二、hash类型(映射表,特别适用于存储对象)
hset user:001 name lijie

hget user:001 name

hsetnx user:001 name lijie

hmset 同时设置hash的多个字段

hmset user:002 name lijie age 20 sex 1

hincrby user:003 age 5



hexists判断hash表里某个字段是否存在

hlen代表hash表里所有字段的数量

hdel删除某个字段

hdel user:003 age

hkeys返回hash表的所有field

hvals返回hash表的所有value

同时返回hash表中的全部字段和值

hgetall user:003

三、list类型(链表)

lpush mylist "world"//在key对应的list头部添加元素

lpush mylist "hello"

lrange mylist 0 -1  //从头取到尾

rpush  向尾部压入元素

//在特定位置前后添加元素
linsert mylist before "world"  "middle" 

lset //将指定下标的元素替换掉

lset mylist 0 "change"

lrem //从list中删除n个和value相同的元素,返回删除掉的个数

n<0从尾部删除,n=0全部删除

lrem mylist 3 "one"

保留指定范围的元素,两端都删除
ltrim mylist 1 -1

lpop从头弹出一个元素

rpop从尾弹出一个元素

rpoplpush//从第一个list的尾部移除元素并添加到第二个list的头部

rpoplpush list5 list6

返回指定索引的元素
lindex mylist 0

llen 返回指定list的长度

四、set集合(无序集合,交集、并集、差集sns中好友推荐,共同好友)

添加元素

sadd myset hello

查看元素

smembers myset

删除集合中的某个元素

srem myset hello

spop随机弹出删除元素

spop myset

sdiff两个集合取差集

sdiff myset1 myset2

sdiffstore将返回的差集存到另一个集合里(myset3)

sdiffstore myset3 myset1 myset2 

sinter 返回两个集合的交集

sinterstore  将返回的交集存到另一个集合里

取并集

sunion myset1 myset2

取并集并且存储

sunionstore myset3 myset1 myset2

将一个集合中的元素移动到第二个集合

smove myset1 myset2 three

scard 查看集合中元素个数

scard myset

判断某元素是否为集合的元素

sismember myset one//判断one元素是不是集合myset中的元素

srandmember 随机返回集合中一个元素但不删除


五、sorted set(有序集合,可以理解为有两列的mysql表,加了个顺序字段)

zadd zset1 1 one

zadd zset1 2 two

zrange zset1 0 -1

zrange zset1 0 -1 withscores //带顺序号查看

zrem zset1 one//删除有序集合中元素

zincrby  zset1  2 two 对顺序号增加

zrank zset1 two//返回元素的索引值,升序排序

zrevrank zset1  two//返回元素的索引值,降序排序

zrevrange zset1 0 -1 withscores 

zrangebyscore zset1 2 4 withscores//返回score在给定区间的元素(2-4)

zcount zset1 2 4//返回集合中socre在给定区间的数量

zcard zset1 //返回集合中所有元素的个数

zremrangebyrank zset1 2 3//删除索引在指定区间的元素

zremrangebyscore zset1 2 5//删除顺序在指定区间的元素

六、redis常用命令

1.键值相关命令

keys * 返回所有键

exists key1 判断某个key是否存在

del key1 删除某键

expire key1 10  设置过期时间10s

ttl key1 获取key的有效时长,直到-1说明此值已过期

select 0 选择当前数据库(默认总共16个数据库)  

move key1 1 移动到1数据库

persist key1 移除指定key的过期时间

randomkey  随机返回一个key

rename key1 key_new 重命名

type 返回键的数据类型

2.服务器相关命令

直接输入ping 测试连接是否存活,连接正常返回PONG

quit 退出客户端

dbsize返回数据库中键的数量

info 获取redis服务器的信息

config get * 返回所有配置选项

flushdb 删除当前数据库中的所有key

flushall 删除所有数据库中的所有key

3.高级特性
(1) 安全性

requirepass  yuanhai//配置文件中设置密码


auth yuanhai 客户端输入密码进行连接或者客户端启动时 redis-cli -a yuanhai


(2)主从复制
只需在slave的配置文件中加入以下配置:

slaveof 192.168.1.1 6379 #指定master的ip和端口

masterauth yuanhai #这是master的密码



(3)事务处理

multi命令进入事务上下文,该命令后续的命令不会立即执行,而是先放到一个队列中,当执行exec时,redis会顺序执行队列中的所有命令

multi

set age 10 

set age 20 

exec

discard  //取消事务,事务回滚


redis乐观锁实例

watch key //监控某个键是否被修改过,如果修改过当前的事务不允许执行
相当于加了个乐观锁
exec discard unwatch 都会清除连接中的所有监视

(4)持久化机制
一、snapshotting 快照默认方式,存数据,默认文件名dump.rdb

save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10
save 60 10000
dbfilename dump.rdb
快照存在丢失数据的缺点

二、append-only  aof方式,存操作命令

appendonly yes//启用aof持久化方式
#fsync函数强制OS写入到磁盘的时机
appendfsync always//收到命令就立即写入磁盘,最慢,但是保证完全的持久化

appendfsync everysec//每秒钟写入磁盘一次,在性能和持久化方面做了很好的折衷

appendfsync no//完全依赖OS,性能最好,持久化没保证

(6)发布及订阅消息(解除耦合,可用于聊天系统)

subscribe tv1 tv2//订阅两个通道的消息

publish tv1 lijie//tv1发布消息


(7)虚拟内存(vm)

vm-enabled yes #开启vm功能

vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径

vm-max-memory 100000 #redis使用的最大内存上限

vm-page-size 32 #每个页面的大小32字节

vm-pages 134217728  #最多使用多少页面

vm-max-threads 4 #用于执行value对象换入的工作线程数量




参考文章:


redis多数据库:databases 设置数据库个数

http://www.ttlsa.com/redis/redis-database/

 

redis安装

http://www.open-open.com/lib/view/open1426468117367.html

redis配置文件解析

http://www.cnblogs.com/huangjacky/p/3700473.html

http://www.2cto.com/database/201307/225113.html

 

jedis代码操作;

http://my.oschina.net/lilw/blog/169635

http://www.cnblogs.com/liuling/p/2014-4-19-04.html


redis集群搭建

http://www.redis.cn/topics/cluster-tutorial.html

  

redis客户端缓冲区和主从复制

http://blog.csdn.net/jiangguilong2000/article/details/38436941