最近总结了一下自己使用过的一些数据库,包括:sql,mysql,mongodb,redi等等,跨域登录、建议词、以及一些状态等用到了redis,顺便总结了一下。

redis是一个高性能的key-value键值数据库,redis在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点。Redis不仅能保存Strings类型的数据,还能保存Lists类型(有序)和Sets类型(无序)的数据,而且还能完成排序(SORT)等高级功能,在实现INCR,SETNX等功能的时候,保证了其操作的原子性,除此以外,还支持主从复制等功能。如果使用PHP脚本,需要安装PHP扩展。
官网地址:
http://redis.io/
服务端下载地址:
http://redis.io/download
客户端下载地址:
http://redis.io/clients

1、安装
   下载 
http://download.redis.io/releases/redis-2.8.9.tar.gz
 
 在linux下
        tar xzf redis-2.8.9.tar.gz
        cd redis-2.8.9

        make 
编译后的可执行文件在src目录中,可以使用下面的命令运行Redis 
      启动服务  
 src/redis-server
    启动客户端 
 src/redis-cli

即可 

查看redis版本的方法:

[root@localhost redis-2.8.9]# src/redis-server --version

Redis server v=2.8.9 sha=00000000:0 malloc=jemalloc-3.2.0 bits=64 build=a3e58cb49f1f5c7
 

[root@localhost redis-2.8.9]# src/redis-cli --version      

redis-cli 2.8.9
 

[root@localhost redis-2.8.9]# src/redis-cli -v

redis-cli 2.8.9
 

[root@localhost redis-2.8.9]# src/redis-server -v

Redis server v=2.8.9 sha=00000000:0 malloc=jemalloc-3.2.0 bits=64 build=a3e58cb49f1f5c7

部分命令包含(List类型、Hash类型、string类型)

string类型:


1、apend   向特定的key中追加value值,这个key可以存在,也可以不存在  append  tmpKey "zhl"  如果存在会在之后追加不存在会创建一个

2、bitcount 计算给定字符串中被设置为1的比特位的数量,此方法归属到redis 的字符串中。备注:字符串转换为1 0 的机器码之后,出现 1 的个数。

用在统计方面还是挺不错的比如:用户zhl一共登录五天,那么 setbit zhl 1 1 第二天则是 setbit login 2 1 第五天是 setbit 3 1 

统计五天内一共登录的次数 bitcount zhl 输出结果是  3  .注意:setbit  不可以进行set 字符串, 如果你是通过setbit 方法设置的

像上面的zhl的值,使用get zhl 获取到的值会和你想象的不太一样

3、decr    执行减法操作,递减一  比如:set zhlnum 4  然后执行  decr zhlnum  输出的结果是  3 如果zhlnum的值是一个字符串那么回报错

4、decrby  方法同decr基本一致,decr方法减去的是 固定值 1, 而decrby方法减去的填写的值:比如:decrby zhlnum 3 返回值是 0 

5、incr    执行加法操作,递增一 

6、

7、set     将字符串值 value 关联到 key, 如果 key 已经存在,将覆盖。set方法还存在一些参数,

   EX 设置过期时间(秒)        set name_ex "zhl"  EX  10   对于 name_ex的key设置10秒过期时间

   PX 设置过期时间 (毫秒)     set name_px "zhl"  PX  8000 对于 name_ex的key设置8000毫秒过期时间 

   NX key不存在时,才进行设置  set name_ex "123"  返回值是 nil

   XX key存在的时,才进行设置  set name_ex "123"  get name_ex  返回值是 123


   备注:如果ex、px 或者 nx、xx同时出现,后者会覆盖前者,但是 ex、px可以和nx/xx搭配使用

   

8、get     返回 key 所关联的字符串值,如果 key 不存在那么返回特殊值 nil, GET 只能用于处理字符串值,否则会返回一个错误

9、mset    同时设置一个或多个 key-value.如果key已经存在,会覆盖,mset是原子性操作  mset name "zhl" age "25" address "Beijing China"

10、mget    获取一个或多个 key 对应的value. mget name age address 不存在的返回 nil

11、setex   关联key -- value,并设置生存时间     (和set方法中添加过期时间参数功能一样)       

12、setnx  将 key 的值设为 value ,当且仅当 key 不存在。 (和set方法中添加判断存在与否的参数功能一样)


13、ttl    查看生存时间(秒)key不存在返回-2,存在但没有生存时间返回 -1 否则返回生存时间(2.8版本以前key不存在或没有生存时间都是-1)

14、pttl   查看生存时间(毫秒)其它与 ttl相同

