[TOC]
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操作
启动服务
1前提:前往一个方便管理redis持久化文件的路径再启动服务:dump.rdb 21)前台启动服务 3>: redis-server 42)后台启动服务 5>: redis-server --service-start 63)配置文件启动服务 7>: redis-server 配置文件的绝对路径 8>: redis-server --service-start 配置文件的绝对路径 9eg>: redis-server --service-start D:/redis/redis.conf
密码管理
-
提倡在配置文件中配置,采用配置文件启动 requirepass 密码
-
当服务启动后,并且连入数据库,可以再改当前服务的密码(服务重启,密码重置) config set requirepass 新密码
-
连入数据库,查看当前服务密码密码 config get requirepass
连接数据库
11)默认连接:-h默认127.0.0.1,-p(端口号)默认6379,-n(数据库编号)默认0,-a(密码)默认无 2>: redis-cli 3 42)完整连接: 5>: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码 6 73)先连接,后输入密码 8>: redis-cli -h ip地址 -p 端口号 -n 数据库编号 9>: 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
- "6"
- "5"
- "4"
- "3"
- "2"
- "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"
- "2"
- "3"
- "4"
- "5"
- "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
直接使用
1import redis 2 3rdb = redis.Redis( 4 host='127.0.0.1', 5 port=6379, 6 db=0, 7 password=None, 8 decode_responses=True 9) 10rdb.set('name', 'reese') 11print(rdb.get('name'))
连接池使用
1import redis 2 3pool = redis.ConnectionPool( 4 host='127.0.0.1', 5 port=6379, 6 db=0, 7 password=None, 8 decode_responses=True 9) 10rdb = redis.Redis(connection_pool=pool) 11 12print(rdb.get('name'))
一些操作:
1rdb.expire('user_name', 20) # 添加过期时间 2 3rdb.ttl('user_name') # 在python中不能查看 4 5rdb.mset(a=1, b=2) # 设置多个 6 7rdb.incr('num',222) # 后面直接加参数为数量,如果不加参数,默认加1 8 9rdb.lrem('list_1', 3, 0) # 要删的数量在后面,删除的元素在前面 10 11rdb.hmset('user', {'name':'neo', 'age':19}) # key单独写出,后面用字典方式添加