自己边学边记录的,写在了excel里,这里直接沾出来,懒得美化加工了。
基础篇 | ||
---|---|---|
命令 | 说明 | redis命令是原子性的 |
键值类型数据 | redis范围都是左开右开 | |
set | 设置值,如set s 1 | 范围若左0,右-1为全部 |
get | 获取值,如get s | 任意key的值都可用type判断类型 |
incr | 让某个数值类型的key自增1,如incr s | |
del | 删除某个key,多key空格间隔,如del s b | |
keys | 查找某个(些)key,如keys s | |
select | 选择数据库,默认0,如:select 2 | |
incrby | 按给定的数字递增,如incrby s 6 | |
decr | 递减1,如,如decr s | |
decrby | 按给定的给定参数递减,如decrby s 5 | |
incrbyfloat | 按给定的参数进行浮点数递增,如incrbyfloat s 2.7 | |
append | 向键值的末尾追加value并返回追加后的长度,若不存则则新建,如append s a | |
strlen | 获取字符串的长度,如strlen s | |
mget | 同时获取多个key的值,如mget bat ss | |
mset | 同时设置多个key,如mset key1 val1 key2 val2 | |
getbit | 获取字符串类型键指定位置的二进制位的值 | |
setbit | 设置字符串类型键指定位置的二进制位的值 | |
bitcount | 获取字符串键值是1的二进制位个数 | |
bitop | 对多个字符串类型键进行位操作 | |
散列数据 | ||
hset | 散列数据,如hset obj1 id 1 | |
hget | 散列数据,如hget obj1 id | |
hmset | 批量设置散列数据,如hmset obj1 id 1 name 张安 age 18 | |
hmget | 批量获取散列数据,如hmget obj1 id name age | |
hmgetall | 获取散列数据全部属性,如hgetall obj1 | |
hexists | 判断散列数据某列是否存在,如hexists obj2 age | |
hsetnx | 设置散列数据某列值,先判断,若已存在不进行任何操作,若不存在插入数据,如hsetnx obj2 age 23 | |
hincrby | 增加某列数据,如hincrby obj2 age 1 | |
hdel | 删除某列属性,如hdel obj2 age | |
hkeys | 获取散列数据的字段名集合,如hkeys obj2 | |
hvals | 获取散列数据的值集合,如hvals obj2 | |
hlen | 获取字段数量,如hlen obj2 | |
列表类型 | ||
lpush | 向列表左边增加元素,返回添加后的长度,多个以空格隔开,如lpush num 1 | |
rpush | 向列表右边增加元素,返回添加后的长度,多个以空格隔开,如rpush num 1 | |
lpop | 向左边弹出第一个数据,如lpop num | |
rpop | 向右边弹出第一个数据,如rpop num | |
llen | 获取列表元素的个数,如llen num | |
lrange | 截取,正数从左边开始,负数从右边开始,如lrange num 1 3 | |
lrem | 删除前count值为value的元素,count>0从左边删,county<0,从右边删,count=0,全部删除如,lrem num count value | |
lindex | 返回指定index位置的元素,>=0左边开始,<0右边开始,如lindex num 0 | |
lset | 替换指定index位置的元素,如,lset num 0 1 | |
ltrim | 删除指定范围外的所有数据,如ltrim num 1 3 | |
linsert | 向某个元素前(后)插入元素,如,linsert num after 1 3、linsert num before 1 3、 | |
rpoplpush | 从一个列表右边弹出一个数据,插入到另一个列表的左边,如rpoplpush num num2 | |
集合类型 | ||
sadd | 添加集合元素,如:sadd set a | |
srem | 删除元素,如:srem set a | |
smembers | 获取集合所有元素,如smembers set | |
sismember | 判断元素是否在集合中,如sismember set a | |
sdiff | 集合差集(相对于第一个参数的差集),如sdiff set set2 | |
sinter | 集合交集,如sinter set set2 | |
sunion | 集合并集,如sunion set set2 | |
scard | 获取集合中元素个数,如:scard set | |
sdiffstore | 对集合进行差集运算并将结果存储(其他如sinterstore、suinonstore),如: | |
srandmember | 随机获得集合中的元素,,若后面跟上数值,如果数值大于0,则取数值个不重复的元素,若为负数,则取数值个元素,但可能是重复的,如:srandmember set | |
spop | 从集合中随机弹出一个元素,如spop set | |
有序集合类型 | ||
zadd | 添加元素,如zadd array 89 tom | |
zscore | 获取元素的分数,如:zscore array tom | |
zrange | 按分数从小到大获取在某个范围的元素列表,下标从0开始,-1代表最后一个元素,如zrang array 0 10 若要同时获取分数,在命令最后加上withscores | |
zrevrange | 按分数从大到小获取在某个范围的元素列表,下标从0开始,-1代表最后一个元素,如zrang array 0 10 若要同时获取分数,在命令最后加上withscores | |
zrangebyscore | 获取指定分数范围内从小到大顺序的元素,如zrangebyscore array 50 90,若要同时获取分数,在命令最后加上withscores,若要分页查询,在命令后加limit,用法同sql中的limit一样 | |
zrevrangebyscore | 获取指定分数范围内从大到小顺序的元素,如zrangebyscore array 50 90,若要同时获取分数,在命令最后加上withscores,若要分页查询,在命令后加limit,用法同sql中的limit一样,此命令参数第一个参数是最大值,第二个参数是最小值 | |
zincrby | 增加某个元素的分数(在原基础上增加),若值为负数则是减分,如:zincrby array 70 tom | |
zcard | 获取集合中元素个数,如:zcard array | |
zcount | 获取指定分数范围内的元素个数,如:zcount array 50 90 | |
zrem | 删除一个或者多个元素,zrem array tom | |
zremrangebyrank | 按照排名范围(从小到大)删除元素,如:zremrangebyrank array 0 2 | |
zremrangebyscore | 按照分数范围删除元素,如:zremrangebyscore array 4 5 | |
zrank | 获得元素的排名,如:zrank array tom | |
zinterstore | 计算交集并将结果存储到一个新的key里,如:zinterstore newkey 2 array1 array2,2是取多少个key,对新集合中每个元素对比原来的值是根据参数aggregate判断的(sum、max、min),另外可设置集合的权重weights 1 0.1;同样的命令还有差集,并集 | |
进阶篇 | ||
事物 | 基本命令: multi命令开头,正常一组命令结束后输入exec提交事物 错误处理: 1、2.6.5之前会处理正确的命令,忽略错误的命令,之后只要有错误命令不管是对还是错都忽略 2、运行错误不会忽略也不会回滚(redis不支持回滚) watch: 监控一个或多个key,一旦有一个key或者多个key的值被修改,之后的事物就不会执行。取消监控就是unwatch,另外事物的exec会取消掉对所有键的监控 | |
时效 | 基本命令: expire key seconds 设置以秒为单位的时效 expire key millions 设置以毫秒为单位的时效 ttl key 查看key的有效期还有多长时间单位秒 persist key 取消key的时效限制 注意: 同一个key第一次赋值的时候设置时效,第二次set的时候会清楚时效设置 | |
缓存 | 当用redis做缓存时: 1、修改配置文件maxmemory属性,以防内存溢出,当达到maxmemory时会按属性maxmemory-policy指定的策略进行淘汰数据。 maxmemory-policy: volatile-lru:针对设置时效的数据,删除最近最少使用的key allkeys-lru:删除最近最少使用的key volatile-random:针对设置时效的数据,随机删除key allkeys-random:随机删除key volatile-ttl:删除过期时间最近的一个键 noeviction:不删除键,只返回错误 注意: 不管那种策略,redis都是随机从所有数据里抽取三个key,然后比较再删除,并不是针对所有的key,这个3是默认值,可在配置文件中的maxmemory-samples属性配置 | |
排序 | 基本命令: sort key key可以是集合类型也可以是列表和有序集合 sort key by key*->列名 desc/asc 按照key*键中的列名的值排序,*是拿key中的值进行替换,遍历所有的值在进行排序 sort key by key*->列名 desc get key*->title 按照key*键中的列名的值排序,*是拿key中的值进行替换,遍历所有的值在进行排序,然后返回所有匹配参考键key*的key的title属性 sort key store newkey 将结果保存到一个新的key里,适用于by、get之后 注意: sort命令最后可以加上排序类型,desc倒序,asc正序 sort命令还可以加上limit,用法和mysaql一致(左闭右开) sort不支持散列表类型 使用by的时候,如果参考键没有*,redis不会进行排序 使用by或get若参考键位置是字符串类型,不用写-> 一个sort里可以有多个get,但只能有一个by get #返回元素本身 优化: 尽量减少待排序键中元素数量 使用limit只获取需要的数据 如果要排序的数据量比较大,尽可能使用store缓存结果 | |
队列 | 基本命令: brpop key seconds 阻塞弹出,若没有则阻塞,只要seconds时间过期返回nil,若seconds为0则永久阻塞直到新任务取出 blpop key [key……] seconds 阻塞弹出,若没有则阻塞,只要seconds时间过期返回nil,若seconds为0则永久阻塞直到新任务取出,可以阻塞很多队列, | |
发布/订阅 | 基本命令: publish channel message 向channel频道发送message信息 subscribe channel 订阅频道 unsubscribe channel 取消订阅频道 psubscribe channel 按规则订阅频道,channel可用匹配规则 | |
持久化(适用于服务器重启) | RDB方式:自动持久化(异步): 在配置文件里进行配置,save 900 1 意思是15分钟内有一个或1个以上就进行持久化,可以有多个save,之间是或的关系 save或bgsave命令: save,阻塞所有来自客户端的请求进行持久化 bgsave,异步进行持久化,可用lastsave命令查看进度(返回时间戳) flushall命令: 将所有数据持久化到硬盘,并清除所有内存中的数据,注意,只要save的条件不为空,无论什么条件,执行flushall都会进行持久化 aof方式:修改配置文件, appendfilename appendonly.aof appendonly yes | |
主从复制 | 主库不用任何操作,从库启动时额外加上启动参数slaveof 主库地址 主库端口 | |
哨兵 | 功能:监控redis是否正常运行,当出现故障时,自动切换从库为主库 使用: 建立一个配置文件sentinel.cof,内容为sentinel monitor mymaster 127.0.0.1 6379 1,最后的1代表最低通过票数 执行命令redis-sentinel 刚刚配置文件路径 注意:配置文件只需要监控主库即可,他会自动发现所有的从库 | |
集群 | 使用: 在配置文件里将cluster-enabled属性改成yes,并启动redis 配置环境依赖,ruby、gem的redis,然后运行一下命令进行初始化:redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385,注意1代表每个主库拥有的从库数量为1 命令执行时会提示输入yes,输入yes继续 注意:集群中至少要有3个主库才能正常运行 集群节点添加,只需要在任意集群中的客户端输入一下命令:cluster meet ip port即可 重新分片时使用如下命令:redis-trib.rb reshared 127.0.0.1:6380,接着会询问迁移多少插槽,从哪迁移,迁移到哪。最后输入done即可 常用命令: cluster slots 查看插槽分配 cluster nodes 查看所有节点信息 info cluster 判断集群是否正常使用 | |
管理篇 | ||
bind | 绑定ip,使指定ip的主机才能连接 | |
密码 | 在配置文件里配置requirepass属性,注意这里可用穷举法破解,使用命令时需要先用auth 密码认证 | |
命令命名 | 在配置文件里使用rename-command属性对命令进行重命名 | |
管理工具 | redis-cli: redis自带命令终端 phpredisadmin: php语言客户端 | |