首先编译
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
本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1692231