redis基本命令笔记

来源:互联网 发布:ubuntu core 使用 编辑:程序博客网 时间:2024/05/21 11:24
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
--------=========----------=======---------
任务队列



















































0 0
原创粉丝点击