redis

安装redis

  • 下载解压redis 4.0.11, 进入解压后目录
  • make

配置redis 文件

	bind 127.0.0.0  #默认绑定ip 0.0.0.0 全网
	port 6379  #默认监听端口
	protected-mode #禁止外网访问, 需设置密码, 关闭之后外网可直接访问
	tcp-backlog 511  #tpc缓冲已经满了之后, 额外找地方缓存tpc请求的地方, 指定队列长度
	timeout  #客户端空闲多久关闭tcp连接
	tcp-keepalive 300  #默认等待多久关闭tcp连接
	
	daemonize 	yes
	supervised no #使用systemd时候的选项默认关闭
	pidfile /var/run/redis_6379.pid #保持默认即可
	databases 16 # 16是默认值, 数据库个数
	 loglevel notice #记录日志的级别
	 logfile "" #logfile路径默认为空, 表示不记录日志
	 syslog-enabled no #是否记录到系统日志, 默认否
	 syslog-ident redis #在系统日志里的提示
	 syslog-facility local 0 #系统日志所在的桶
	 
	 maxmemory 1gb #配置redis最大可使用内存
	 maxmemory-policy  #当内存使用到达上限时删除已存在值的策略
	 
	 requirepass foobared  #访问redis密码, 默认为空""
	 
	 //snapshotting RDB
	save 900 1	//900秒之外发生1次写操作, 保存快照
    save 300 10  // 300秒之外发生10次写操作, 保存快照
    save 60 10000	//60秒之外发生 10000此写操作, 保存快照 
	 stop-writes-on-bgsave-error  //保存快照时出错停止服务器
	 rdbcompression  //保存快照是否压缩, 压缩浪费cpu, 节省存储空间
	 dbfilename //指定文件名
	 dir  //指定文件路径
	//AOF 类似于mysql binlog 基于命令保存数据
	appendonly  //是否打开aof功能
	appendfilename  //指定文件名
	sppendfsync  // everysec 每秒刷一次缓存一次, always 每增加一条语句刷一次缓存, no 表示不刷新缓存, 等待操作系统自动刷新
	no-appendfsync-on-rewrite  //当子进程重写aof的时候需要占用大量磁盘资源, 定义子进程重新aof时是否禁用主进程调用系统fsync同步磁盘文件, 如果设置为yes是禁用主进程的aof文件同步, 主进程的aof写入会缓存在内存中, 提升性能, 但有可能导致数据丢失, 设置 no 表示主进程与子进程挣用硬盘资源,  不会丢失数据, 但是有可能造成主进程阻塞.
	auto-aof-rewrite-percentage 100  //上次重写完成之后aof会缩小到很小, 现在的aof文件大小是上次重写时的二倍时触发重写, 每次重写后的aof文件大小都差不多
    auto-aof-rewrite-min-size 64mb  //触发重写的最小文件大小
	slaveof <masterip> <masterport> //设置为其他服务器的从服务器
	masterauth // 如果主服务器开启了密码认证, 从服务器需要配置密码
	slave-serve-stale-data yes  //设置从服务器和主服务器断开连接后时候继续使用已有的陈旧数据
	slave-read-only yes  //从服务器只读
	repl-diskless-sync no //主从复制当一个新从服务器加入,  直接从内存复制数据过去, 而不是fork一个子进程保存快照然后传输rdb文件, 在硬盘性能差而网络性能好的时候可以使用.
	repl-diskless-sync-delay 5 //启用内存复制时的等待时间
	slave-priority  //指定slave优先级, 优先同步

	//sentinel 哨兵监控redis主服务器状态
	/usr/local/redis-4.0.11/src/redis-sentinel  /usr/local/redis-4.0.11/sentinel.conf  //启动哨兵, 指明哨兵程序的配置文件, 哨兵可以独立于redis进程运行
	//sentinel 配置文件
	bind
	port 
	sentinel monitor mymaster 127.0.0.1 6379 2  //监控的redis主服务器 ip,port, mymaster为起的名字, 最后的2表示投票odown, 客观宕机投票数量, 可以出现多次, 监控多个主从服务器
	sentinel parallel-syncs mymaster 1  // 当主服务器宕机, 一个新的从服务器变为主服务器时, 允许多少个其他从服务器同时连接主服务器, 向主服务器发起同步请求
	sentinel failover-timeout mymaster 180000 //故障转移, 把一个从服务器提升为主服务器的超时时间, 超时认定为转移失败.
	//sentinel 命令, 用redis客户端连接sentinel服务器ip,port执行sentinel命令
	sentinel masters // 列出所有主服务器
	sentinel slaves  //列出所有从服务器
	sentinel get-master-addr-by-name <master name> //获取某个命名的master ip 地址
	sentinel reset  // 重置sentinel所有状态
	sentinel failover  <master name> //手动发起故障转移

