Redis简介:
Redis是一个NoSQL型数据库,以简单的Key-Value模式存储数据。NoSQL 愿意Not Only SQL 不仅仅是SQL,并不能取代传统的关系型数据库。主要解决性能问题。
Redis采用的是单线程+多路IO复用技术。关于多路IO复用 [https://www.zhihu.com/question/32163005]
适用场景:
对数据高并发的读写
对海量数据的读写
对数据的高扩展性
不适用场景:
需要事务支持
基于SQL的结构化查询存储,处理复杂的关系,需要条件查询
常见的NoSQL数据库
Memcached、Redis、mongoDB等
Redis基础命令
redis 有16个数据库 从0开始,默认使用第0个
- select 1
选择数据库 - key *
查看当前当前数据库所有的键 - exists <key>
查看当前键是否存在 - type <key>
查看当前键的类型 - del <key>
删除某个键 - expire <key> <second>
设置过期时间 (秒) - ttl <key>
查看当前键剩余生存时间(-1 永不过期 -2 已过期 以秒为单位) - dbsize
查看当前数据库的key的数量 - flushdb
清空当前库 - flushall
清空所有库
String
- append <key> <val>
追加返回追加后长度 - strlen <key>
返回字符串长度 - setnx <key> <val>
只有key不存在时会创建赋值,存在不会有任何操作 - incr <key>
将key对应的值+1,值必须为纯数字字符串 - decr <key>
将key对应的值-1,值必须为纯数字字符串 - incrby <key> <步长>
同 incr,可以指定增加的数 - dectby <key> <步长>
同 decr,可以指定减少的数 - mset <key1> <val1> <key2> <val2>…
同时设置多个key val - mget <key1> <key2> …
同时获取多个val - msetnx <key1> <val1> <key2> <val2>…
设置多个键值,仅当所有键都不存在时才成功,否则不做任何操作 - getrange <key> start end
获取键对应值的对应位置的值,相当于substring start end 是一个闭空间 - setrange <key> start <val>
覆盖key中start位置开始,用val覆盖 - setex <key> <time> <val>
设置键值时指定过期时间 - getset <key> <value>
设置新值,获取旧值
list
索引 0 代表第一个 -1 代表最后一个
- lpush/rpush <key> <val1> <val2>
左边/右边插入值 - lpop/rpop <key>
从表头/表尾弹出一个值 - rpoplpush <key> <key2>
从key1的右边弹出一个值添加到key2左边 - lrange <key> <start> <end>
按照索引获取元素 从左到右 查询全部 lrange key 0 -1 - lindex <key> <index>
按照索引获取元素 - llen <key>
获取列表长度 - linsert <key> after/before <val> <newVal>
在val前边/后边插入newVal - lrem <key> <n> <val>
从左边删除n个value
删除list中所有1 lrem list 0 1
Set
- sadd <key> <val> <val2>
添加元素到set - smembers <key>
获取set中所有值 - sismember <key> <value>
判断是否是set中的成员 - scard <key>
获取set中元素个数 - spop <key>
随机弹出一个元素并删除该元素 - srandmember <key> <count>
随机弹出count个元素,不会删除元素 - srem <key> <val> <val2>
删除set中的 val,val2… - sinter <key1> <key2>
交集 - sunion <key1> <key2>
并集 - sdiff <key1> <key2>
差集 key1中的元素 减去 key1与key2中相同的元素
Hash
- hset <key> <field> <val>
存储一个键值对,该hash的键是key,键值对的键为 field 值为val - hget <key> <field>
获取hash里边键为field的值 - hmset/hmget
一次存储/获取多个hash值 - hexists <key> <field>
查看key中给定field是否存在 - hkeys <key>
列出key中所有的键值对 - hincrby <key> <field> <步长>
为hash表中键为field的值增加步长个值 - hsetnx <key> <field> <value>
讲hash中键为field的值设置value,只有field不存在才做操作
zSet
- zadd <key> <score1> <val1> <score2> <val2>…
添加元素 - zrange <key> <start> <end>
返回元素下标在start到end之间的元素 - zrangebyscore <key> <min> <max>
根据评分返回min到max分数之间的元素 - zreverangebyscore <key> <max> <min>
根据评分从大到小返回分数之间的元素 - zincrby <key> <步长> <member>
为元素key中的member成员的score加上步长 - zrem <key> <value>
删除该元素下指定元素 - zcount <key> <min> <max>
返回元素中评分为min到max之间元素的个数 - zrank <key> <value>
返回该成员在元素中的评分排名,从0开始