Redis之Redis入门

Redis之Redis入门

学习视频遇见狂神说

测试性能

redis-benchmark是一个压力测试工具,是官方自带的性能测试工具!

redis-benchmark命令参数:

图片来自于菜鸟教程

测试:

#测试:20个并发  1000个请求
redis-benchmark -h localhost -p 6379 -c 20 -n 1000

开启redis

[root@localhost ~]# cd /usr/local/bin
[root@localhost bin]# redis-server yconfig/redis.conf 
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> 

先确保redis进程启动

[root@localhost bin]# ps -ef|grep redis
root       4007      1  0 14:11 ?        00:00:00 redis-server 127.0.0.1:6379
root       4015   3849  0 14:11 pts/0    00:00:00 redis-cli -p 6379
root       4063   4032  0 14:13 pts/1    00:00:00 grep --color=auto redis
[root@localhost bin]# 

结果:

在这里插入图片描述

分析:

在这里插入图片描述

基础的知识

redis默认有16个数据库

在这里插入图片描述

默认使用的是第0个数据库

可以使用select切换数据库

# 清除当前数据库的内容

[root@localhost bin]# redis-server yconfig/redis.conf 
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> select 3        # 切换数据库
OK
127.0.0.1:6379[3]> DBSIZE      # 查看数据库大小
(integer) 0
127.0.0.1:6379[3]> set name zhangsan
OK
127.0.0.1:6379[3]> DBSIZE
(integer) 1
127.0.0.1:6379[3]> select 6
OK
127.0.0.1:6379[6]> get name
(nil)
127.0.0.1:6379[6]> DBSIZE
(integer) 0
127.0.0.1:6379[6]> select 3
OK
127.0.0.1:6379[3]> get name
"zhangsan"
127.0.0.1:6379[3]> keys *
1) "name"
127.0.0.1:6379[3]> flushdb     # 清除当前数据库的内容
OK
127.0.0.1:6379[3]> keys *
(empty array)
127.0.0.1:6379[3]> select 0
OK
127.0.0.1:6379> keys *
1) "key:__rand_int__"
2) "myhash"
3) "mylist"
4) "counter:__rand_int__"


# 清除所有数据库的内容

127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> keys *
1) "key:__rand_int__"
2) "myhash"
3) "name"
4) "counter:__rand_int__"
5) "mylist"
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> get name 
(nil)
127.0.0.1:6379[3]> keys *
(empty array)
127.0.0.1:6379[3]> flushall     # 清除所有数据库的内容
OK
127.0.0.1:6379[3]> select 0
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> 

redis是单线程的!

官方答案

因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。

redis是用C语言编写的,官方提供的数据为100000+的QPS(每秒查询率(QPS,Queries-per-second)是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。)

redis为什么单线程还这么快?

误区

  1. 高性能的服务器一定是多线程的
  2. 多线程一定比单线程效率高

核心:

  1. 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
  2. 数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
  3. 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
  4. 使用多路I/O复用模型,非阻塞IO;
  5. 使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
Redis-Key
[root@localhost bin]# cd /usr
[root@localhost usr]# cd local/
[root@localhost local]# cd bin/
[root@localhost bin]# ls
dump.rdb         redis-check-aof  redis-cli       redis-server
redis-benchmark  redis-check-rdb  redis-sentinel  yconfig
[root@localhost bin]# redis-server yconfig/redis.conf 
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> exists name  #是否存在name这个key
(integer) 1
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> exists name1  #是否存在name1这个key
(integer) 0
127.0.0.1:6379> move name 1   #将name移动到db1
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379> expire name 10   #设置name的过期时间 ,单位是秒
(integer) 1
127.0.0.1:6379> ttl name      #查看name过期时间
(integer) 6
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) 0
127.0.0.1:6379> ttl name    
(integer) -2                  #name < 0 name以过期
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> 


查看key的类型

127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> type age
string
127.0.0.1:6379> type name
string

更多命令:查看官方文档(中文)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值