redis

姓名:穆培婷

学号:17101223414

专业:软件工程

本文转载自:http://blog.csdn.net/mengxianhua/article/details/8961713

【嵌牛导读】:Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

【嵌牛鼻子】:Redis  缓存  负载均衡

【嵌牛提问】:redis是什么?redis有什么用?

【嵌牛正文】:

一、什么是redis?

Redis是Remote Dictionary Server(远程数据服务)的缩写,由意大利人 antirez(Salvatore Sanfilippo)开发的一款 内存高速缓存数据库,该软件使用C语言编写,它的数据模型为 key-value,它支持丰富的数据结构,比如 String list  hash   set  sorted set。,可持久化,保证了数据安全。

1、为什么要用redis

1) 是一款数据库产品,有数据存储功能;

2) 可以高速读取数据(in-memory);

3) 可以减轻数据库负担

4) 有集合计算功能(优于普通数据库合同类别产品)

5) 多种数据结构支持

2、什么场合适合使用redis?

1)【sort set】排行榜应用,取top n操作,列入sina微博热门话题

2)【list】获得最新N个数据或某个分类的最新数据

3)计数器应用

4)【set】sns(social network site)获得共同的好友

5)【set】防攻击系统(IP判断)等等

3、redis其他信息

1) 作者是意大利的Salvatore Sanfilippo(antirez),又是VMWare大善人聘请了他专心写Redis

2) 默认端口号 6379,是手机按键上的MERZ对应的号码,意大利歌女(Alessia Merz)梅尔兹的代名词

4、拓展补充

缓存:

有两种类型 数据缓存、页面缓存(smarty)

使用缓存减轻数据库的负载。

在开发网站的时候如果有一些数据在短时间之内不会发生变化,而它们还要被频繁访问,为了提高用户的请求速度/降低网站的负载,就把这些数据放到一个读取速度更快的介质上,该行为就称作对该数据的缓存动作。

该介质可以是文件、数据库、内存,内存经常用于数据缓存。

页面缓存经常用在CMS内存管理系统里边

数据缓存经常会用在页面的具体数据里边

二、与memcached比较

1) Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

2) Redis支持master-slave(主—从)模式应用。

3) Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

4) Redis单个value的最大限制是1GB, memcached只能保存1MB的数据

相关资源:Redis手册网址:http://www.redisdoc.com/en/latest/index.html

三、Redis安装

Windows下安装:redis-server.exe  redis.conf(或者redis-server.exe redis.windows.conf)

客户端redis-cli.exe -h 127.0.0.1 -p 6379

Linux下安装:redis-3.2.8.tar.gz

tar zxvf redis-3.2.8.tar.gz

cd redis-3.2.8

make PREFIX=/usr/local/redis

cd src

启动服务:service redis start

新开终端:cd /usr/local/redis

客户端:./redis-cli

四、具体使用

1、Key

Key 可以是任意类型,最后都存成byte[]

Key 不能太长,比如1024字节,但作者也不追求太短,要表达清楚意思才好,作者建议用":"分隔表名,用"."作为单词间的连接。

KEYS显示所有的key,支持通配符 "KEYS a*" , "keys a?c",但不建议在生产环境大数据量下使用。

SORT,对集合按数字或字母顺序排序后返回,或者存到另一个List,还可以关联到外部Key等。因为会耗用CPU,有时会安排到slave上执行。

EXPIRE/EXPREAT/PERSIST/TTL/,关于Key超时的操作,默认以秒为单位,也有p字头的以毫秒为单位的版本。

其他命令: EXISTS,DEL,RENAME/RENAMENX(仅当new key不存在时),MOVE/MIGRATE(实例内从此db到彼db/从此实例到彼实例),RANDOMKEY,TYPE/Object(Key的类型/对象编码类型,空置时间),DUMP/RESTORE(value值的持久化)

2、String

最普通的key-value,除了支持最基本的get/set, Redis也很喜欢添加一些简便的指令,在服务端做起来是举手之劳,客户端便方便很多。

