目录

  • Redis简介
  • 安装
  • 与其他数据库的比较
  • Redis VS MySQL
  • Redis VS Memcache
  • Redis操作
  • 启动服务
  • 密码管理
  • 连接数据库
  • 关闭服务
  • 数据持久化
  • Redis五种数据类型的操作
  • string字符串
  • list列表
  • hash(字典)
  • set集合
  • sorted set 有序集合
  • python操作Redis
  • 直接使用
  • 连接池使用

Redis简介

Redis以键值对的形式储存数据

Redis支持的数据类型有:string、list、set、zset(sorted set)、hash

Redis特点:

  • 响应速度快,数据量小
  • Redis以内存作为数据存储介质,所以读写数据的效率极高

安装

下载地址:

与其他数据库的比较

Redis VS MySQL

  • redis: 内存数据库(读写快)、非关系型(操作数据方便、数据固定)
  • mysql: 硬盘数据库(数据持久化)、关系型(操作数据间关系、可以不同组合)

大量访问的临时数据,才有redis数据库更优

Redis VS Memcache

  • redis: 操作字符串、列表、字典、无序集合、有序集合 ,支持数据持久化(数据丢失可以找回(默认持久化,主动持久化save)、可以将数据同步给mysql) , 高并发支持
  • memcache: 操作字符串 , 不支持数据持久化 , 并发量小

Redis操作

启动服务

前提:前往一个方便管理redis持久化文件的路径再启动服务:dump.rdb
1)前台启动服务
>: redis-server
2)后台启动服务
>: redis-server --service-start
3)配置文件启动服务
>: redis-server 配置文件的绝对路径
>: redis-server --service-start 配置文件的绝对路径
eg>: redis-server --service-start D:/redis/redis.conf

密码管理

  • 提倡在配置文件中配置,采用配置文件启动
    requirepass 密码
  • 当服务启动后,并且连入数据库,可以再改当前服务的密码(服务重启,密码重置)
    config set requirepass 新密码
  • 连入数据库,查看当前服务密码密码
    config get requirepass

连接数据库

1)默认连接:-h默认127.0.0.1,-p(端口号)默认6379,-n(数据库编号)默认0,-a(密码)默认无
>: redis-cli

2)完整连接:
>: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码

3)先连接,后输入密码
>: redis-cli -h ip地址 -p 端口号 -n 数据库编号
>: auth 密码

关闭服务

  • 在没有连接进数据库时执行 redis-cli shutdown
  • 连接进数据库后执行 shutdown

数据持久化

  • 配置文件的 默认配置
  • save 900 1 超过900秒有1个键值对操作,会自动调用save完成数据持久化
  • save 300 10 超过300秒有10个键值对操作,会自动调用save完成数据持久化
  • save 60 10000 超过60秒有10000个键值对操作,会自动调用save完成数据持久化
  • 安全机制
  • 当redis服务不可控宕机,会默认调用一下save完成数据持久化
  • 主动持久化
  • save 连入数据库时,主动调用save完成数据持久化
  • 注:数据持久化默认保存文件 dump.rdb,保存路径默认为启动redis服务的当前路径

Redis五种数据类型的操作

string字符串

  • 基本操作
# 设置
set key value  (例如: set name reese)

# 获取value值
get key (例如: get name)

# key是唯一的,不能用同一个key,否则会覆盖


# 设置多个值
mset k1 v1 k2 v2 ...

# 获取多个值
mget k1 k2 ...

# 给key设置过期时间
setex key exp value

# 将 key 所储存的值加上增量 increment 。
incrby key increment
  • 查看过期时间
127.0.0.1:6379> ttl name
(integer) -1

# -1代表永久, -2代表不存在
  • 设置过期时间
# 给已存在的key设置过期时间
expire key seconds   (例子:expire name 10)

# 设置key的同时,设置过期时间
set key value ex seconds  (例如: set name reese ex 20)
或者
setex key seconds value   (例如: setex name 20 cwz)
  • 追加
# 给已有的value值,添加新的值

append key value
  • 设置/获取多个
# 设置多个string
mset key value key value ...

例如:
mset user cwz password 123


# 获取多个
mget key key key ...

例子:
mget user password
  • key操作
# 查看所有的key值
keys *

# 删除
del key

# 查看key是否存在,存在返回1,不存在返回0
exists key

# 查看key类型
type key
  • 运算
set num 1   # 自动识别,字符串里面的整数

incr num    # 加1

decr num    # 减1

