2016年6月7日

摘要: hash 类型操作设置操作:hset: hset key filed value 创建指定key的filed-value名值对 hsetnx: hsetnx key filed value 创建不存在的key的filed-value名值对,已存在则创建失败 hmset: hmset key file 阅读全文
posted @ 2016-06-07 18:21 bing。 阅读(177) 评论(0) 推荐(0) 编辑
 
摘要: 以个人信息为例操作string类型 设置操作: set: set key value 创建key-value名值对 setnx: setnx key value 创建不存在的key-value,已存在则创建失败 setex: setex key time value 创建time(s)内自动销毁的k 阅读全文
posted @ 2016-06-07 18:20 bing。 阅读(181) 评论(0) 推荐(0) 编辑
 
摘要: Redis属于key-value数据库,与传统的数据库存在很大区别,Redis以命令的方式代替了复杂的SQL语句,并且属于内存库性质,所以运行速度非常快。内存数据会生成数据库文件保证数据持久化。 Redis中没有传统数据库的表、字段,主键等概念。以直观的数据结构方式存储数据。Redis支持以下几种类 阅读全文
posted @ 2016-06-07 18:17 bing。 阅读(460) 评论(0) 推荐(0) 编辑

2016年5月12日

摘要: 上篇线程/进程并发服务器中提到,提高服务器性能在IO层需要关注两个地方,一个是文件描述符处理,一个是线程调度。 IO复用是什么?IO即Input/Output,在网络编程中,文件描述符就是一种IO操作。 为什么要IO复用? 1.网络编程中非常多函数是阻塞的,如connect,利用IO复用可以以非阻塞 阅读全文
posted @ 2016-05-12 23:09 bing。 阅读(5083) 评论(0) 推荐(0) 编辑
 
摘要: 进程和线程的使用在前面博文已经讲述完毕,在完成一个最简单的服务器之后,就是要考虑下如何实现并发服务器了。 要实现服务的并发,只能通过进程和线程两种方式。 之前提到过listen_fd和connect_fd,listen用于监听是否有客户端连接,维护两个fd队列,没完成握手的和完成就绪的。 conne 阅读全文
posted @ 2016-05-12 20:57 bing。 阅读(4401) 评论(0) 推荐(0) 编辑

2016年5月8日

摘要: 这篇是进程线程的博文的最后一篇了,至此进程线程的所有同步内容已经全部回顾完了。 其中信号和信号量看起来名字很像,实际上却是完全不一样的两个东西,信号和信号量在进程线程中都可以使用。而且使用方式也基本完全一样。 进程中的共享内存,线程中的互斥锁,条件变量。这些是独有的,但实际也能互相使用,《Unix网 阅读全文
posted @ 2016-05-08 19:45 bing。 阅读(381) 评论(0) 推荐(0) 编辑
 
摘要: 线程信号量和进程信号量类似,Unix提供了两套与信号量有关的API。POSIX和System V。两套API都可以在线程和进程中使用。 进程中使用信号量是为了保证临界资源的控制,线程中已经有了互斥锁,而且还有条件变量对线程进行控制,信号量是不是就有点多余了呢? 其实在进程中也是可以使用互斥锁和控制变 阅读全文
posted @ 2016-05-08 18:50 bing。 阅读(552) 评论(0) 推荐(0) 编辑

2016年5月2日

摘要: 上篇提到线程针对临界值操作时需要加锁,但是线程访问临界资源只通过锁来控制是不够的。 比如对一个数据进行操作,A线程需要读,B线程进行写。 A线程先访问临界资源,发现没有数据可以读,只能等待B线程先写,此时又占用了互斥锁,导致B线程无法得到锁,进行写操作。 此时就需要用到条件变量了,条件变量的目的就是 阅读全文
posted @ 2016-05-02 21:41 bing。 阅读(386) 评论(0) 推荐(0) 编辑
 
摘要: 在使用线程时,经常要注意的就是访问临界资源加锁。 在编码过程由于粗心忘记加锁将带来不可预知的错误。这类错误单次运行或小并发时难以复现,当数据量变大,用户数增多时,轻则系统崩溃,大则引起数据错误。造成损失。 线程中互斥锁与进程的信号量类似,也可以看做是PV操作,用于保护临界资源,确保只有一个线程访问。 阅读全文
posted @ 2016-05-02 21:05 bing。 阅读(517) 评论(0) 推荐(0) 编辑
 
摘要: 消息队列使用的API与信号量、共享内存类似。 消息队列、信号量、共享内存均可用ipcs命令查看以及ipcrm删除。 msgget首先向内核获取一个消息队列ID。 获取成功后,可用msgctl获取和设置队列相关信息。 msgsnd用于写消息队列。 msgrcv用于读消息队列。 消息队列遵循First 阅读全文
posted @ 2016-05-02 16:24 bing。 阅读(528) 评论(0) 推荐(0) 编辑