Skip to content

Redis

因为 mysql 存在硬盘,并且会执行 sql 的解析,会成为系统的性能瓶颈,所以我们要做一些优化。 计算机领域最经常考虑到的性能优化手段就是缓存了。能不能把结果缓存在内存中,下次只查内存就好了呢 所以做后端服务的时候,我们不会只用 mysql,一般会结合内存数据库来做缓存,最常用的是 redis。 因为需求就是缓存不同类型的数据,所以 redis 的设计是 key、value 的键值对的形式。 并且值的类型有很多:字符串(string)、列表(list)、集合(set)、有序集合(sorted set)、哈希表(hash)、地理信息(geospatial)、位图(bitmap)等。

官方的 RedisInsight,它号称是最好的 Redis GUI 工具:

常用命令

shell
# string
set key1 111

key "dong*"

# list操作
lpush list1 333
rpush list1 444
lpop 从左边删除
rpop 从右边删除
lrange list 0 -1

# set操作
sadd set1 111
sadd set1 111
sismember set1 111 判断是否是集合中的元素


# 排序需求
zadd zset1 5 xxx
zrange zset1 0 2 前三个

# hash
hset hash1 key1 1
hget hash1 key1

#geo

geoadd loc 13.361389 38.115556 "guangguang" 15.087269 37.502669 "dongdong"  ##实际使用zset
geodist loc guangguang dogndong # 计算距离
georadius loc 15 37 100 km # 搜索某半径的其他点

# time
expire dogn1 30 # 设置过气
ttl list1 # 查剩余过气时间

nest 里操作 Redis

创建项目

shell
nest new nest-redis -p npm
# 下载
npm install redis

在 AppModule 添加自定义的 provider

js
import {createClient} from 'redis'
@Module({
    providers:[
        AppService,
        {
            provide:'REDIS_CLIENT',
            async useFactory() {
                const client = createClient({
                    socket:{
                        host:'localhost',
                        port:6379
                    }
                })
                await client.connect();
                return client;
            }
        }
    ]
})

注入到 service 里用就好了

js
import {RedisClientType} from 'redis';
export class AppService{
    @Inject("REDIS_CLIENT")
    private redisClient:RedisClientType;
    async getHello() {
    const value = await this.redisClient.keys('*');
    console.log(value);

    return 'Hello World!';
  }
}

Released under the MIT License.