内容简介:一直没机会学习开启调试会显示下面的界面,现在你就可以开始使用redis的api了存在返回 1 ,不存在返回 0
一直没机会学习 redis
,最近抽空学了一下,因为知道 reids
还是比较重要的,经常看到有人开发公众号因为没有对 access_token
进行缓存,判断是否过期,导致 access_token
的调用 api
次数超过限制而影响业务的情况,熟悉的人都知道使用 redis
基本上都是做缓存,因为他简单、速度快,可以说是个”快男”。使用 reids
做抽奖也很普遍,有空可以试试。本篇本章暂时只讲 key
、 hash
、 list
redis简介
- Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
-
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
为什么要用redis(优势)
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
安装运行及调试(这里以mac为例)
- 先去官网下载安装包: http://www.redis.net.cn/download/
- 解压安装
> tar xzf redis-3.0.6.tar.gz > make > sudo make install > cd /usr/local/bin && redis-server // 开启 redis 服务 > cd /usr/local/bin && redis-cli // 开启redis调试服务
开启调试会显示下面的界面,现在你就可以开始使用redis的api了
> cd /usr/local/bin && redis-cli 127.0.0.1:6379>
全局api
查询键
127.0.0.1:6379> keys * 1) "wclimb" 2) "key" 3) "me" 4) "user" 5) "user1"
键的总数
127.0.0.1:6379> dbsize (integer) 5
检查键是否存在
存在返回 1 ,不存在返回 0
127.0.0.1:6379> exists wclimb (integer) 1 127.0.0.1:6379> exists wclimb1 (integer) 0
删除键
返回结果为成功删除键的个数
127.0.0.1:6379> del user1 (integer) 1
键过期
expire key seconds 当超过过期时间,会自动删除,key在seconds秒后过期
expireat key timestamp 键在秒级时间戳timestamp后过期
pexpire key milliseconds 当超过过期时间,会自动删除,key在milliseconds毫秒后过期
pexpireat key milliseconds-timestamp key在毫秒级时间戳timestamp后过期
127.0.0.1:6379> expire user 10 // 10秒后user会被删除 (integer) 1
randomkey 随机返回一个键
127.0.0.1:6379> randomkey "wclimb" 127.0.0.1:6379> randomkey "me"
redis 键(key)
set key value [ex] [px] [nx|xx] ex为键值设置秒级过期时间 px为键值设置毫秒级过期时间 nx键必须不存在,才可以设置成功,用于添加 xx与nx相反,键必须存在,才可以设置成功,用于更新 setnx、setex 与上面的nx、ex作用相同
设置key(O(1))
127.0.0.1:6379> set name 25 OK 127.0.0.1:6379> keys * 1) "wclimb" 2) "key" 3) "me" 4) "name"
获取key(O(1))
127.0.0.1:6379> get name "25"
批量设置key
mset key value [key value ……]
127.0.0.1:6379> mset test1 1 test2 2 OK 127.0.0.1:6379> get test2 "2"
追加值(O(1))
127.0.0.1:6379> append test2 apend (integer) 6 127.0.0.1:6379> get test2 "2apend"
字符串长度
127.0.0.1:6379> strlen test2 (integer) 6
哈希(hash)
HGET KEY_NAME FIELD_NAME
类似javscript里的对象 {}
设置hash
127.0.0.1:6379> HMSET hash name wclimb age 25 OK
获取hash
127.0.0.1:6379> hmget hash name 1) "wclimb"
删除hash
hdel key field [field ……] 会删除一个或多个field,返回结果为成功删除fiel的个数
127.0.0.1:6379> hdel hash name (integer) 1 127.0.0.1:6379> hmget hash name // 再获取就返回nil 1) (nil)
获取所有field
127.0.0.1:6379> hkeys hash 1) "age" 127.0.0.1:6379> HMSET hash name wclimb from jiangxi OK 127.0.0.1:6379> hkeys hash 1) "age" 2) "name" 3) "from"
获取所有value
127.0.0.1:6379> hvals hash 1) "25" 2) "wclimb" 3) "jiangxi"
列表(list)
操作类型 | 操作 |
---|---|
添加 | rpush 、lpush、linsert |
查 | lrange、lindex、llen |
删除 | lpop 、rpop、 lrem、ltrim |
修改 | lset |
阻塞操作 | blpop、brpop |
添加
(1)从左边插入元素
lpush key value [value……]
127.0.0.1:6379> LPUSH list redis (integer) 1
(1)从右边插入元素
rpush key value [value……]
127.0.0.1:6379> RPUSH list test (integer) 2
查找
lrange key start end 索引下标从左到右分别是0到N-1,从右到左分别是-1到-N;end选项包含了自身
lrange key 0 -1 可以从左到右获取列表的所有元素
lrange mylist 1 3 获取列表中第2个到第4个元素
127.0.0.1:6379> lrange list 0 1 1) "redis" 2) "test"
长度
127.0.0.1:6379> llen key (integer) 2
删除
我们先添加几个
127.0.0.1:6379> LPUSH list a b c (integer) 5
(1)从列表右侧弹出元素 rpop key
(2)从列表左侧弹出元素 lpop key
先看看现在的列表
127.0.0.1:6379> lrange list 0 -1 1) "c" 2) "b" 3) "a" 4) "redis" 5) "test"
删除
127.0.0.1:6379> rpop list "test"
我们发现test被删除了,现在看看我们的列表
127.0.0.1:6379> lrange list 0 -1 1) "c" 2) "b" 3) "a" 4) "redis"
修改
lset key index newValue 修改指定索引下标的元素
127.0.0.1:6379> lset list 0 newValue OK 127.0.0.1:6379> lrange list 0 -1 1) "newValue" 2) "b" 3) "a" 4) "redis"
第0个下标的元素被替换成最新的值
使用node连接redis
> npm init > cnpm i reids -S > touch index.js > vim index.js
连接redis
redis npm包链接 https://www.npmjs.com/package/redis
var redis = require('redis'); var client = redis.createClient(6379, '127.0.0.1'); client.on('error', function(err) { console.log('Error ' + err); });
设置获取key
client.set('user', JSON.stringify({ name: 'wclimb', age: '18' }), redis.print); client.get('user', function(err, value) { if (err) throw err; console.log('Got: ' + value); client.quit(); });
控制台打印
> node index.js Reply: OK Got: {"name":"wclimb","age":"18"}
设置获取hash
client.hmset("hosts", "mjr", "1", "another", "23", "home", "1234"); client.hgetall("hosts", function (err, obj) { console.dir(obj); });
控制台打印
> node index.js { mjr: '1', another: '23', home: '1234' }
设置获取list
client.LPUSH('list', [1, 2, 3, 4], redis.print); client.lrange('list', '0', '-1', redis.print);
控制台打印
> node index.js Reply: 8 Reply: 4,3,2,1,newValue,b,a,redis
基本用法和上面讲的都差不多,直接上去一顿写就完事了,完全可以不带脑子的使用各种api
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web开发秘方
Brian P. Hogan、Chris Warren、Mike Weber、Chris Johnson、Aaron Godin / 七印部落 / 华中科技大学出版社 / 2013-7-10 / 66.00元
猜猜硅谷的前端工程师怎么折腾JS的?想知道无限下拉的列表怎么做吗?你知道DropBox可以当Web服务器用吗?你知道怎么做出跨平台的幻灯片效果吗?不借助插件,怎样在移动设备上实现动画效果?怎样快速搭建和测试HTML电子邮箱?怎样制作跨PC和移动设备显示的应用界面?怎样利用最新的JavaScript框架(Backbone和Knockout)提高应用的响应速度?怎样有效利用CoffeeScript和S......一起来看看 《Web开发秘方》 这本书的介绍吧!