incrby num 50  # 增加多个

descby num 50  # 减少多个

list列表

栈:先进后出

队列:先进先出

  • 设置
# 左添加   栈 先进后出
127.0.0.1:6379> lpush my_list 1 2 3 4 5 6 
(integer) 6

# 右添加   队列 先进先出
rpush my_list 7 8
  • 查看
查看所有:
127.0.0.1:6379> lrange my_list 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
  • 获得list的元素个数
llen my_list
  • 查看特定索引位置的元素
lindex my_list 2
  • 删除
lpop my_list     # 删除左边第一个

rpop my_list     # 删除右边第一个


lrem my_list 1 5  # 表示从左往右删除1个5

lrem my_list 0 5  # 表示删除所有的5

lrem my_list -2 5  # 表示从右往左删除2个5

hash(字典)

是一个string类型的field和value的映射表,特别适合用于存储对象

hash的key必须是唯一的

Key : (field:value)

  • 设置
hset key field value

# 例子:
hset users name xxx
  • 获取
hget key field

# 例子:
hget users name
  • 删除
hdel key field

# 例子:
hdel users name
  • 设置多个
hmset user name yyy age 19 sex male
  • 获取多个
hmget user name age sex
  • 获取全部field value
hgetall user
  • 获取所有的field
hkeys user
  • 获取所有的value
hvals user
  • 获取field个数
hlen key
  • 获取field类型
type key

set集合

  • 设置
sadd my_set 1 2 3 4 5 6
  • 获取
smembers key
  • 删除
# srem指定删除
srem key members

# spop随即删除
spop key
  • 移动一个集合的值到另一个集合
smove oldkey newkey members

例子:
smove my_set1 my_set2 3
  • 判断集合存在某个值
sismember key value
  • 交集
sinter key1 key2 ...


# 把key1 key2的交集合并到newkey
sinterstore newkey key1 key2
  • 并集
sunion key1 key2 ...

# 把key1 key2的并集合并到newkey
sunionstore newkey key1 key2
  • 差集
sdiff key1 key2 ...

# 把key1 key2的差集合并到newkey
sdiffstore newkey key1 key2
  • 获取集合个数
scard key
  • 随机返回一个数据
srandmember key

sorted set 有序集合

  • 设置
zadd key score member   (权,权重,顺序)

例子:
127.0.0.1:6379> zadd my_zset1 1 1 2 2 3 3 4 4 5 5 6 6

127.0.0.1:6379> zrange my_zset1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
  • 查询获取
# zrange 正序

zrange my_zset1 0 -1


# zrevrange 倒序

zrevrange my_zset1 0 -1
  • 删除
zrem my_zset1 2
  • 索引
# zrank 正序
zrank key member

# zrevrank 反序
zrevrank key member
  • zcard 查看有序集合元素数
zcard key
  • zrangebyscore 返回集合中score在给定区间的元素
# zrange my_zset 0 -1 withscores

zrangebyscore my_zset 2 3 withscores
# 返回了score在2~3区间的元素
  • zcount 返回集合中在定区间的数量
zount key min max

例子
zount my_zset 2 3
  • zscore 查看score(权重)值
zscore key member

例子
zscore my_zset 3
  • zremrangebyrank 删除集合中排名在定区间中的元素
# zrange my_zset 0 -1 withscores
zrerangebyrank my_zset 1 3
  • zremrangebyscore 删除集合中score在给定区间的元素
# zrange my_zset 0 -1 withscores
zremrangebyscore my_zset 1 3

python操作Redis

安装 包 pip install redis

直接使用

import redis

rdb = redis.Redis(
    host='127.0.0.1',
    port=6379,
    db=0,
    password=None,
    decode_responses=True
)
rdb.set('name', 'reese')
print(rdb.get('name'))

连接池使用

import redis

pool = redis.ConnectionPool(
    host='127.0.0.1',
    port=6379,
    db=0,
    password=None,
    decode_responses=True
)
rdb = redis.Redis(connection_pool=pool)

print(rdb.get('name'))

一些操作:

rdb.expire('user_name', 20)  # 添加过期时间

rdb.ttl('user_name') # 在python中不能查看

rdb.mset(a=1, b=2)   # 设置多个

rdb.incr('num',222)  # 后面直接加参数为数量,如果不加参数,默认加1

rdb.lrem('list_1', 3, 0) # 要删的数量在后面,删除的元素在前面

rdb.hmset('user', {'name':'neo', 'age':19}) # key单独写出,后面用字典方式添加