15、del    删除给定的一个或者多个 key ,不存在的key返回 0 删除多个,返回的结果是成功的个数:比如:del name age address time 返回3

16、dump   序列化给定的key的value值  经常和 restore使用

17、exists 判断key是否存在  exists name 存在返回1 反之返回 0

18、expire 更新生存时间,当生存时间为0时,会被自动删除 (很多时候回合set 联合使用,用于更新或设置特定字段或者某一个状态的生存时间)

19、expireat 设置生存时间,到某一个时间戳的时间点过期

20、pexist 移除key的生存时间 成功返回1 否则返回0 

21、perxpire   以毫秒为单位设置生存时间

22、pexpireat  移除时间戳 

23、keys    查找符合给定模式的key,有点类似数据库的模糊查询  大数据集合中使用注意性能问题

    keys *         匹配所有的key

    keys h*llo     匹配h开头llo结尾的,*代表0个或多个字符

    keys h?llo     匹配h开头llo结尾的,*代表1个字符

    keys w[or]ld   仅仅会匹配wold wold

24、randomkey 从当前数据库中随机返回一个key

25、renamenx  renamenx key newkey  仅当newkey不存在时候,key重命名为newkey


26、type    返回key的存储类型  返回结果有:none (key不存在) string (字符串) list (列表) set (集合) zset (有序集) hash (哈希表)

27、sort    返回给定列表、集合、有序集合 key 中经过排序的元素,排序默认以数字作为对象

    最简单的 sort 使用方法是 sort key 返回键值从小到大排序的结果 和 sort key DESC 回键值从大到小排序的结果

    如果是字符串排序,需要添加修饰符  alpha  ,没有添加会报错  (error) ERR One or more scores can't be converted into double

    返回限定数量的结果集 limit  sort name alpha limit 0 3 返回3条数据

    更多的参数设定请参考:http://www.redis.cn/commands/sort.html


Hash 类型:


28、hset    将哈希表 key 中的域 field 的值设为 value,如果已经存在则会被覆盖  hset db redis www.redis.com

29、hget    获取对应域 field或key中的 value    hget db redis                

30、hgetsll 返回哈希表 key 中,所有的域和值

31、hmset   设置多个 field-value (域-值)     hset web baidu  www.baidu.com wangyi www.wangyi.com

32、hmget   获取多个 key field 的键 域的值   hmget web baidu wangyi

33、hdel    删除哈希表key 中的一个或多个指定域,不存在的域将被忽略  

34、hvals   返回哈希表中所有的域值  hvals web

35、hexists 查看hash表中是否春在给定的域

36、hincrby  hincrbyfloat  为哈希表 key 中的域 field 的值加上(浮点)增量  

37、hlen    返回哈希表 key 中域的数量

38、hsetnx  设置 key 中的域 field 的值(field不存在)若域 field 已存在,操作无效。


List 类型:


39、lpush   将一个或多个值 value 插入到列表 key 的表头, lpush tmplist 1 2 3 列表的值是 3 2 1 后执行的在列表顶端 允许重复 

40、lpop    移除并返回列表 key 的头元素 lpop tmplist 返回的结果是 3 

41、lpushx  将 value 插入到列表的表头,key 存在并且是一个列表,key不存在,不进行任何操作

42、lindex  返回列表 key 中,指定下标的元素 ,类似数组,比如:$arr=array(1,2,3)  lindex tmplist 0 相当于数组的$arr[0]

43、linsert 将value插入到列表的某个key之前或之后 linsert tmplist before 2 "insert before" | linsert tmplist after 2 "insert after"

44、len     计算指定key的列表的长度

45、lrange  获取某个区间的元素 和 常用的数组一样下标从 0 开始,也可以出现负值

46、lrem    移除指定个数的元素 比如:lpush tmpkey 'a' 'b' 'c' 'a' 'd' 'a',lrem tmpkey 2 a 从头开始计算,如果是-2 从结尾开始计算

47、rpop    移除元素结尾的值 与 lpop 位置相反

48、rpoplpush  弹出一个元素,然后插入到列表中   rpoplpush tmplist a b 从a中弹出,插入到b中

49、rpush   在结尾插入元素,与lpush 位置相反

50、rpushx  与lpushx 位置相反

51、blpop   列表的阻塞式弹出元素,找到元素即停止,还可以添加等待的时间 0 不限定时间

    比如:lpush tmplist 'bieru' 'zhl' 'name'  lpush testlist 'zg' 'bj' 'sh' blpop tmplist list testlist 0

    返回结果是  tmplist name   第一个是来自的队列  第二个是元素

52、brpop   同blpop执行顺序相反