今天完成的事情:
搞了一下memcached,别人的例子成功了,我的例子还是set不进去显示false,算了,搞redis好了
这次吸取教训,先搞服务器端,安装redis

然后cd到服务器解压,进入redis文件夹中输入make安装
完毕后进入其中src文件夹,输入./redis-server启动redis服务..用./redis-server这个方法启动的redis是使用的默认配置
可以看到报了三个错误

这是因为如果启动前没有更改linux内核的话,redis启动就会报错
第一个警告意思是TCP backlog设置值511没有成功,因为 /proc/sys/net/core/somaxconn这个设置的是更小的128
临时解决方法:
echo 511 > /proc/sys/net/core/somaxconn
永久解决办法:
将其写入/etc/rc.local文件中
baklog参数实际控制的是已经三次握手成功的还在accept queue的大小
第二个警告意思是overcommit_memory参数设置为0! 在内存不足的情况下,后台程序save可能失败。建议在文件 /etc/sysctl.conf 中将overcommit_memory修改为1。
临时解决方法: echo "vm.overcommit_memory=1" > /etc/sysctl.conf
永久解决方法:将其写入/etc/sysctl.conf文件中
第三个警告意思是:你使用的是透明大页,可能导致redis延迟和内存使用问题。执行 echo never > /sys/kernel/mm/transparent_hugepage/enabled 修复该问题。
临时解决方法:
echo never > /sys/kernel/mm/transparent_hugepage/enabled。
永久解决方法:
将其写入/etc/rc.local文件中。
然后还可以通过启动参数告诉redis使用指定配置文件使用下面命令启动
:在redis -->src中,输入./redis-server redis.conf
其中redis.conf是一个默认的配置文件,可以根据需要使用自己的配置文件
启动redis服务进程后,就可以使用测试客户端redis-cli和redis服务交互.
如cd到redis中,输入./redis-cli
redis>set foo bar
ok
redis>get foo
"bar"
明天计划的事情:
继续做redis.看redis实战这本书
遇到的问题:无,
收获:
Redis,即REmote Dlctionary Server(Redis).是一个与memcached差不多的key-value存储系统(数据库)
Redis是一个开源的,使用ANSI C语言编写,遵守BSD协议,,支持网络,可基于内存亦可持久化的日志型的key-value数据库,并提供多种语言的API
它通常被称为数据结构服务器,因为值(value)可以是字符串(String),哈希(Map),列表(list),集合(set)和有序集合(zset)等类型
redis可以存储键与这五种不同数据结构类型之间的映射
Redis与其他key-value缓存产品的特点:
1:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
2:Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
3:Redis支持数据的备份,即master-slave模式的数据备份
Redis优势
1:性能高-redis能读的速度是11w次/s,写的速度是8.1w次/s
2:丰富的数据类型-Redis支持二进制案例的String,lists,hashes,set以及ordered sets数据类型操作
3:原子-Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行
4:丰富的特性-Redis还支持publish/subscribe,通知,key过期等特性
Redis与其他key-value存储有什么不同?
1:Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径.Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象
2:Redis运行在内存中但是可以持久化到磁盘.
所以在对不同数据集进行高速读写时需要权衡内存因为数据量不能大于硬件内存.
在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,Redis可以做很多内部复杂性很强的事情.同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问.
Redis与memcahced比较:
1:两者都可以用于存储键值映射.Redis除了能存储普通的字符串键之外,还可以存储其他4种数据结构,而memcached只能存储普通的字符串键.
2:使用redis来解决问题,可以让代码更简短,易懂,易维护,而且还可以使代码运行的速度更快(因为用户不需要通过读取数据库来更新数据).
3:redis的效率和易用性比memcached这种关系数据库要好得多
4:使用redis可以将彼此相关的聚合数据放在同一个结构里面,这样访问聚合数据就会更为容易
5:使用redis可以将聚合数据放到有序集合里面,构建出一个实时的排行榜
6:redis的聚合数据可以是整数或者浮点数,而memcached的聚合数据只能整数
总结:
Redis能极大地加快对大数据库的查询时间.
Redis是一种非关系型数据库(nosql):Redis不使用表,它的数据库也不会预定义或者强制去要求用户对Redis存储不同数据进行关联
Redis附加特性
虽然redis的性能很好,但受限于redis的内存存储设计,有时候只使用一台redis服务器可能没有办法处理所有请求.
因此为了拓展redis的读性能,并为redis提供故障转义支持,redis实现了主从复制特性
主从复制特性:执行复制的从服务器会连接上主服务器,接收主服务器发送的整个数据库的初始副本;之后主服务器执行写的命令,都会被发送给所有连接着的从服务器去执行,从而实时地更新从服务器的数据集.因为从服务器包含的数据会不断地进行更新,所以客户端可以向任意一个从服武器发送读请求,以此来避免对主服务器进行集中式的访问
Redis的持久化
redis有两种不同形式的持久化方法,它们都可以用小而紧凑的格式将存储在内存中的数据写入硬盘:
1:时间点转储:转储操作既可以在"指定时间段内又指定数量的写操作执行"又可以通过调用两条转储到硬盘命令中的任何一条来执行
2:将所有修改了数据库的命令都写入一个只追加(append-only)文件里面,用户可以根据数据的重要程度,将只追加写入设置为从不同步(sync)、每秒同步一次或者每写入一个命令就同步一次.
拓展:BSD协议
什么是BSD协议?
BSD开源协议是一个给予使用者很大自由的协议:
可以自由使用,可以修改源代码,也可以将修改后的代码作为开源或者专有软件再发布.
当你发布使用了BSD协议的代码时,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:
1:如果在发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议
2:如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议
3:不可以用开源代码的作者/机构名字和原来的产品名字做市场推广
BSD代码鼓励代码共享,但需要尊重代码作者的著作权.
BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码开发商业软件发布和销售,因此是对商业集成很友好的协议.很多公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方代码,在必要的时候可以修改和二次开发
评论