码迷,mamicode.com
首页 > 其他好文 > 详细

redis

时间:2016-07-11 01:19:40      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:redis

redis 全面介绍:数据保存在磁盘,支持数据的持久化,支持多种数据格式:
redis 支持的两种文件格式:
持久化:
rdb全量数据:把内存中的数据生成快照写入磁盘。
aof增量请求:把内存中的数据序列化为操作请求 恢复度更高 没读一次都写入内存
redis 存储分为:内存 磁盘 log文件


redis的安装方式:
1. wget https://codeload.github.com/antirez/redis/tar.gz/2.8.21
tar xvf 2.8.21
make
如遇到错误
cd /deps
make 错误的代码数据(make hiredis lua jemalloc)返回目录make  下一步如出现同样的错误继续make+错误命令
make prefix=/usr/local/prefix install


配置文件脚本:
mkdir /usr/local/redis/etc
wget http://www.apelearn.com/study_v2/.redis_conf -O /usr/local/redis/etc/redis.conf 2>/dev/null
启动文件脚本:


wget http://www.apelearn.com/study_v2/.redis_init -O /etc/init.d/redis 2>/dev/null
chmod 755 /etc/init.d/redis   chkconfig --add redis chkconfig redis on
2. 配置
mkdir /usr/local/redis/etc/
vim  /usr/local/redis/etc/redis.conf  //写入如下内容
daemonize yes  是否以后台daemon方式运行
pidfile /usr/local/redis/var/redis.pid  pid文件位置
port 6379  监听的端口号
timeout 300  请求超时时间
loglevel debug  log信息级别
logfile /usr/local/redis/var/redis.log   log文件位置
databases 16 开启数据库的数量
save 900 1   保存快照的频率,第一个*表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
save 300 10
save 60 10000
rdbcompression yes   是否使用压缩
dbfilename dump.rdb   数据快照文件名(只是文件名,不包括目录)
dir /usr/local/redis/var/  数据快照的保存目录(这个是目录)
appendonly no  是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率
appendfsync always 如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)


mkdir /usr/local/redis/var/
chmod 777 /usr/local/redis/var/
启动redis的命令是:
/usr/local/redis/bin/redis-server   /usr/local/redis/etc/redis.conf


我们也可以编写一个redis启动脚本。
vi /etc/init.d/redis   //加入如下内容:
#!/bin/sh
 #
 # redis        init file for starting up the redis daemon
 #
 # chkconfig:   - 20 80
 # description: Starts and stops the redis daemon.


 # Source function library.
 . /etc/rc.d/init.d/functions


 name="redis-server"
 basedir="/usr/local/redis"
 exec="$basedir/bin/$name"
 pidfile="$basedir/var/redis.pid"
 REDIS_CONFIG="$basedir/etc/redis.conf"


 [ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis


 lockfile=/var/lock/subsys/redis


 start() {
     [ -f $REDIS_CONFIG ] || exit 6
     [ -x $exec ] || exit 5
     echo -n $"Starting $name: "
     daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG"
     retval=$?
     echo
     [ $retval -eq 0 ] && touch $lockfile
     return $retval
 }


 stop() {
     echo -n $"Stopping $name: "
     killproc -p $pidfile $name
     retval=$?
     echo
     [ $retval -eq 0 ] && rm -f $lockfile
     return $retval
 }


 restart() {
     stop
     start
 }


 reload() {
     false
 }


 rh_status() {
     status -p $pidfile $name
 }


 rh_status_q() {
     rh_status >/dev/null 2>&1
 }



 case "$1" in
     start)
         rh_status_q && exit 0
         $1
         ;;
     stop)
         rh_status_q || exit 0
         $1
         ;;
     restart)
         $1
         ;;
     reload)
         rh_status_q || exit 7
         $1
         ;;
     force-reload)
         force_reload
         ;;
     status)
         rh_status
         ;;
     condrestart|try-restart)
         rh_status_q || exit 0
         restart
         ;;
     *)
         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}"
         exit 2
 esac
 exit $?


 ############到此结束
 因为脚本启动时以redis用户启动的,所以需要增加redis用户
 useradd -s /sbin/nologin redis
 mkdir /usr/local/redis/var
 chmod 777 /usr/local/redis/var
 chmod 755 /etc/init.d/redis



