目录
redis介绍安装
介绍
redis 是什么
- 是一个软件(用c语言写的,初级版本代码只有1w多行 7.x,公司 5.x,4.x多)
- 非关系型(没有外键关联关系)数据库,nosql(not only sql)数据库
- 数据都放在内存中
- key-value形式存储
- 有5大数据类型:string(字符串)、list(数组/列表)、set(集合)、zset(sorted set,有序集合)、hash(哈希类型/字典)
redis 好处
- 速度快,因为数据存在内存中,类似于python的字典的优势就是查找和操作的速度快
- 支持丰富数据类型,支持string,list,set,sorted set,hash
- 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
- 丰富的特性:可用于缓存(最广泛:缓存数据库),消息,按key设置过期时间,过期后将会自动删除
redis 最适合的场景
- 会话缓存:Session Cache
- 全页缓存:接口缓存
- 队列:程序的解耦,但不是专业的,真正专业的消息队列:kafka,rabbitmq...
- 排行榜/计数器:有序集合, 字符串类型做计数器累加(由于6.x之前redis是单线程单进程架构,不存在并发安全问题)
redis 为什么这么快?
- 纯内存操作
- 使用io多路复用的网络模型(select,poll,epoll模型),epoll模型
- 单线程,单进程架构,没有进程线程间切换的消耗
安装
Windows下安装
3.x:Releases · microsoftarchive/redis · GitHub
5.x:Releases · tporadowski/redis · GitHub
下载完成后,勾上如图所示的地方,然后剩下的一路下一步就行。
安装成功后打开终端,输入:
redis-cli
liunx安装
# 安装下载命令
yum install wget
# 下载redis包
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
# 解压
tar -xzf redis-5.0.7.tar.gz
# 进入文件后编译安装
cd redis-5.0.7
make&&make install
# 建立软连接
ln -s ./src/redis-cli /usr/bin/redis-cli
ln -s ./src/redis-server /usr/bin/redis-server
"""方式一:最简单的启动"""
# 启动服务
redis-server &
# 启动客户端,不加-h,-p默认为127.0.0.1:6379
redis-cli -h 地址 -p 端口
"""方式二:配置文件启动"""
# 创建一个配置文件,配置文件内容参考redis安装目录下的redis.conf
vi redis.conf
# 配置启动服务端
redis-server redis.conf
# 启动客户端,不加-h,-p默认为127.0.0.1:6379
redis-cli -h 地址 -p 端口
# 有密码的情况两种登陆方式
# 方式一
redis-cli -h 127.0.0.1 -p 6370 -a 123456
# 方式二
redis-cli
auth 123456
# 更改密码
CONFIG SET requirepass 123456
CONFIG REWRITE # 把更改保存到配置文件
liunx卸载redis
# 1、查看redis进程;
ps aux|grep redis
# 2、kill掉进程;
kill 进程id
# 4、删除redis对应的文件
rm -f /usr/local/bin/redis*
# 5、删除对应的文件
rm -rf redis-5.0.7
通用命令
####1-keys
#打印出所有key
keys *
#打印出所有以he开头的key
keys he*
#打印出所有以he开头,第三个字母是h到l的范围
keys he[h-l]
#三位长度,以he开头,?表示任意一位
keys he?
#keys命令一般不在生产环境中使用,生产环境key很多,时间复杂度为o(n),用scan命令
####2-dbsize 计算key的总数
dbsize #redis内置了计数器,插入删除值该计数器会更改,所以可以在生产环境使用,时间复杂度是o(1)
###3-exists key 时间复杂度o(1)
#设置a
set a b
#查看a是否存在
exists a
(integer) 1
#存在返回1 不存在返回0
###4-del key 时间复杂度o(1)
删除成功返回1,key不存在返回0
###5-expire key seconds 时间复杂度o(1)
expire name 3 #3s 过期
ttl name #查看name还有多长时间过期
persist name #去掉name的过期时间
###6-type key 时间复杂度o(1)
type name #查看name类型,返回string
### 7 其他
info命令:内存,cpu,主从相关
client list 正在连接的会话
client kill ip:端口
dbsize 总共有多少个key
flushall 清空所有
flushdb 只清空当前库
select 数字 选择某个库 总共16个库
monitor 记录操作日志,夯住
字符串命令
###1---基本使用get,set,del
get name #时间复杂度 o(1)
set name lqz #时间复杂度 o(1)
del name #时间复杂度 o(1)
###2---其他使用incr,decr,incrby,decrby
incr age #对age这个key的value值自增1
decr age #对age这个key的value值自减1
incrby age 10 #对age这个key的value值增加10
decrby age 10 #对age这个key的value值减10
#统计网站访问量(单线程无竞争,天然适合做计数器)
#缓存mysql的信息(json格式)
#分布式id生成(多个机器同时并发着生成,不会重复)
###3---set,setnx,setxx
set name lqz #不管key是否存在,都设置
setnx name lqz #key不存在时才设置(新增操作)
set name lqz nx #同上
set name lqz xx #key存在,才设置(更新操作)
###4---mget mset
mget key1 key2 key3 #批量获取key1,key2.。。时间复杂度o(n)
mset key1 value1 key2 value2 key3 value3 #批量设置时间复杂度o(n)
#n次get和mget的区别
#n次get时间=n次命令时间+n次网络时间
#mget时间=1次网络时间+n次命令时间
###5---其他:getset,append,strlen
getset name lqznb #设置新值并返回旧值 时间复杂度o(1)
append name 666 #将value追加到旧的value 时间复杂度o(1)
strlen name #计算字符串长度(注意中文) 时间复杂度o(1)
###6---其他:incrybyfloat,getrange,setrange
increbyfloat age 3.5 #为age自增3.5,传负值表示自减 时间复杂度o(1)
getrange key start end #获取字符串制定下标所有的值 时间复杂度o(1)
setrange key index value #从指定index开始设置value值 时间复杂度o(1)
标签:set,name,Redis,复杂度,redis,介绍,key,安装,###
From: https://www.cnblogs.com/yume-zbh/p/16596339.html