频道栏目
首页 > 资讯 > 其他综合 > 正文

Redis初识(一)

16-08-29        来源:[db:作者]  
收藏   我要投稿

首先,学习redis之前要给自己提出几个问题。

1、什么是redis?

2,、redis的使用?

3、redis的原理?

4、redis适合的应用场景?

那么,接下来,先解决第一个问题,什么是redis:

reidis的介绍网上有很多,不多说,红色标记一下重点。

Redis 是一个开源(BSD许可:是一个给于使用者很大自由的协议,BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询. Redis 内置了 复制(replication), LUA脚本(Lua scripting), LRU驱动事件(LRU eviction), 事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过Redis哨兵(Sentinel) 和自动 分区(Cluster)提供高可用性(high availability).

你可以对这些类型执行 原子操作 , 列如: 字符串(strings)的append 命令; 散列(hashes)的hincrby命令; 列表(lists)的lpush命令; 集合(sets)计算交集sinter命令, 计算并集union命令 和 计算差集sdiff命令; 或者 在有序集合(sorted sets)里面获取成员的最高排名zrangebyscore命令.

为了实现其卓越的性能, Redis 采用运行在 内存中的数据集工作方式. 根据使用情况,可以每隔一定时间将 数据集导出到磁盘 , 或者 追加到命令日志中. 您也可以关闭持久化功能,将Redis作为一个高效的网络的缓存数据功能使用.

Redis 同样支持 主从复制(能自动重连和网络断开时自动重新同步),并且第一次同步是快速的非阻塞式的同步.

其他功能包括: 事务(Transactions) 订阅分发(Pub/Sub) LUA脚本(Lua scripting) 过期自动删除key 内存回收 自动故障转移您可以使用 大多数的编程语言 来使用Redis.

Redis 使用 ANSI C 编写并且能在绝大Linux系统上运行,基于BSD协议,对OS X没有外部依赖. 我们支持Linux 和 OS X两种系统的开发和测试,我们推荐使用Linux部署. Redis 可以像SmartOS一样运行在Solaris系统中, 但是我们会最大力度的支持它. 官方不支持Windos版本的Redis,但微软开发和维护着支持win-64 的Redis版本.

------------------------------------------------------------分割线----------------------------------------------------------------------

redis作为一个非关系型数据库,命令行比较多,现在只是针对最常用的操作数据类型的命令说明:

String类型:1、set key value 增加数据

2、setnx key value 仅仅当key不存在时才能set成功,返回1,否则0;

3,、setex key seconds value 设置key的过期时间单位秒

4、mset key value [key value ...] 同时设置多个key value

5、msetnx 只用当key不存在时才能set 成功

6、get key 获取key 的value

7、mget 获取多个key的value

8、getrange key start end 获取存储在key中value的字串。字符串的截取有start和end决定

9、getset key value 设置key的value,并返回key的旧值

10、append key value key存在,在旧值后追加,不存在直接set

11、setrange key offset value 重写key的值得一部分,由offset决定

12、incr key 中如果存储的是数字,则可以通过incr递增key的值,返回递增后的值。如果key不能存在,视为初始值为0

13、incrby key increment 用increment 指定步长,增加key存储的值,如果步长是负数则减

14、decr 与incr相反,decrby与incrby相反

15、del key [key] 删除key 并返回删除的个数

16、strlen key 获取key中value的长度

更多详细参考:http://redis.cn/commands.html#string

散列类型:1、hset key field value 将哈希表key的域field的值设为value

2、hget key field 返回哈希表key指定的field的值

3、hsetnx key field value 设置哈希表key的field的值,并且field不能存在,否则操作无效

4、hmset key field value [field value ...] 设置多个field的value

5、hmget key field field1 ,,,,获取多个field

6、hgetall key 获取key的所有的field 和 value

7、hdel key field1 field2 。。。删除多个field 和value

8、hlen key 返回哈希表中所有field的个数

9、hexists key field 判断哈希表中的field是否存在

10、hkeys key 返回key对应的所有field

11、 hvals key 获取哈希表中所用的values

12、hincrby key field increment 根据给定increment ,对key的field的值进行增长

更多详细参考:http://redis.cn/commands.html#hash

列表list类型:

1、lpush key value[value] 把一个或多个元素插入表头。如果是多个value时,按照从左到右的次序插。返回插入元素的个数

2、lpushx key value 插入一个表头元素,当且仅当列表key存在时,才能插入。返回列表中元素的个数

3、rpush key [value] 将一个或多个值插入到队列的队尾。多值时,从左到右依次添加。返回列表中元素个数

4、rpushx key value 讲值插入到列表队尾,当且仅当列表key存在时,才添加。返回列表元素个数

5、linsert key before|after pivot value 将值插入到pivot的前面或后面。返回列表元素个数。如果参照点pivot不存在不插入。如果有多个pivot,以离表头最近的为准

6、lindex key index 根据index查找value

7、lrange key start stop 获取指定开始和结束范围的一些列元素

8、lset key index value 设置列表指定索引的值,如果指定索引不存在则报错

9、ltrim key start stop 保留指定区域的元素,其他元素全部删除

10、lrem key count value 移除等于value的元素,当count>0时,从表头开始查找,移除count个;当count=0时,从表头开始查找,移除所有等于value的;当count<0时,从表尾开始查找,移除|count| 个。

11、rpop key 移除并返回表尾元素

12、lpop key 移除并返回表尾元素

13、llen key 获取列表长度

更多详细参考:http://redis.cn/commands.html#list

set集合类型:

1.sadd key vaule 往集合中插入一个元素,如果value值已存在集合中,则返回0,不会被重复插入。

2.sinter key1 key2 ... keyN 取出n个key之间的交集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sinter key1 key2返回d,e。

3.sunion key1 key2 ... keyN 取出n个key之间的并集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sunion key1 key2返回a,b,c,d,e,f。

4.sdiff key1 key2 取出n个key之间的差集。比如 key1里面有值a,b,c,d,e,key2里面有d,e,f,sdiff key1 key2返回a,b,c;反过来sdiff key2 key1返回f。

5. smembers key 返回key集合中所有的元素,结果是无序的。

6. sismember key value 查看value这个值是否在key集合中。存在返回1,不存在返回0。

7. scard key 返回集合中有多少个元素。

8. smove key1 key2 value 把value从key1中移到key2中去。

9.srem key value1 value2 ... valueN 从key集合中删掉某些元素。

更多详细参考:http://redis.cn/commands.html#set

sorted sets有序集合类型:

1、zadd key score member [[score member] [score member] ...] 增加一个或多个member【根据score排序】到有序集key中,如果member已经存在,只更新score。返回增加member个数,不包含已经存在的member

2、zrange key start stop [withscores] 返回有续集key中指定范围【通过索引 start stop】的member[及其score];

3、zcount key min max 统计key中score值介于min 和max之间的member个数

4、zscore key member 返回有续集key中member的score

5、zrevrange key start stop [withscores] 返回有续集key中指定范围[通过索引start stop]的member[及score],返回member根据score按降序排列

6、zrangebyscore key min max [withscores] [limit offset count] 返回有续集key中,score大于等于min并且小于等于max的member。返回结果按照score递增的次序排列。可选withscores决定返回结果集中仅仅返回member还是返回member和score;可选参数limit 指定返回结果的数量区间。

7、zrevrangescore key max min [withscores] [limit offset count] 返回有续集key中score<=max并且score>=min 的元素,返回结果根据score从大到小顺序排列。可选参数withscores决定结果集中是否包含score,可选参数limit 指定返回结果集范围。

8、zrank key member 根据score从低到高,返回member在有续集中的index

9、zrevrank key member 根据score从高到低排序,返回member在有序集key中的index

10、zcard key 返回有续集key的基数

11、zincrby key increment member 有续集key的member增加增量increment,返回增加后的score

更多详细:http://redis.cn/commands.html#sorted_set

有人问为什么redis效率比mysql快?

个人觉得,mysql是持久化存储,数据要存储在磁盘上,就要涉及到IO。而redis是内存存储,简单的key-value 形式存储,所以效率会快一点。

相关TAG标签
上一篇:Mysql----Join用法(Innerjoin,Leftjoin,Rightjoin,Crossjoin,Union模拟Fulljoin)及性能优化
下一篇:MySQL(十一)常用函数
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站