您的位置:首页 > 数据库 > Redis

redis基本命令笔记

2016-07-17 22:07 561 查看
redis-server

redis-server --port 6380

redis-cli shutdown

redis-cli -h 127.0.0.1 -p 6380 ping

redis-cli ping

redis-cli 进去交互模式

redis-server /path/to/redis.conf

redis-server /path/to/redis.conf --loglevel warning

CONFIG SET : 在不重新启动REDIS的情况下动态修改部分Redis配置。

CONFIG SET loglevel warning

CONFIG GET loglevel

redis默认支持16个数据库,可以通过databases参数来修改这一数字,SELECT 1,切换数据库。

不支持为每个数据库设置不同的访问密码。

FLUSHALL情况一个Redis实例中所有数据库中的数据。这些数据库更像是命名空间,而不适宜存储不同应用程序的数据。

************--------------===========----------===========-----------**********

KEYS pattern,支持glob风格通配符规则

DEL 命令不支持glob风格通配符,不过可以结合linux命令实现。

redis-cli keys "z*" | xargs redis-cli del

redis-cli -p 6380 keys "z*" | xargs redis-cli -p 6380 del

redis-cli del 'redis-cli keys "z*"' ???好像不行

TYPE foo

获得键值的数据类型

----===========---------=======

五种数据结构

1)字符串

SET key value

GET key

递增数字

INCR key

INCRBY key num

INCRBYFLOAT zhang 0.2

文章访问量统计

生成自增ID

DECR key

DECRBY key decrement

向尾部追加值

APPEND key value

APPEND key " world"

取字符串长度

STRLEN key

同时多个键值操作(字符串)

MGET key

MSET key value key value

位操作

GETBIT key offset

SETBIT key offset value

BITCOUNT key start end

位运算

BITOP OR res foo1 foo2

AND/OR/XOR/NOT

利用位操作可以非常紧凑地存储布尔值

实例操作:访问统计,发表文章

展示每个文章的标题——用散列存储文章

2)散列

散列中的字段值只能是字符串,不能嵌套其他数据类型

集合类型同样只能是字符串

散列类型适合存储对象

nosql与关系数据库的区别2

当不同记录需要不同的字段时,关系表是冗余的。

HSET key field value

HGET key field

HMSET key field value field2 vlaue2...

HMGET key field field2...

HGETALL key

HEXISTS key field

HSETNX key field value当字段不存在的时候赋值。原子操作,可用于实现分布式锁。

HINCRBY key field increment

HINCRBY person score 60

HDEL key field field2...

HKEYS key

HVALS key

HLEN key

3)列表类型,有序的字符串列表,常用的操作是向列表两端添加元素或者获得列表的某一个片段

使用双向链表实现,向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度越快。获取几千万个元素的列表和20个元素的列表的头部或者尾部10条记录的速度是一样的。

缺点是,通过索引访问元素较慢。

应用场景如,社交网站的新鲜事,获取最新的100条数据。

记录日志,可以保证新加入日志的速度不会受到已有日志数量的影响。

队列。

LPUSH key value value2...

RPUSH key value value2...

LPOP key

RPOP key

LLEN key

LRANGE key start end 

访问片段

LRANGE key 0 -1 

访问所有元素

LREM key count value

当count>0时,LREM从列表左边开始删除前count个值为value的元素。

当count<0时,LREM从列表右边开始删除前count个值为value的元素。

当count=0时,LREM从列表删除所有值为value的元素。

列表存储文章ID,获取最新文章,存在一个问题。文章的发布时间不易修改,修改文章的发布时间不仅要修改文章的time字段,还需要按照发布时间重新排列列表中的元素。过程繁琐。

问题2:当列表元素非常多的时候,访问中间的元素效率较差。

存储文章的评论,列表类型。

LINDEX key index

LSET key index value

列表当数组来用。

LTRIM key start end

LTRIM命令和LPUSH命令一起使用来限制列表中元素的数量。比如记录日志时,我们希望只保留最近的100条日志,则每次加入新元素的时候调用一次ltrim命令。

LINSERT key befor|after pivot value

向列表中插入元素

LINSERT list after 23 23

LINSERT list before 23 23

将元素从一个列表转到另一个列表

RPOPLPUSH source destination

当把列表类型当作队列使用时,RPOPLPUSH可以很直观在多个队列中转移数据。

当source和destination相同时,RPOPLPUSH会不断地将队尾移到队首,借助这个特性,我们可以实现一个网站监控系统,

即循环队列,并且可随时往队列中加入新元素。

4)集合

唯一的,没有顺序

常用的操作是向集合中加入或删除元素,判断某个元素是否存在等。

集合之间的运算,并集交集差集

SADD key member member2...

SREM key member member2...

SMEMBERS key

SISMEMBER key member

判断一个元素是否在集合中的时间复杂度是O(1),无论集合中有多少元素,SISMEMBER可以极快地返回结果。

集合间运算

SDIFF

SINTER

SUNION

应用存储文章标签

SCARD key

获取集合中元素的个数

SDIFFSTORE

SINTERSTORE

SUNIONSTORE

随机获得集合中的元素

SRANDMEMBER key

SRANDMEMBER key count

当count为正数时,获得count个不重复的

当count为负数时,获得count个可重复的

5)有序集合

文章发布时间排序(获取最新文章)

文章访问量排序(获取访问量最高的文章)

有序集合和列表有些相似,二者都是有序的,二者都可以获得某一范围的元素。

但二者有着很大的区别。

1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度较慢。更适合实现“新鲜事”“日志”这样很少访问中间元素的应用。

2)有序集合类型是使用散列表和跳跃表实现的,读取中间元素也很快,时间复杂度是O(log(N))。

3)列表中不能简单地调整某个元素的位置,但是有序集合可以。

4)有序集合比列表更耗费内存。

ZADD key score member score member...

ZSCORE key member

ZRANGE key start stop [WITHSCORES]

ZREVRANGE key start stop [WITHSCORES]

ZRANGE name 0 -1 withscores

按照分数从小到大

ZREVRANGE name 0 -1 withscores

按照分数从大到小

ZRANGEBYSCORE name 10 102

根据分数获取排序片段

增加某个元素的分数

ZINCRBY key increment member

实践,实现按照点击量排序

ZCOUNT key min max

ZCARD

ZREM key member

ZREMRANGEBYRANK key start stop

获得元素的排名

ZRANK key member

ZREVRANK key member

有序集合的集合间运算

------------================--------=======-------=======----=

事务

multi

命令1

命令2...

exec

不提供回滚功能,如果命令队列中存在运行时错误,则会部分失败。

watch命令

使用set get命令实现incr函数时,可能会存在竞态条件。

事务和watch的区别???

解决博客系统中,因为爬虫访问太频繁导致服务请求超时的问题。

限定每个IP地址每分钟最大的访问次数??

sort命令可以对列表、集合、有序集合排序

sort mylist

sort myset

sort myzset

sort myset alpha  对非数字排序

sort postid by post:*->time

sort postid by post:*->time get post:*->time

--------=========----------=======---------

任务队列
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: