[Redis 作者]
叫Salvatore Sanfilippo,来自意大利的西西里岛,现在居住在卡塔尼亚。目前供职于Pivotal公司。他使用的网名是antirez。
[Redis 特点]
Redis从它的许多竞争继承来的三个主要特点:
1) : Redis数据库完全在内存中,使用磁盘仅用于持久性。
2) : 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。
3) : Redis可以将数据复制到任意数量的从服务器。
[Redis 优势]
1) : 异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。
2) : 支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,我们
知道哪些问题是可以处理通过它的数据类型更好。
3) : 操作都是原子性:所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。
4) : 多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,
如Web应用程序会话,网页命中计数等。
[数据类型] redis支持五种类型的数据类型: string hash list set zset
分别介绍redis的五种数据类型:
1) : string(字符串)
string是最简单的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能
更丰富。
2) : list是一个链表结构
主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。
主要用在: 微博TimeLime, 消息队列, 关注列表, 粉丝列表等
3) : 哈希
Redis的哈希是键值对的集合。 Redis的哈希值是字符串字段和字符值之间的映射,因此它们被用来表示对象
用在: 用户浏览数
4) : set 集合
Redis的集合是字符串的无序集合。在Redis您可以添加,删除和测试文件是否存在,在成员O(1)的时间复杂度。
主要用在: 共同好友
5: zset 有序集合
Redis的有序集合类似于Redis的集合,字符串不重复的集合。不同的是,一个有序集合的每个成 员用分数,以便采取有序set命令,从最小的到最大
的成员分数有关。虽然成员具有唯一性,但分数可能会重复。
主要用在: 排行榜(顺序性)
[部分整理]
六 命令总结
0) : redis安装/服务器启动/客户端启动 的命令
- redis 安装: brew install redis
- redis服务器的启动 : redis-server
- redis客户端的启动 : redis-cli
1) : 链接操作相关命令
- qiut => 关闭连接
- auth redis设置的密码 => 简单密码认证
2) : 对value操作的命令
- exists 键名 => 判断键名是否存在
- del 键名 => 删除一个指定键名的数据
- type 键名 => 返回值得类型
- keys * => 返回所有的key
- dbsize => 返回当前数据库中所有key的数目
- expire key 存活时间 => 设置key的存活时间
- ttl key => 获取key的存活时间
- select [0-15] => 选择数据库 默认0数据库
- info => 获取服务器的信息和统计
3) : 设置redis安全密码
- 去配置文件中 vim /usr/local/etc/redis.conf 中添加 requirepass redis密码
4): 对String操作的命令
- set (key value) => 给数据库中名称为key的string赋予值value
- get( key) => 返回数据库中名称为key的string的value
- mget(key1, key2,…, key N) => 返回库中多个string(它们的名称为key1,key2…)的value
- setnx(key, value) => 如果不存在名称为key的string,则向库中添加string,名称为key,值为value
- setex(key, time, value) => 向库中添加string(名称为key,值为value)同时,设定过期时间time
- mset(key1, value1, key2, value2,…key N, value N) => 同时给多个string赋值,名称为key i的string赋值value i
- msetnx(key1, value1, key2, value2,…key N, value N) => 如果所有名称为key i的string都不存在,则向库中添加string,名称key i赋值为value i
- incr(key) => 名称为key的string增1操作
- incrby(key, integer) => 名称为key的string增加integer
- decr(key) =>名称为key的string减1操作
- decrby(key, integer) => 名称为key的string减少integer
- append(key, value) => 名称为key的string的值附加value
- substr(key, start, end) => 返回名称为key的string的value的子串
5) : 对List操作的命令
- rpush( key value )=> 在名称为key的list尾部添加一个值为value
- lpush (key value) => 在名称为key的list头部添加一个值为value
- llen( key) => 返回名称为key的长度
- lrange (key start end) => 返回名称为key的list中start至end之间的元素(end 为-1 表示返回key对应的所有数据)
- ltrim(key, start, end) => 截取名称为key的list,保留start至end之间的元素
- lindex(key, index) => 返回名称为key的list中index位置的元素
- lset(key, index, value) => 给名称为key的list中index位置的元素赋值为value
- lrem(key, count, value)=>删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从 头至尾删除count个值为
value的元素,count<0从尾到头删除|count|个值为value的元素。
- lpop(key):返回并删除名称为key的list中的首元素
- rpop(key) => 返回并删除名称为key的list中的尾元素
- blpop(key1, key2,… key N, timeout):lpop命令的block版本。即当timeout为0 时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果
timeout>0,则 遇到上述情况时,等待timeout秒,如果问题没有解决,则对keyi+1开始的list执行pop操作
- brpop(key1, key2,… key N, timeout):rpop的block版本。参考上一命令。
- rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
6) : 对Set操作的命令
- sadd (key member ) => 向名称为key的set中添加元素member
- smembers (key) => 返回名称为key的集合
- srem (key member ) => 删除名称为key的set中的元素member
- scard( key) => 返回名称为key的set的集合个数
- sinter( key1 key2) => 求名称为key1和名称key2的交集
- sinterstore( dstkey key1 key2) => 求交集并将交集保存到集合dstkey中
- sismember(key, member) => 测试member是否是名称为key的set的元素
- sunion(key1, key2,…key N) => 求并集
- sunionstore(dstkey, key1, key2,…key N) => 求并集并将并集保存到dstkey的集合
- sdiff(key1, key2,…key N) :求差集
- sdiffstore(dstkey, key1, key2,…key N) => 求差集并将差集保存到dstkey的集合
7) : 对zSet操作的命令
- zadd (key score member) => 向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序
- zrange (key start end) => 返回名称为key的zset(元素已按score从小到大排序)中的 index从start到end的所有元素
- zrevrange( key, start, end) => 返回名称为key的zset(元素已按score从大到小排序)中的 index从start到end的所有元素
- (zrem key, member) => 删除名称为key的zset中的元素member
- zincrby (key, increment, member) => 如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,
其score的值为increment
- zrank( key, member )=> 返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,
返回“nil”
- zrevrank (key, member 0 => 返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元
素,返回“nil”
8) : 对Hash操作的命令
- hmset( key, field,value) => 向名称为key的hash中添加元素field<—>value [user:1键名]
例如: hmset user:1 username daxia gender 1 age 23
- hget (key, field) => 返回名称为key的hash中field对应的value
例如: hget user:1 username
- hmget( key, field1, …,field N) => 返回名称为key的hash中field i对应的value
例如: hmget user:1 username gender
- hgetall (key )=> 返回名称为key的hash中所有的键(field)及其对应的value
- hvals( key ) => 返回名称为key的hash中所有键对应的value
- hkeys (key ) => 返回名称为key的hash中所有键
- hlen (key) => 返回名称为key的hash中元素个数
- hmset( key, field1, value1,…,field N, value N) => 向名称为key的hash中添加元素field i<—>value i
- hincrby (key, field, integer) => 将名称为key的hash中field的value增加integer
- hexists (key, field )=> 名称为key的hash中是否存在键为field的域
- hdel (key, field )=> 删除名称为key的hash中键为field的域
9) : 持久化
- save:将数据同步保存到磁盘
- bgsave:将数据异步保存到磁盘
- lastsave:返回上次成功将数据保存到磁盘的Unix时戳
- shundown:将数据同步保存到磁盘,然后关闭服务
10) : 远程服务控制
- info:提供服务器的信息和统计
- monitor:实时转储收到的请求
- slaveof:改变复制策略设置
- config:在运行时配置Redis服务器