下载redis:官网
解压 tar -xf redis-7.0.4.tar.gz
进入目录 下载gcc-c++进行编译 make && make install
将redis 的配置文件拷贝
cd /usr/
mkdir RDS
cp /opt/redis-7.0.4/redis.conf ./
配置文件
daemonize yes 修改 已后台启动
启动redis
redis-server /usr/RDS/redis.conf 通过指定配置文件启动
redis-cli -p 6379 使用客户端连接指定端口号
127.0.0.1:6379> shutdown 关闭redis
not connected> exit 退出
redis-benchmark 默认自带的压测工具
测试100个链接并发
redis-benchmark -h localhost -p 6379 -c 100 -n 10000
====== SET ======
10000 requests completed in 0.08 seconds 10000 请求用了 0.08秒
100 parallel clients ,每个请求100个请求
3 bytes payload 每次写入三个字节
keep alive: 1 只保证有一台服务器 单机性能
host configuration "save": 3600 1 300 100 60 10000
host configuration "appendonly": no
multi-thread: no
基础知识
REDIS -key
redis默认16数据库
127.0.0.1:6379> SELECT 3 切换数据库
OK
127.0.0.1:6379[3]> DBSIZE 查看数据库db大小
(integer) 0
127.0.0.1:6379[3]>
127.0.0.1:6379[3]> KEYS * 查看数据库所有的key
1) "name"
127.0.0.1:6379[3]>
127.0.0.1:6379[3]> FLUSHDB 清空数据库
OK
127.0.0.1:6379> FLUSHALL 清空(全部数据库)所有数据库
OK
127.0.0.1:6379> EXISTS name 判断 查看键(key)是否存在
(integer) 1
127.0.0.1:6379> MOVE name 1 移除name到1库
(integer) 1
127.0.0.1:6379> KEYS *
1) "age"
127.0.0.1:6379>
127.0.0.1:6379> EXPIRE age 10 过期时间
(integer) 1
127.0.0.1:6379> ttl age 剩余时间
(integer) 3
127.0.0.1:6379> ttl age
(integer) 2
127.0.0.1:6379[1]> TYPE name 查看当前key的类型
string
redis是单线程的 官方表示 redis 是基于内存操作的 cpu不是内存平静 redis的瓶颈是基于机器的内存和带宽网络。
redis 为什么这么快
redis是将全部数据放在内存的
数据类型 string
string
127.0.0.1:6379> APPEND key1 "hello" 追加键值
(integer) 7
127.0.0.1:6379> set key1 v1 设置值
OK
127.0.0.1:6379> get key 获取值
(nil)
127.0.0.1:6379> get key1
"v1"
127.0.0.1:6379> APPEND key1 "hello"
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379>
.
127.0.0.1:6379> STRLEN key1 查看键相对值的长度
(integer) 20
-----------
127.0.0.1:6379> INCR view 浏览量+1 递增
127.0.0.1:6379> DECR view 递减
(integer) 4
127.0.0.1:6379> DECR view
(integer) 3
127.0.0.1:6379> INCRBY view 10 递增+10
(integer) 13
127.0.0.1:6379> INCRBY view 10
(integer) 23
127.0.0.1:6379> INCRBY view 10
(integer) 33
127.0.0.1:6379> deCRBY view 10 递减 10
(integer) 23
127.0.0.1:6379> deCRBY view 10
(integer) 13
127.0.0.1:6379> deCRBY view 10
(integer) 3
127.0.0.1:6379>
-------
127.0.0.1:6379> GETRANGE key1 0 3 截取0-3区间
"helo"
127.0.0.1:6379> GETRANGE key1 0 -1 获取全部字符串
"heloohu"
127.0.0.1:6379> SETRANGE key2 3 xxx
(integer) 6
127.0.0.1:6379> get key2
"qwexxx"
127.0.0.1:6379> SETRANGE key2 3 xxxasdasd 替换指定位置开始的字符串
(integer) 12
127.0.0.1:6379> get key2
"qwexxxasdasd"
SETEX 设置过期时间
setnx 不存在 才设置 分布式锁 常用
127.0.0.1:6379> SETEX key3 10 hello SETEX 设置过期时间 设置 key3的值为 hello 30棉猴过期
OK
127.0.0.1:6379> ttl key3
(integer) 4
127.0.0.1:6379> ttl key3
(integer) 2
127.0.0.1:6379> get key2
"qwexxxasdasd"
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379> SETNX mykey redis setnx 不存在 才设置
(integer) 1
127.0.0.1:6379> key *
(error) ERR unknown command 'key', with args beginning with: '*'
127.0.0.1:6379> keys*
(error) ERR unknown command 'keys*', with args beginning with:
127.0.0.1:6379> keys *
1) "key2"
2) "key1"
3) "mykey"
127.0.0.1:6379> SETNX mykey "mongdb" 设置不成功 有值 创建失败
(integer) 0
127.0.0.1:6379> get mykey
"redis"
----
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3 同时设置多值 键值 键值 键值
OK
127.0.0.1:6379> KEYS *
1) "k3"
2) "k1"
3) "k2"
127.0.0.1:6379> MGET k1 k2 k3 同时获取
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> MSETNX k1 v1 k4 v4 原子性 要么一起成功 要么一起失败
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379>
# 对象
127.0.0.1:6379> MSET user:1:name zhangsan user:2:age 2
OK
127.0.0.1:6379> MGET user:1:name user:1:age
1) "zhangsan"
2) (nil)
127.0.0.1:6379> MGET user:1:name user:2:age
1) "zhangsan"
2) "2"
127.0.0.1:6379> GETSET db getset 如果不存在值 返回nil
(nil)
127.0.0.1:6379> get db
"getset"
127.0.0.1:6379> GETSET db mddb 存在值 则获取原来的值 并设置新的值
"getset"
127.0.0.1:6379> get db
"mddb"
127.0.0.1:637