前言
一直没机会学习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/
- 解压安装
1 | > tar xzf redis-3.0.6.tar.gz |
开启调试会显示下面的界面,现在你就可以开始使用redis的api了1
2> cd /usr/local/bin && redis-cli
127.0.0.1:6379>
全局api
查询键
1 | 127.0.0.1:6379> keys * |
键的总数
1 | 127.0.0.1:6379> dbsize |
检查键是否存在
存在返回 1 ,不存在返回 01
2
3
4127.0.0.1:6379> exists wclimb
(integer) 1
127.0.0.1:6379> exists wclimb1
(integer) 0
删除键
返回结果为成功删除键的个数1
2127.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后过期
1 | 127.0.0.1:6379> expire user 10 // 10秒后user会被删除 |
randomkey 随机返回一个键
1 | 127.0.0.1:6379> randomkey |
redis 键(key)
1 | set key value [ex] [px] [nx|xx] |
设置key(O(1))
1 | 127.0.0.1:6379> set name 25 |
获取key(O(1))
1 | 127.0.0.1:6379> get name |
批量设置key
mset key value [key value ……]
1 | 127.0.0.1:6379> mset test1 1 test2 2 |
追加值(O(1))
1 | 127.0.0.1:6379> append test2 apend |
字符串长度
1 | 127.0.0.1:6379> strlen test2 |
哈希(hash)
HGET KEY_NAME FIELD_NAME
类似javscript里的对象 {}
设置hash
1 | 127.0.0.1:6379> HMSET hash name wclimb age 25 |
获取hash
1 | 127.0.0.1:6379> hmget hash name |
删除hash
hdel key field [field ……] 会删除一个或多个field,返回结果为成功删除fiel的个数
1 | 127.0.0.1:6379> hdel hash name |
获取所有field
1 | 127.0.0.1:6379> hkeys hash |
获取所有value
1 | 127.0.0.1:6379> hvals hash |
列表(list)
操作类型 | 操作 |
---|---|
添加 | rpush 、lpush、linsert |
查 | lrange、lindex、llen |
删除 | lpop 、rpop、 lrem、ltrim |
修改 | lset |
阻塞操作 | blpop、brpop |
添加
(1)从左边插入元素
lpush key value [value……]1
2127.0.0.1:6379> LPUSH list redis
(integer) 1
(1)从右边插入元素
rpush key value [value……]1
2127.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个元素
1 | 127.0.0.1:6379> lrange list 0 1 |
长度
1 | 127.0.0.1:6379> llen key |
删除
我们先添加几个
1 | 127.0.0.1:6379> LPUSH list a b c |
(1)从列表右侧弹出元素 rpop key
(2)从列表左侧弹出元素 lpop key
先看看现在的列表1
2
3
4
5
6127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "b"
3) "a"
4) "redis"
5) "test"
删除1
2127.0.0.1:6379> rpop list
"test"
我们发现test被删除了,现在看看我们的列表1
2
3
4
5127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "b"
3) "a"
4) "redis"
修改
lset key index newValue 修改指定索引下标的元素
1 | 127.0.0.1:6379> lset list 0 newValue |
第0个下标的元素被替换成最新的值
使用node连接redis
1 | > npm init |
连接redis
redis npm包链接 https://www.npmjs.com/package/redis
1 | var redis = require('redis'); |
设置获取key
1 | client.set('user', JSON.stringify({ name: 'wclimb', age: '18' }), redis.print); |
控制台打印
1 | > node index.js |
设置获取hash
1 | client.hmset("hosts", "mjr", "1", "another", "23", "home", "1234"); |
控制台打印1
2> node index.js
{ mjr: '1', another: '23', home: '1234' }
设置获取list
1 | client.LPUSH('list', [1, 2, 3, 4], redis.print); |
控制台打印1
2
3> node index.js
Reply: 8
Reply: 4,3,2,1,newValue,b,a,redis
基本用法和上面讲的都差不多,直接上去一顿写就完事了,完全可以不带脑子的使用各种api