redis启动

/usr/local/redis-4.0.11/src/redis-server  /usr/local/redis-4.0.11/redis.conf

redis命令

	//服务器命令
	client setname  //设置客户端名称
	client getname  //获取客户端名称
	client list  //查看客户端列表
	info  //查看服务器状态
	config resetstat  //重置info中的信息
	config set parameter  //设置服务器参数
	config get parameter  //获取服务器参数
	config rewrite //把内存中的配置写到配置文件
	bgsave //执行后台进程把快照保存到磁盘上, 与客户端执行这条命令时异步
	save  //立即保存快照到磁盘, 同步请求
	lastsave //获取最后一次正确保存快照的时间
	help @server  //查看服务器设置帮助

	//发布订阅
	publish channel message  //向某频道发射消息
	subscribe channel channel  //订阅某频道
	help @pubsub //查看帮助

	
	//数据库通用命令
	ping #测试命令返回pang
	dbsize  #获取当前数据库key数量
	select number  # 选择数据库 number 可以是 1,2,3...16 数据库编号
	keys * #获取当前数据库所有键名, * 是通配符 也可以用 n* 代表 n开头所有键名,  n?代表 n后面跟任意单个字符的键名
    del key1 key2  # 删除某个键值
	flushall  #清空所有数据库的所有数据
	flushdb  #清空当前库的所有数据
	exists key  #key是否存在, 存在返回1, 不存在返回0
	move key  #把键值移动到其他库, number 为库编号
	type key  #查看key数据类型
	ttl key  #查看key有效期, -1 永不过期, -2 已经过期, 其余为读秒倒计时
	expire key number  #给已经存在的key 设置有效期以秒为单位
	shutdown  #关闭数据库

	//事务, redis事务类似于java的线程锁, 当一个线程执行一堆命令时不允许切换到其他线程, 当有语法错误时才会回滚.
	multi  #开启事务
	get key
	set key
	sadd key 
	....
	exec  #执行事务
	discard #取消事务
	
	watch key #监视某个key是否变动, (绑定当前线程)
	multi #开启事务
	set key
	get key
	....
	exec  #执行事务, 如果watch key 被其他线程改变则事务取消

	//redis乐观锁
	watch key1 #监视一个key的变动情况
	multi  #开启一个事务
	set key1 number 
	exec  #执行事务, 如果上面watch监视的key发生了变化, 那么事务执行被取消,discard
	unwatch #取消所有监视的key
	
	
	//Bitmap 
	setbit test 1 1  #给键test设置二进制位的值第一个1是偏移, 二进制的位数无上限redis会自动扩展, 从最左面的位数开始数, 偏移几位,  第二个1代表置1(这个值只能为1)
	getbit test 7 # 参数7代表偏移量, 获取键test第7位是0还是1 , 也就是一个字节.
	get test #直接获取test的值, test的值以字符串对待, 如果test存的是 1100001 对应十进制97, 字符串的十六进制存储形式就是"\x61", 获取到的值为"a";
	bitcount test 0 -1  #统计test这个键里二进制位为1的个数上面的1100001, 获取到的值为3, 0为起始偏移量, -1为结束偏移量, -1代表末尾.
	BITOP or storykey test test2 # or代表要做的操作是 '或' 操作也可以是and代表的是要做的操作是'与'操作, storykey 代表存储结果的key键名, test, test2是操作符两边的操作数. 
	
	//String 数据类型 单值key->value, 类似memcache
	set key value #设置键值数据	
	set key value EX number #设置键值的同时设置过期时间, number为秒数
	set key value EX number NX  #NX代表 not exists 如果键不存在则设置
	get key #获取键值数据
	append key string  #在key的值后面追加字符串 
	srtlen key  #计算key的值字符串长度
	incr key  #为纯数字字符串加一
	incrby key number  #为纯数字字符串加上number
	decr key  #为纯数字字符串减一
	decrby key number  #为纯数字字符串减去number
	getrange key  0  2 #取前三个字符, 0代表第一个字符
	getrange key 2 -1  #取从第三个字符到字符串结尾
	setrange key number value  #从第number位开始替换, value是几个字符就替换几位
	mset key1 value key2 value  #同时设置多个键值
	mget key1 key2  #同时获取多个键的值

	//队列类似于C语言的数组, 以下标存取值
	lpush key value1 value2  #从左侧向一个队列里增加数据, 首先增加value1 再增加value2 , 队列的顺序和增加的顺序正好相反
	rpush key value1 value2  #从右侧向一个队列增加数据,  首先增加 value1 再增加value2, 队列的顺序和增加的顺序一致.
	lrange key  0 -1 # 查看队列里所有值
	lpop key  #从队列的左侧弹出一个值, 队列里的这个值被删除
	rpop key  #从队列右侧弹出一个值, 队列里的这个值被删除
	lindex key number  #通过下标number从队列里获得一个元素
	llen key  #计算队列长队
	lrem key  number value # 从队列里删除value, value是通过值查找要删除的key value, number 指定在有相同值的情况下删除几个
	ltrim key number number  # 截取队列中的number to number之间的元素, 然后重新复制给key, 或者说当前队列只保留  number to number 之间的元素.
	rpoplpush  key1 key2  # 队列key1从右侧弹出一个元素, 把这个元素从右侧添加进key2 
	lset key number value  # 用下标改变队列某个元素的值
	linsert key before value value  #在队列的某个元素之前插入值, before value代表队列中已经存在的值,  最后的value代表插入的值.同样可以使用 after value插入元素.
	
	//集合
	sadd key value1 value2  #向一个集合添加元素, 如果元素已经存在则不允许添加返回0
	smembers key  #查看一个集合里所有元素
	sismember key value  #查看一个集合里是否存在某个元素 
	scard key  #获取集合元素个数
	srem key value  #从集合中移除某个元素
	srandmember key number  #从集合中随机取number个元素但集合中的元素不消失
	spop key  #从集合中随机弹出一个元素, 集合中的元素会消失
	smove key1 key2 value #把集合1中的value 移动到集合2中
	sdiff key1 key2 key3 #求集合差集, 返回只在key1中存在, 而不在后面任何一个集合中存在的元素
	sinter key1 key2 key3 #求集合交集, 第一个集合中的元素, 在后面所有集合中都存在
	sunion key1 key2 key3  #求集合中的并集, 集合相加去重
	
	//hashset 哈希集合, 类似于php的键值数组
	hset key name1 value1  #设置哈西集合中的某个键值
	hsetnx key name1 value1 #如果该键不存在, 设置哈希集合中的某个键值
	hget key name1  #获取哈希集合中的某个键值
	hmset key name1 value1 name2 value2 #设置哈希集合中的多个键值
	hmget key name1 name2  #获取哈希集合中的多个键的值
	hgetall key  #获取哈希集合所有键和值
	hdel key name  #删除哈希集合中某个键值
	hlen key  #计算哈希集合元素个数
	hexists key  #测试哈希集合中某个元素是否存在
	hkeys key  #获取一个哈希集合中所有的键
	hvals key  #获取一个哈希集合中所有的值
	hincrby key name number #给哈希集合中的某个纯数字元素加number
	hincrbyfloat key name number #给哈希集合中的某个元素加上小数

// sorted_set 有序的集合
zadd key score1 value1 score2 value2 score2 value3 score2 value4  #向一个有序集合里添加元素 score为分数, 一个分数下可以有多个值 比如60分有三个用户user1, user2,user3
zrange key number number   #按分数的排序显示分数下的value number number表示从第几个开始显示, 共显示几个. 可以 0 -1 显示全部
zrevrange key number number #同上, 是反向排序并显示 rev 代表reverse
zrange key number number withscores  #同上, 附加分数
zrangebyscore key number number  #获得两个分数之间的所有值, number代表分数
zrevrangebyscore key number number  #同上, 只是反向排序, 给定number时也是从大到小反向给
zrangebyscore key number number withscore #同上, 显示时附加分数
zrangebyscore key number number limit number number #同上, 同mysql分页
zrem key value  #删除有序集合中的元素, 连同所属分数一起删除
zcard key  #统计一个有序集合里有多少value 和分数无关
zcount key number number  #统计有序集合中两个分数之间的value个数, number代表分数
zrank key value  #获取一个value在有序集合中的位置, 返回数字下标
zrevrank key value  #同上, 但是倒序, 并获取位置 re代表reverse
zscore key value  #获取一个value在有序集合中所属分数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值