发表于: 2018-09-10 15:31:33
1 466
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
安装memcached服务步骤:
1. 下载地址:http://pan.baidu.com/s/1gdKbp8R(这是在网上找的下载地址,可以下载)
2. 解压下载后的文件,把它放到一个目录中,如D:\memcached。
3. 打开cmd,进入memcached解压后存放的目录,运行命令:
memcached.exe -d install
如果没有意外的话已经安装成功了。(目录中应该有memcached.exe这个文件)
4. 测试是否安装成功:
打开cmd,进入memcached解压后存放的目录,运行命令:
memcached -h,若安装成功,会出现如下界面:
5. 启动memcached:
打开cmd,进入memcached解压后存放的目录,运行命令:
memcached.exe -d start
这时memcached已经启动,在任务管理器中可以看到这个进程:
6. 连接Memcached:
打开cmd,运行命令:
telnet 127.0.0.1 11211
即可连接Memcached。
注意:win7中可能会出现“telnet’不是内部或外部命令”的错误,这是因为系统中默认没有安装telnet的缘故,可在“控制面板”->“程序”->“程序和功能”->“打开或关闭Windows功能”中打开“Telnet客户端”。
redis简介:
Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。
Redis的常用数据类型:
与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis内部内存管理中是如何描述这些不同数据类型的,可以看下图:
简单来说,Redis内部使用一个redisObject对象来表示所有的key和value。可以当做是一个数据表,字段有type,
encoding,ptr,vm等等,然后这个核心对象用来存储相关数据;
1)String
常用命令:set/get/decr/incr/mget等;
应用场景:String是最常用的一种数据类型,普通的key/value存储都可以归为此类;
实现方式:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。存为int类型的一般是“23”“12”这种数据式的字符串类型。
2)Hash
常用命令:hget/hset/hgetall等
应用场景:我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、年龄和生日,通过用户ID我们希望获取该用户的姓名或者年龄或者生日;
实现方式:Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。如图所示,Key是用户ID, value是一个Map。这个Map的key是成员的属性名(name,age,birthday等map内部的字段),value是属性值。这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据。当前HashMap的实现有两种方式:当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
3)List
常用命令:lpush/rpush/lpop/rpop/lrange等;
应用场景:Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现;
实现方式:Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
4)Set
常用命令:sadd/spop/smembers/sunion等;
应用场景:Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的;
实现方式:set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
5)Sorted Set
常用命令:zadd/zrange/zrem/zcard等;
应用场景:Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。
实现方式:Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
Redis的持久化
Redis虽然是基于内存的存储系统,但是它本身是支持内存数据的持久化的,而且提供两种主要的持久化策略:RDB快照和AOF日志。RDB快照方式存储数据就是设定一个规则,在规则生效的时候生成快照文件,比如设定10分钟1000条数据的时候进行快照,短处就是在有故障的时候,从上一次快照到故障触发点这段时间的数据没有得到保存;AOF日志方式就是将导致数据发生修改的命令追加到AOF文件中,存储的是纯文本格式。
redis下载安装
下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载
github下载地址:https://github.com/MSOpenTech/redis/tags
下载解压,通过命令安装即可;
启动命令redis-server redis.windows.conf,出现下图显示表示启动成功了。
设置服务命令
redis-server --service-install redis.windows-service.conf --loglevel verbose
启动电脑服务之后如下图所示:
redis可视化工具下载安装
github地址:https://github.com/uglide/RedisDesktopManager/releases
windows系统一定要选择exe后缀的文件下载,不然都找不到地方启动这个软件,目前只有0.9.3及以下的版本支持这种文件的安装,真的伤. 后面下载安装即可.
这是打开软件的界面
连接redis服务器
这几个功能键依次是 过滤key,重新加载key,添加key,启用实时更新,删除key
可以针对目标key执行rename,delete,addrow,reload value操作,应该就是和navicat差不多,对redis这个非关系型数据库的数据可以进行一些常规性的修改.
新建的连接栏,可以查看服务器信息,打开consol控制台等
memcache和redis的总体区别:
1)性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。
2)内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
3)Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
区别:1.Redis使用最佳方式是全部数据in-memory。
2.Redis更多场景是作为Memcached的替代者来使用。
3.当需要除key/value之外的更多数据类型支持时,使用Redis更合适。
4.当存储的数据不能被剔除时,使用Redis更合适。
明天计划的事情:(一定要写非常细致的内容)
如何应用memcache和redis
遇到的问题:(遇到什么困难,怎么解决的)
收获:(通过今天的学习,学到了什么知识)
以上
评论