发布新日志

  • nosql数据库和redis

    2011-06-21 20:23:32

    原文:http://www.iteye.com/topic/524977

    我的摘要:

    1.什么是关系型数据库

    关系型数据库是支持采用了关系模型来组织数据的数据库,简单来说,关系模型就是指二维表模型,以下是关系模型中的常用概念:

    关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名。

    元组:可以理解为二维表中的一行,在数据库中经常被称为记录。

    属性:可以理解为二维表中的一列,在数据库中经常被称为字段。

    域:属性的取值范围,也就是数据库中某一列的取值限制。

    关键字:一组可以唯一标识元组的属性。数据库中常称为主键,由一个或多个列组成。

    关系模式:指对关系的描述,其格式为:关系名(属性1,属性2,…,属性N)。在数据库中通常称为表结构

    优点:容易理解、易于维护、使用方便;

    2.什么是NoSql数据库,为什么使用NoSql数据库

    相对于关系型数据库(sqlserver、oracle、mysql……),nosql就是非关系数据库

    随着web2.0的发展,SNS等大型高并发应用对超大量数据、高发量、可扩展性要求越来越高,关系型数据库已经无法应付,并且关系型数据库的一些特性和优点(比如事物一致性、读写实时性、多表关联查询等),在这类应用中也得不到展现。

    关系数据库在这些应用场景下显得不那么合适了,为了解决这类问题的非关系数据库应运而生,现在这两年,各种各样非关系数据库,特别是键值数据库(Key-Value Store DB)风起云涌: Redis,Tokyo Cabinet,Cassandra,Voldemort,MongoDB,Dynomite,HBase,CouchDB,Hypertable, Riak,Tin, Flare, Lightcloud, KiokuDB,Scalaris, Kai, ThruDB,  ......

    3.Redis简介
    Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是我知道的性能最快的Key-Value DB。

    Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存List链表和Set集合的数据结构,而且还支持对List进行各种操作,例如从List两端push和pop数据,取List区间,排序等等,对Set支持各种集合的并集交集操作,此外单个value的最大限制是1GB,不像memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一个功能加强版的memcached来用。

    Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,并且它没有原生的可扩展机制,不具有scale(可扩展)能力,要依赖客户端来实现分布式读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。目前使用Redis的网站有github,Engine Yard。

  • redis-cli的使用

    2011-06-15 10:16:13

    TYPE key — 用来获取某key的类型 
    KEYS pattern — 匹配所有符合模式的key,比如KEYS * 就列出所有的key了,当然,复杂度O(n) 
    RANDOMKEY - 返回随机的一个key 
    RENAME oldkey newkey — 改变key的名字 
    SELECT: ./redis-cli select 6 
    # 表示切换到数据库6  

    SET: ./redis-cli -n 0 set nid 123456789 
    # 表示向数据库0中插入字符串key为nid,value值为123456789  

    GET: ./redis-cli -n 0 get nid 或者 ./redis-cli get nid 
    # 表示获取数据库为0,key为nid的字符串,在不指定数据编号的情况下,默认连接的是0数据库,所以可以省略-n参数 

    GETSET: ./redis-cli getset nid 987654321 
    # 表示返回指定key的原始值,并指定一个新值给他 

    MGET: ./redis-cli mget nid uid … 
    # 表示获取多个key的值 
       
    SETNX: ./redis-cli setnx nnid 888888 
    # 表示当一个指定的key不存在时,设置这个key指定的value,如果存在,则设置不成功 

    SETEX: ./redis-cli setex nid 5 666666 
    # 表示设置一个key指定的value保存5秒后失效,设置key/value的有效期 

    MSET: ./redis-cli mset nid0001 "0001" nid0002 "0002" nid0003 "0003"
    # 表示多键值对的数据保存 

    INCR: ./redis-cli incr count 
    # 表示对给定key的value进行递增(+1)的操作,当然value必须是一个integer 

    INCRBY: ./redis-cli incrby count 5 
    # 表示对给定key的value进行指定步长的递增操作 

    DECR: ./redis-cli decr count 
    # 表示对给定key的value进行递减(-1)的操作 

    DECRBY: ./redis-cli decrby count 7 
    # 表示对给定key的value进行指定步长的递减操作 

    APPEND: ./redis-cli append content "bad"   或者  ./redis-cli append content "good"
    # 表示追加一个value到指定的key中,如果key不存在,则新建key 

    SUBSTR: ./redis-cli substr content 0 4 
    # 表示返回指定key的value的部分字符串

    # 列表操作,精华 
    RPUSH key string — 将某个值加入到一个key列表末尾 
    LPUSH key string — 将某个值加入到一个key列表头部 
    LLEN key — 列表长度 
    LRANGE key start end — 返回列表中某个范围的值,相当于mysql里面的分页查询那样 
    LTRIM key start end — 只保留列表中某个范围的值 
    LINDEX key index — 获取列表中特定索引号的值,要注意是O(n)复杂度 
    LSET key index value — 设置列表中某个位置的值 
    RPOP key 

    # 集合操作 
    SADD key member — 增加元素 
    SREM key member — 删除元素 
    SCARD key — 返回集合大小 
    SISMEMBER key member — 判断某个值是否在集合中 
    SINTER key1 key2 ... keyN — 获取多个集合的交集元素 
    SMEMBERS key — 列出集合的所有元素 

     

  • sql常用语句

    2009-07-21 11:35:43

    1. Select & distinct

    select colum1,colum2 ...

    from tablename

    where colum1=value1 and colum2=value2

    slect distinct colum1,colum2...

    from tablename

    2.Insert

    insert into tablename

    values (value1,value2...)

    insert into tablename (colum1,colum2...)

    values (value1,value2...)

    3.update

    update tablename

    set colum1=value1, colum2=value2...

    where somecolum=somevalue

    4.delete

    delete from tablename

    where colum1=value1

    5.Top & order by

    select top 10

    from tablename

    order by colum1 asc|desc

    6.like与通配符

    select * from tablename

    where colum1 like 's%'

    7.count & distinct

    select count(distinct colum1)

    from tablename

    8.in & (between and)

    select column(s)

    from tablename

    where column1 in (value1,value2...)

    select column(s)

    from tablename

    where column1 between value1 and value2

    9.create database & create table

    create database DB_Name

    create table tablename

    (

    column_name1 datatype,

    column_name2 datatype,

    ...

Open Toolbar