incr/decr/incrby/incrbyfloat, 如果key还不存在时创建key并设原值为0。

setEx/pSetEx, Set + Expire 的简便写法,p字头以毫秒为单位。

setNx, key不存在时才put进去。

getset, 设置新值,返回旧值。

mget/mset/msetex, 一次get/set多个key。

getbit/setbit/bitop/bitcount bitmap玩法,比如统计今天的访问用户,每个用户有一个offset,今天进来的话就把那个位为1。

append/setrange/getrange,只对特定的数据格式比如字段定长的有用,json格式就没用。

3、Hash

Key-HashMap结构,相比2.2中的JSON格式Value,可以只读取/更新对象的某些属性,有些属性超长就让它一边呆着不动。。

另一个用法是用来建索引。比如User对象,除了id有时还要按name来查询,可以建一个Key为user:index:name的Hash,在插入User对象时(set user:101 {"id":101,"name":"calvin"}), 顺便往这个hash插入一条(hset user:index:name calvin 101),这时calvin作为hash里的一个key,值为101。按name查询的时候,用hget user:index:name calvin 就能从名为calvin的key里取出id。

4、List

Redis里可以当双向链表来用,还提供blocking版本的pop函数,可以当Message Queue来用。

不过List并没有JMS的ack机制,如果消费者把job给Pop走了又没处理完就死机了怎么办? 解决方法之一是加多一个sorted set,以分发时间为score,用户把job做完了之后要去消掉它。

除了List标准的双向POP/PUSH外,还支持对队列内容的直接操作,比如LREM/LSET/LINSERT/LINDEX。

另外经常用LTRIM限制List的大小,比如只保留最新的20条消息。LRANGE不同于POP直接弹走元素,只是返回列表内一段下标的元素。LLEN获取列表的长度。

5、Set

Set就是Set,还提供一些交集,并集,差集的集合操作。

6、Sorted Set

有序集,元素放入集合的时候要同时提供该元素的分数。

ZRANGE/ZREVRANGE 按排名的上下限返回元素,正数与倒数。

ZRANGEBYSCORE/ZREVRANGEBYSCORE 按分数的上下限返回元素,正数与倒数。

ZREMRANGEBYRANK/ZREMRANGEBYSCORE 按排名/按分数删除元素。

ZCOUNT 统计分数上下限之间的元素个数。

ZRANK/ZREVRANK 显示某个元素的正倒序的排名。

ZSCORE/ZINCRBY 显示元素的分数/增加元素的分数。

ZADD/ZREM/ZCARD/ZINTERSTORE/ZUNIONSTORE 集合操作与SET相同,少了个差集的操作。

7、事务

用Multi/Exec/Discard实现, 隔离级别是这边事务一天不提交,那边另一个事务还是看到旧的值。 还有个Watch指令,起到CAS的效果,如果事务提交时,Key的值已被别的事务改变,事务会被打断。

8、Lua Script

Redis2.6内置的Lua Script支持,可以在Redis的Server端一次过运行大量逻辑。

整个Script默认是在一个事务里的。

Script里涉及的所有Key尽量用变量,从外面传入,使Redis一开始就知道你要改变哪些key。

EVAL每次传输一整段Script比较费带宽,可以先用SCRIPT LOAD载入script,返回哈希值。然后用EVALHASH执行。

内置的LUA库里还很贴心的带了CJSON,可以处理JSON字符串。

五、Redis的主从模式

前提:针对数据库的增删改查操作,在进行数据库的select操作是最耗费负载的,为了更好的优化mysql数据库,减轻mysql的负载,我们可以设置两台mysql数据库,一台主要负责数据的写入,一台负责数据的读取,这样相对可以减轻数据库的压力。同样这种方案也可以应用在redis中。设置主从redis.从服务器在连接到主服务器后,可以读取主服务器上的数据。

注意:从服务器在连接主服务器后,自身是不可以进行写数据的操作,所以在进行自身操作的时候,必须要断开于主服务器的连接。(杀死操作,重新启动)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容