Redis基础

180 阅读4分钟

1.Redis简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

2.Redis 优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制的字符串、列表、哈希值、集合和有序集合等数据类型操作。
  • 原子性 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行
  • 单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 发布/订阅, 通知, key 过期等等特性。

3.数据类型

  • 字符串
  • 哈希值
  • 链表
  • 集合
  • 有序列表

3.1 字符串

字符串是最基本的类型,一个key对应一个value

SET 设置值

SET name yqjpx

GET 获取值

GET name

INCR INCRBY 递增

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

3.2 哈希值

哈希值是一个字符串类型的Key和值的映射表,特别适合用于存储对象。

HSET HMSET 设置值

HSET person name 设置单个值
HMSET user name yqjpx age 9  设置多个值

**HGET HGETALL 获取值 **

HGET user name 获取单个值
HMGET user name age 获取多个值
HGETALL user 获取多有值

HDEL key field 删除键

HDEL key field
HDEL user name
HGETALL user

HKEYS 获取所有的KEYS

3.3 列表

列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

LPUSH RPUSH 添加元素

返回列表的长度

LPUSH ids 2
LPUSH ids 1
RPUSH ids 3
RPUSH ids 4
RPUSH ids  5 6 

LRANGE 查看元素

LRANGE ids 0 2
LRANGE ids 0 -1

LPOP RPOP 弹出元素

查看并删除

LPOP ids 
RPOP ids

LINDEX ids 1

通过索引获取列表中的元素

LINDEX ids 0

LLEN key

获取列表长度

LLEN ids

3.4集合

集合是字符串类型的无序集合

**SADD 添加**
如果集合中已经存在指定的元素则返回0,如果不存在则添加成功返回1

SADD tags 1
SADD tags 2
SADD tags 2
SADD tags 3
SADD tags  4 5 6 

**SMEMBERS tags**
SMEMBERS 查看集合
SMEMBERS tags

**SCARD 获取集合元素个数**
SCARD tags

** SREM 删除元素**
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 添加元素**
ZADD key score1 member1 [score2 member2] 

ZADD levels 1 one
ZADD levels 2 two
ZADD levels 3 three
ZADD levels 4 four

**ZCARD 获取有序集合的成员数**
ZCARD key
ZCARD levels

**ZRANGE 查看有序集合**
ZRANGE levels  0 -1 按范围查看
ZRANGE levels  0 2 WITHSCORES 按范围查看,并显示分数

**ZREM 移除有序集合中的一个或多个成员**
ZREM key member [member ...] 
ZADD levels 1 one
ZADD levels 2 two
ZREM levels one
 ZRANGE levels  0 -1

4.Node.js中的使用

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', 'yqjpx', redis.print);
client.get('name', redis.print);
//2. 集合
client.hset('user', 'name', 'yqjpx', 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);
    });
});

5.Redis发布订阅

Redis 发布订阅是一种消息通信模式:发送者发送消息,订阅者接收消息,客户端可以订阅任意数量的频道。

image.png

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);

6. Redis事务

Redis 事务可以一次执行多个命令

  • 多个命令可以在执行EXEC命令之前放入缓存队列
  • 收到EXEC命令后会将缓存队列执行
  • 在执行事务的过程中,新提交的并不能被插入到事务执行序列中
  • DISCARD 可以取消事务,放弃执行事务块内的所有命令

其他: www.npmjs.com/package/red…