Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
redis-server.exe redis.windows.conf
redis-cli.exe -h 127.0.0.1 -p 6379 。
brew install redis
brew services start redis
redis-server /usr/local/etc/redis.conf
CONFIG GET CONFIG_SETTING_NAME
CONFIG GET port
字符串是最基本的类型,一个key对应一个value
SET name zfpx
GET name
GETRANGE key start end
getrange name 1 2
"fp"
SET age 1
INCR age
INCRBY age 6
DECR age
DECRBY age 9
DEL key 删除 key
DEL user
EXISTS key 判断一个key是否存在
EXISTS user
EXPIRE key seconds 设置过期时间
EXPIRE user 10
TTL key 以秒为单位返回给定key的剩余生存时间
TTL user
TYPE key 返回key所存储的值的类型
TYPE user
哈希值是一个字符串类型的Key和值的映射表,特别适合用于存储对象。
HSET person name 设置单个值
HMSET user name zfpx age 9 设置多个值
HGET user name 获取单个值
HMGET user name age 获取多个值
HGETALL user 获取多有值
HDEL key field
HDEL user name
HGETALL user
HKEYS user
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
返回列表的长度
LPUSH ids 2
LPUSH ids 1
RPUSH ids 3
RPUSH ids 4
RPUSH ids 5 6
LRANGE ids 0 2
LRANGE ids 0 -1
查看并删除
LPOP ids
RPOP ids
通过索引获取列表中的元素
LINDEX ids 0
获取列表长度
LLEN ids
移除列表元素
LREM ids count value
127.0.0.1:6379> lpush my 1
127.0.0.1:6379> lpush my 2
127.0.0.1:6379> lpush my 2
127.0.0.1:6379> lpush my 2
127.0.0.1:6379> lpush my 3
127.0.0.1:6379> lrange my 0 -1
1) "3"
2) "2"
3) "2"
4) "2"
5) "1"
127.0.0.1:6379> LREM my 2 2
(integer) 2
127.0.0.1:6379> lrange my 0 -1
1) "3"
2) "2"
3) "1"
集合是字符串类型的无序集合
如果集合中已经存在指定的元素则返回0,如果不存在则添加成功返回1
SADD tags 1
SADD tags 2
SADD tags 2
SADD tags 3
SADD tags 4 5 6
SMEMBERS tags
SMEMBERS tags
SCARD tags
SREM tags member
SREM tags 4
SMEMBERS tags
SADD A 1 2 3
SADD B 2 3 4
SINTER A B 交集
SDIFF A B 差集
SUNION A B 并集
有序集合和集合一样也是字符串的集合,而且不能重复 不同之外是每个集合都会关联一个double类型的分数,redis可以通过这个分类来为集合中的元素进行从小到大排序,元素不能重复,但分数可以重复
ZADD key score1 member1 [score2 member2]
ZADD levels 1 one
ZADD levels 2 two
ZADD levels 3 three
ZADD levels 4 four
ZCARD key
ZCARD levels
ZRANGE levels 0 -1 按范围查看
ZRANGE levels 0 2 WITHSCORES 按范围查看,并显示分数
ZREM key member [member ...]
ZADD levels 1 one
ZADD levels 2 two
ZREM levels one
ZRANGE levels 0 -1
const redis = require('redis');
let client = redis.createClient(6379, '127.0.0.1');
client.on('error', function (error) {
console.error(error);
});
//1. 字符串类型
client.set('name', 'zfpx', redis.print);
client.get('name', redis.print);
//2. 集合
client.hset('user', 'name', 'zfpx', redis.print);
client.hset('user', 'age', '8', redis.print);
client.hget('user', 'age', redis.print);
client.hkeys('user', function (err, replies) {
replies.forEach(function (item, index, items) {
client.hget('user', item, redis.print);
});
});
Redis 发布订阅是一种消息通信模式:发送者发送消息,订阅者接收消息,客户端可以订阅任意数量的频道。
SUBSCRIBE chat
PUBLISH chat zfpx
let client1 = redis.createClient(6379, '127.0.0.1');
let client2 = redis.createClient(6379, '127.0.0.1');
let count = 0;
client1.subscribe('food');
client1.subscribe('drink');
client1.on('message', function (channel, message) {
console.log(channel, message);
client1.unsubscribe('food');
});
client2.publish('food', '面包');
client2.publish('drink', '桔汁');
setTimeout(() => {
client2.publish('food', '面包2');
client2.publish('drink', '桔汁2');
}, 2000);
Redis 事务可以一次执行多个命令
DISCARD 可以取消事务,放弃执行事务块内的所有命令
127.0.0.1:6379> MULTI
127.0.0.1:6379> SET account1 1
QUEUED
127.0.0.1:6379> SET account2 3
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
127.0.0.1:6379> GET account1
"1"
127.0.0.1:6379> GET account2
"3"
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的
let redis = require('redis');
let client = redis.createClient(6379, '127.0.0.1');
client.multi().hset('user2', 'name2', 'zfpx2').hset('user2', 'age2', '92').exec(redis.print);
127.0.0.1:6379> SAVE
OK
该命令将在 redis 安装目录中创建dump.rdb文件。
将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务
CONFIG GET dir
BGSAVE
可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全。
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> CONFIG set requirepass 'zfpx'
OK
127.0.0.1:6379> CONFIG get requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH zfpx
OK
127.0.0.1:6379> CONFIG get requirepass