redis 常用的5中数据类型结构
string:字符串
/usr/local/redis/bin/redis-cli
set key1 aaa   mset key1 aaa key2 bbb key3 ccc
get key1       mget key1 key2 key3
exists name 有name值这返回1 无返回0
del key1 删除一个key 有返回1  无则返回0
expire key 100  设置key的过期时间
persist key 取消key的过期时间
randomkey 随机返回一个key
type key  返回key的键的类型
ttl key  key不存在返回-2  存在无剩余时间返回-1
select 0 选择当前数据库 共 0-15 默认是0 数据库
move age 1 把键值age移动到1 数据库
keys * 查看所有的键值
keys my* 模糊查询所有的键值
rename oldname  newname 重命名
incr key(数字) 把字母输出加一
decr key (数字)  把字母输出减一


http://pan.baidu.com/s/1sl89ZBn 密码:j4jz




list:列表
rpush  list       1 2 3 4   根据取值方向确定
lpush  list  4 3 2 1   根据取值方向确定
rpop    从右开始取值 取出的值会流失
lpop    从左开始取值 取出的值会流失
lrange   list 0 -1     显示所有设定的值
linsert  list before 数值 3  //在数值的前面插入一个元素为3


lset     lista 4 bbb  //把第5个元素修改为bbb


lindex   lista 0  //查看第1个元素


lindex   lista 3  //查看第4个元素


llen     lista  //查看链表中有几个元素



sorted list:集合并排序
zadd set2 数值  参数
zrange 名称 0 -1 显示所有值(正序)
zrange 名称 0 -1 withscores (正序并显示参数)
zrevrange 名称 0 -1 显示所有值(反序)
zrem 名称 参数   删除指定的元素
zrank 名称  第几个数   //返回元素的索引值,索引值从0开始,按score正向排序
zrevrank 名称 第几个数  //返回元素的索引值,索引值从0开始,按score反向排序
zcard zseta  //返回集合中所有元素的个数


zcount  zseta 1 10  //  返回分值范围1-10的元素个数
zrangebyscore  zseta 1 10 // 返回分值范围1-10的元素


zremrangebyrank zseta  0 2  //删除索引范围0-2的元素,按score正向排序


zremrangebyscore zseta  1 10 //删除分值范围1-10的元素





set:集合不进行排序
sadd  set  值      
smembers 取出所有数值
spop 名称 随机取出一个元素删除
srem 名称  数值  删除元素
sdiff 名称1 名称2 求名称的差集元素
sdiffstore 名称1 名称2 名称3 求差集并存储
sinter 名称1 名称2 求交集
sinterstore 名称1 名称2 求交集并存储
sunion 名称1 名称2 求并集
sunionstore 名称1 名称2 求并集并存储
sismember 名称1 元素 判断一个元素属于名称这个集合
srandmember 名称 随机取出一个元素,但不删除



hash:本身具有的一些列数值集合。人(年龄 性别)
hset hash 名称  数值
hgetall 名称
hget hash 名称
hmset user2  name aming age 30 job it    //批量建立键值对


hmget user2


hmget user2 name age  job
hdel user2 job   //删除指定filed


hkeys user2   //打印所有的key


hvals user2  //打印所有的values


hlen user2  //查看hash有几个filed




redis 配置详解


