最近总结了一下自己使用过的一些数据库,包括:sql,mysql,mongodb,redi等等,跨域登录、建议词、以及一些状态等用到了redis,顺便总结了一下。redis是一个高性能的key-value键值数据库,redis在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点。Redis不仅能保存Strings类型的数据,还能保存Lists类型(有序)和Sets类型(无序)的数据,而且还能完成排序(SORT)等高级功能,在实现INCR,SETNX等功能的时候,保证了其操作的原子性,除此以外,还支持主从复制等功能。如果使用PHP脚本,需要安装PHP扩展。官网地址:服务端下载地址:客户端下载地址: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执行顺序相反