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

redis拾遗

时间:2015-10-28 23:05:32      阅读:474      评论:0      收藏:0      [点我收藏+]

标签:

    自己边学边记录的,写在了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语言客户端

 


redis拾遗

标签:

原文地址:http://my.oschina.net/shyloveliyi/blog/523305

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