Redis
redis的数据类型
字符串
get 查询对应键值
set 添加键值对
append 将给定的 追加到原值的末尾
strlen 获得值的长度
setnx 只有在 key 不存在时设置 key 的值
incr
将 key 中储存的数字值增1
只能对数字值操作,如果为空,新增值为1
decr
将 key 中储存的数字值减1
只能对数字值操作,如果为空,新增值为-1
incrby / decrby <步长>
将 key 中储存的数字值增减。自定义步长。
mset …
同时设置一个或多个 key-value对
mget …
同时获取一个或多个 value
msetnx …
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
getrange <起始位置> <结束位置>
获得值的范围,类似java中的substring
setrange <起始位置>
用 覆写 所储存的字符串值, 从<起始位置>开始。
setex <过期时间>
设置键值的同时,设置过期时间,单位秒。
getset
以新换旧,设置了新值同时获得旧值。
list
lpush/rpush …
从左边/右边插入一个或多个值。
lpop/rpop
从左边/右边吐出一个值。
值在键在,值光键亡。
rpoplpush
从列表右边吐出一个值,插到列表左边。
lrange
按照索引下标获得元素(从左到右)
lindex
按照索引下标获得元素(从左到右)
llen
获得列表长度
linsert before
在的后面插入 插入值
lrem
从左边删除n个value(从左到右)
set
sadd …
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
smembers
取出该集合的所有值。
sismember
判断集合是否为含有该值,有返回1,没有返回0
scard
返回该集合的元素个数。
srem …
删除集合中的某个元素。
spop
随机从该集合中吐出一个值。
srandmember
随机从该集合中取出n个值。
不会从集合中删除
sinter
返回两个集合的交集元素。
sunion
返回两个集合的并集元素。
sdiff
返回两个集合的差集元素。
hash
hset
给集合中的 键赋值
hget
从集合 取出 value
hmset …
批量设置hash的值
hexists key
查看哈希表 key 中,给定域 field 是否存在。
hkeys
列出该hash集合的所有field
hvals
列出该hash集合的所有value
hincrby
为哈希表 key 中的域 field 的值加上增量 increment
hsetnx
将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 .
zset
zadd …
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
zrange [WITHSCORES]
返回有序集 key 中,下标在 之间的元素
带WITHSCORES,可以让分数一起和值返回到结果集。
zrangebyscore key min max [withscores] [limit offset count]
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
zrevrangebyscore key max min [withscores] [limit offset count]
同上,改为从大到小排列。
zincrby
为元素的score加上增量
zrem
删除该集合下,指定值的元素
zcount
统计该集合,分数区间内的元素个数
zrank
返回该值在集合中的排名,从0开始。
事务
MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务相关的命令。事务可以一次执行多个命令, 并且带有以下两个重要的保证:
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
EXEC 命令负责触发并执行事务中的所有命令:
如果客户端在使用 MULTI 开启了一个事务之后,却因为断线而没有成功执行 EXEC ,那么事务中的所有命令都不会被执行。
另一方面,如果客户端成功在开启事务之后执行 EXEC ,那么事务中的所有命令都会被执行。
当使用 AOF 方式做持久化的时候, Redis 会使用单个 write(2) 命令将事务写入到磁盘中。
然而,如果 Redis 服务器因为某些原因被管理员杀死,或者遇上某种硬件故障,那么可能只有部分事务命令会被成功写入到磁盘中。
如果 Redis 在重新启动时发现 AOF 文件出了这样的问题,那么它会退出,并汇报一个错误。
使用redis-check-aof程序可以修复这一问题:它会移除 AOF 文件中不完整事务的信息,确保服务器可以顺利启动。
从 2.2 版本开始,Redis 还可以通过乐观锁(optimistic lock)实现 CAS (check-and-set)操作。
错误
最重要的是记住这样一条, 即使事务中有某条/某些命令执行失败了, 事务队列中的其他命令仍然会继续执行 —— Redis 不会停止执行事务中的命令。
乐观锁
watch 会在事务开始之前盯住 1 个或多个关键变量,当事务执行时,也就是服务器收到了 exec 指令要顺序执行缓存的事务队列时,Redis 会检查关键变量自 watch 之后,是否被修改了 (包括当前事务所在的客户端)。如果关键变量被人动过了,exec 指令就会返回 null 回复告知客户端事务执行失败,这个时候客户端一般会选择重试。
配置
daemonize no 守护进程
pidfile /var/run/redis.pid pid文件
port 6379 端口
tcp-backlog 511 高并发提速
bind 127.0.0.1 主机
timeout 300 闲置时间
tcp-keepalive 0 中断间隔
loglevel verbose 日志级别
databases 16 数据库数量
save 300 10:表示300秒内有10个更改就将数据同步到数据文件
rdbcompssion yes是否压缩数据
指定本地数据库文件名,默认值为dump.rdb:
dir ./ 指定数据库目录
slaveof slave服务
masterauth master密码
requirepass foobared redis连接密码
maxclients 128 同一时间最多客户端
maxmemory 最大内存限制
缓存过期策略
- volatile-lru:使用LRU算法移除key,只对设置了过期时间的key;
- allkeys-lru:使用LRU算法移除key,作用对象所有key;
- volatile-random:在过期集合key中随机移除key,只对设置了过期时间的key;
- allkeys-random:随机移除key,作用对象为所有key;
- volarile-ttl:移除哪些ttl值最小即最近要过期的key;
- noeviction:永不过期,针对写操作,会返回错误信息。
- maxmemory-policy noeviction
appendonly no 每次更新后是否日志
更更多请看原文
浙公网安备 33010602011771号