通用配置
config get * 查看所有的配置项
daemonize yes/no redis以后台或前台方式运行
pidfile /path/to/redis.pid  指定pid文件存放位置  默认在/var/run/redis.pid
bind ip 绑定地址 可以多个用空格隔开
port 6397 指定监听端口
unixsocket /tmp/redis.sock
unixsocketperm 755 当监听socket时可以指定权限为755
timeout 0 设置客服端想服务端的请求超时时间  0表示永不关闭
tcp-keepalive 0  保活连接 客服端和服务端的三次握手
loglevel notice  日志级别   debug verbose notice warning
syslog-ident redis  如果希望日志打印到syslog中  通过syslog-enabled 来控制,和指定syslog中的日志标志。
syslog-facility local0  指定syslog的设备,可以是user或者local0-local7
databases 16 设定数据库的总数量,select n 选定数据库


快照配置rdb
save 900 1
save 300 10
save 60 10000
save “”
stop-writes-on-bgsave-error yes 在磁盘写入出错的情况下 redis停止写的操作
rdbcompression yes 是否要压缩
rdbchecksum yes 是否进行数据校验
dbfilename dump.rdb 定义快照文件的名字
dis ./ 定义快照文件存储路径


redis安全相关配置
requirepass 设定登陆密码     redis-cli -a 密码
masterauth 主服务器的秘密(redis主从配置)
slaveof 主服务器ip 6397  从服务器上配置文件中添加。
rename-command config  ab  将配置命令改为ab 可以避免误操作,但为了aof的持久化,建议不开启此功能
rename-commamd config “” 禁掉config命令
限制相关配置
maxclients 限制客服端的最大连接数
maxmemory 设定最大内存使用数
maxmemory-policy volatile-lru 设定内存移除规则
maxmemory-samples 3


AOF持久化相关配置
appendonly no  #如果是no,则开启aof持久化
appendfilename “appendonly.aof” # 指定aof文件名字
appendfsync everysec #指定fsync()调用模式,有三种no(不调用fsync),always(每次写都会调用fsync),everysec(每秒钟调用一次fsync)。第一种最快,第二种数据最安全,但性能会差一些,第三种为这种方案,默认为第三种。
no-appendfsync-on-rewrite no  # 设置yes,可避免当写入量非常大时的磁盘io阻塞
auto-aof-rewrite-percentage 10 #规定什么情况下会触发aof重写。该值为一个比例,10表示当aof文件增幅达到10%时则会触发重写机制。
uto-aof-rewrite-min-size 64mb #重写会有一个条件,就是不能低于64Mb


慢日志的相关配置
slowlog-log-slower-than 10000 #慢于10000ms则记录日志


slowlog-max-len 128  #日志长度






redis主从其他相关配置
两台服务器 master   slave 分别按照redis
master配置文件不用动   slave配置文件加上:slaveof +主配置ip:端口   masterauth+ 主password  如果主上设置了密码要加上这一行。
slave-read-only yes  //让从只读


repl-ping-slave-period 10  //设置slave向master发起ping的频率,每10s发起一次


repl-timeout 60 //设置slave ping不通master多少s后就超时


repl-disable-tcp-nodelay no //是否开启tcp_nodelay,开启后将会使用更少的带宽,但会有延迟,所以建议关闭


repl-backlog-size 1mb //同步队列的长度,backuplog是master的一个缓冲区,主从断开后,master会先把数据写到缓冲区,slave再次连接会从缓冲区中同步数据


repl-backlog-ttl 3600  //主从断开后,缓冲区的有效期,默认1小时


slave-priority 100 //多个slave是可以设置优先级的,数值越小优先级越高,应用于集群中,支持slave切换为master,优先级最高的才会切换


min-slaves-to-write 3  //和下面的一起使用,它的意思是master发现有超过3个slave的延迟高于10s,那么master就会暂时停止写操作。这两个数值任何一个为0,则关闭该功能,默认第一数值是0。


min-slaves-max-lag 10


dbsize  //返回当前数据库中key的数目


info  //返回redis数据库状态信息


flushdb //清空当前数据库中所有的键


flushall    //清空所有数据库中的所有的key


本文出自 “10846468” 博客,谢绝转载!

redis

标签:redis

原文地址:http://10856468.blog.51cto.com/10846468/1818600

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!