Redis
一、Redis基础
1 Redis是什么
是一个key-value存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
2 Redis特性
速度快:数据存在内存中(主要原因)、每秒10w读写、c语言实现、单线程模型
持久化:rdb和aof
多种数据结构:
5大数据结构
BitMaps位图:布隆过滤器 本质是 字符串
HyperLogLog:超小内存唯一值计数,12kb HyperLogLog 本质是 字符串
GEO:地理信息定位 本质是有序集合
支持多种编程语言:基于tcp通信协议,各大编程语言都支持
功能丰富:发布订阅(消息) Lua脚本,事务(pipeline)
简单:源代码几万行,不依赖外部库
主从复制:主服务器和从服务器,主服务器可以同步到从服务器中
高可用和分布式:
2.8版本以后使用redis-sentinel(哨兵)支持高可用
3.0版本以后支持分布式
3 下载和安装
3.1 windows
下载安装https://github.com/tporadowski/redis/releases
windows的启动与关闭服务自行百度。
3.2 linux
官方网址获取最新稳定版。
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
解压
tar -xzf redis-6.2.6.tar.gz
建立软连接,方便升级
ln -s redis-6.2.6 redis
编译安装
cd redis
make
make install
可执行文件一般都在src目录下
启动方式
可以在src下启动redis-server
,默认监听6379端口
也可以在启动时动态指定监听端口
redis-server --port 6666
还可以通过配置文件启动
redis-server redis.conf
# redis.conf 为配置文件
在redis安装目录下有redis.conf
,有一些默认配置,常用的配置项有:
daemonize yes # 是否以守护进程启动
pidfile /var/run/redis.pid # pid进程号的位置,删除
port 6379 # 启动端口号
dir "/opt/soft/redis/data" # 工作目录,必须是已存在的目录
logfile “6379.log” # 日志位置
requirepass 123456 # 密码
bind 127.0.0.1 # 绑定监听端口,默认127.0.0.1本地回环地址不支持远程连接;0.0.0.0可以远程连接
protected-mode no # 保护模式
点击这里下载一个redis.conf
文件示例,查看更多配置项。
通过ps命令查看redis是否启动
ps aux | grep redis
连接(默认情况)
redis-cli -h 地址 -p 端口号 -a 密码(如果没有密码可以省略此项)
redis-cli -h 127.0.0.1 -p 6379
redis-cli # 默认连接到127.0.0.1:6379
使用ping
命令测试连接情况
redis-cli -h 127.0.0.1 -p 6379 ping
关闭方式
kill -9 进程pid
# 或者
redis-cli shutdown
3.3 redis-cli中查看修改配置
在redis-cli内查看配置信息
config get *
会列出所有配置信息(键值对存储,所以总数除以二,有一百条左右)
修改某些配置信息
CONFIG SET requirepass 123456 # 修改密码
CONFIG SET maxmemory 128M # 设置最大使用的内存,默认为0(不限)
CONFIG REWRITE # 保存到配置文件
4 redis使用场景
缓存系统:使用最广泛的就是缓存
计数器:网站访问量,转发量,评论数(文章转发,商品销量,单线程模型,不会出现并发问题)
消息队列:发布订阅,阻塞队列实现(简单的分布式,blpop:阻塞队列,生产者消费者)
排行榜:有序集合(阅读排行,点赞排行,推荐(销量高的,推荐))
社交网络:很多特效跟社交网络匹配,粉丝数,关注数
实时系统:垃圾邮件处理系统,布隆过滤器
5 常用方法
只列举出常用命令,更多命令可以查看中文文档(2.8),或者官方文档,前者做了分类,后者是命令大全。推荐前者,后者作为补充。
keys
# 查找所有符合给定模式 pattern 的 key
KEYS pattern
#打印出所有key
keys *
#打印出所有以he开头的key
keys he*
#打印出所有以he开头,第三个字母是h到l的范围
keys he[h-l]
#三位长度,以he开头,?表示任意一位
keys he?
# 匹配 hello 和 hallo ,但不匹配 hillo
KEYS h[ae]llo
KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个很大的数据集中查找特定的key ,用scan命令代替。
exists
EXISTS key
# 检查给定 key 是否存在
# 若 key 存在,返回 1 ,否则返回 0
expire
为给定 key
设置生存时间,当 key
过期时(生存时间为 0
),它会被自动删除。
EXPIRE key seconds
# 可以对一个已经带有生存时间的 key 执行 EXPIRE 命令,新指定的生存时间会取代旧的生存时间。
# 设置成功返回 1 。
ttl
以秒为单位,返回给定 key
的剩余生存时间(TTL, time to live)
ttl key
# 以秒为单位,返回 key 的剩余生存时间
# 当 key 存在但没有设置剩余生存时间时,返回 -1
# 当 key 不存在时,返回 -2
del
删除给定的一个或多个键,不存在的会被忽略
DEL key [key ...]
# 返回值为被删除 key 的数量
persist
移除给定 key
的生存时间,将这个 key
从『易失的』(带生存时间 key
)转换成『持久的』(一个不带生存时间、永不过期的 key
)。
PERSIST key
# 当生存时间移除成功时,返回 1
# 如果 key 不存在或 key 没有设置生存时间,返回 0
type
返回 key
所储存的值的类型。
TYPE key
# 返回值有5+1种
# none (key不存在)
# string (字符串)
# list (列表)
# set (集合)
# zset (有序集)
# hash (哈希表)
rename
将key重命名为newkey,如果新旧key相同,或者key不存在时,返回错误,如果newkey已经存在,则覆盖原来的
RENAME key newkey
# 改名成功时提示 OK ,失败时候返回一个错误
randomkey
从当前数据库中随机返回(不删除)一个 key
。
RANDOMKEY
move
将当前数据库的 key
移动到给定的数据库 db
当中。
MOVE key db
dbsize
返回当前数据库的key
的数量。
DBSIZE
info
以一种易于解释且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。
INFO
flushdb
清空当前数据库中的所有key
警告:谨慎使用。
FLUSHDB
# 此命令从不失败
flushall
清空所有数据库中的所有key(清空整个 Redis 服务器的数据)
警告:谨慎使用。
FLUSHALL
# 此命令从不失败
client setname
为当前连接分配一个名字,新连接默认没有名字,设置名字里不允许使用空格
CLIENT SETNAME connection-name
# 为连接设置名字
CLIENT SETNAME hello-world-connection
# 将连接的名字设为空字符串 "",相当于移除名字
CLIENT SETNAME ""
client getname
返回 CLIENT SETNAME
命令为连接设置的名字
CLIENT GETNAME
client list
以人类可读的格式,返回所有连接到服务器的客户端信息和统计数据。
CLIENT LIST
client kill
关闭地址为 ip:port
的客户端,必须是CLIENT LIST
返回的的ip和端口才可以。
因为 Redis 使用单线程设计,所以当 Redis 正在执行命令的时候,不会有客户端被断开连接。
如果要被断开连接的客户端正在执行命令,那么当这个命令执行之后,在发送下一个命令的时候,它就会收到一个网络错误,告知它自身的连接已被关闭。
CLIENT KILL ip:port
# 成功关闭时,返回 OK
select
切换到指定的数据库,数据库索引号 index
用数字值指定,以 0
作为起始索引值。
默认使用 0
号数据库。
SELECT index
monitor
实时打印出 Redis 服务器接收到的命令,调试用
MONITOR
6 字符串命令
get
返回 key
所关联的字符串值。
如果 key
不存在那么返回特殊值 nil
。
GET key
set
设置键值,如果 key
已经持有其他值,使用此命令会覆盖掉原值。
SET key value [EX seconds] [PX milliseconds] [NX|XX]
7 哈希命令
hget
返回哈希表 key
中给定域 field
的值。
HGET key field
hset
将哈希表 key
中的域 field
的值设为 value
。
HSET key field value
8 列表命令
列表是一个双端队列。
9 集合命令
集合无序,不重复。
10 有序集合命令
二、redis其它部分
三、python-redis
本文来自博客园,作者:yyyz,转载请注明原文链接:https://www.cnblogs.com/yyyzyyyz/p/15517013.html