Redis数据库安装与使用总结
Redis语句总结
一、基本概念
Redis 全称: Remote Dictionary Server(远程字典服务器)的缩写,以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。 使用C语言编写,并以内存作为数据存储介质,所以读写数据的效率极高
*redis的官方只提供了linux版本的redis,window系统的redis是微软团队根据官方的linux版本高仿的
二、Redis数据库特点
Redis支持数据的持久化
可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
持久化的两种方式:
RDB(Redis DataBase)
RDB持久化通过fork出一个子进程,在指定的时间间隔内将内存中的数据集快照写入到二进制文件中。这个文件通常命名为`dump.rdb`。
AOF(Append Only File)
AOF持久化通过记录所有的写命令,并以追加式的方式将这些命令保存到AOF文件中。
三、Redis的应用场景
- 缓存系统("热点" 数据:高频读、低频写):缓存用户信息,优惠券过期时间,验证码过期时间、session、token等
- 计数器:帖子的浏览数,视频播放次数,评论次数、点赞次数等
- 消息队列,秒杀系统
- 排行榜(有序集合)
- 发布订阅:粉丝关注、消息通知
四、Redis安装
安装包下载地址 (建议使用5.X+版本)
平台安装软件
Windows 系统安装并启动
Redis
双击 .msi 文件安装软件
通过指定配置文件路径启动
Redis
服务器redis-server D:/soft/redis/redis.windows.conf
Redis
服务器 启动/停止# 启动服务
redis-server --service-start
# 关闭服务
redis-server --service-stop
Ubuntu平台安装软件
安装命令:sudo apt-get install -y redis-server
卸载命令:sudo apt-get purge --auto-remove redis-server
关闭命令:sudo service redis-server stop
开启命令:sudo service redis-server start
重启命令:sudo service redis-server restart
配置文件:/etc/redis/redis.conf
五、Redis基本配置
配置
# window下的配置文件保存在软件 安装目录下 # mac或者linux操作系统Redis的配置信息在/etc/redis/redis.conf下。
# 查看编辑指令:
sudo vi /etc/redis/redis.conf
核心配置选项
绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀个真实ip
bind 127.0.0.1
端⼝,默认为6379
port 6379
是否以守护进程运⾏
# 1. 如果以守护进程运⾏,则不会在命令⾏阻塞,类似于服务
# 2. 如果以⾮守护进程运⾏,则当前终端被阻塞
# 3. 设置为yes表示守护进程,设置为no表示⾮守护进程
# 4. 推荐设置为yes
daemonize yes
RDB持久化的备份文件
dbfilename dump.rdb
RDB持久化数据库数据文件的所在目录
dir /var/lib/redis
⽇志⽂件
logfile "/var/log/redis/redis-server.log"
数据库,默认有16个
database 16
六、基本指令
# 启动redis服务器
sudo service redis start
# 关闭redis服务器
sudo service redis stop
# 运⾏连接测试命令
ping
# 本地连接
redis-cli
# 远程连接
redis-cli -h IP地址 -P 端口
# 切换数据数据(Redis默认支持16个数据库,从0开始的递增数字命名)
select 库名
# 查看服务器端和客户端的帮助⽂档
redis-server --help
redis-cli --help
# 其他指令
# 查看redis服务器进程
ps aux | grep redis
# 杀死redis服务器
sudo kill -9 pid
# 指定加载的配置文件
sudo redis-server /etc/redis/redis.conf
# 清空所有库中键值对
flushall
# 清空当前库中键值对
flushdb
五、Reids数据结构
- redis是key-value的数据结构,每条数据都是⼀个键值对
- 键的类型是字符串
- 键不能重复
- 值的类型分为五种自有类型和一种自定义类型:
- 字符串string
- 哈希hash
- 列表list
- 集合set
- 有序集合zset
- 数据的操作行为
- 保存
- 修改
- 获取
- 删除
- 官⽹命令⽂档
六、数据操作
1. string类型
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
【保存】
如果设置的键不存在则为添加,如果设置的键已经存在则修改
设置键值
set key value # eg: 设置键为name值为fl的数据
set name fl
设置键值,值不可修改
setnx key value # eg: 设置键为name值为fl的数据
setnx name fl # setnx键对应的值不可修改,这里修改name无效
setnx name fl1
get name
>> "fl"
设置多个键值
mset key1 value1 key2 value2 ... # eg: 设置键为'a1'值为'python'、键为'a2'值为'java'、键为'a3'值为'c'
mset a1 python a2 java a3 c
追加值
append key value # eg: 向键a1对应的值中追加值' haha'
append a1 'haha'
自增自减
# key 对用值必须为数字类型字符串
incr key
decr key
incrby key increment
decrby key increment # eg: 向键age对应的值自增100
incrby age 100
查询字符串长度
strlen key # eg: 查询键age的长度
strlen age
【查询】
获取:根据键获取值,如果不存在此键则返回nil
get key # eg: 获取键'name'的值
get 'name'
根据多个键获取多个值
mget key1 key2 ... # eg: 获取键a1、a2、a3'的值
mget a1 a2 a3
2. 键命令
查找键,参数⽀持正则表达式
keys pattern # eg1: 查看所有键
keys * # *:匹配任意字符
# ?:匹配一个字符
# []:匹配括号里的任一字符
# \ :转义
# eg2: 查看名称中包含a的键
keys 'a*'
判断键是否存在,如果存在返回1,不存在返回0
exists key1 # eg: 判断键a1是否存在
exists a1
查看键对应的value的类型
type key # eg:查看键a1的值类型,为redis⽀持的五种类型中的⼀种
type a1
删除键及对应的值
del key1 key2 ... # eg: 删除键a2、a3
del a2 a3
设置过期时间,以秒为单位; 如果没有指定过期时间则⼀直存在,直到使⽤DEL移除
expire key seconds # eg: 设置键'a1'的过期时间为3秒
expire 'a1' 3
查看有效时间,以秒为单位
ttl key # eg:查看键'bb'的有效时间
ttl bb
让键重新变成永久(成功返回1, 否则返回0,表示键不存在或者本身就是永久的)
PERSIST 键
设置键值对同时设置过期时间:
setex key value EX seconds
setex key seconds value # eg: 设置键为aa值为aa过期时间为3秒的数据
setex aa aa ex 3
setex aa 3 aa
3.hash类型
hash⽤于存储对象,对象的结构为属性、值; 值的类型为string
【增加、修改】
设置单个属性 或 多个属性
hset key field value
hmset key field1 value1 field2 value2 ... # eg: 设置键 user的属性name为fengling
hset user name fengling
# eg: 设置键u2的 属性name为fengling、属性age为18
hmset u2 name fengling age 18
其他
# 存在返回1 不存在返回0
hexists 键 域 # 不存在是添加,存在什么也不做
hsetnx 键 域 域值 # 增加数字
hincrby 键 域 自增值
【查询】
获取指定键 所有的属性 或 所有的值
hkeys key
hvals key # eg1: 获取键u2的所有属性
hkeys u2
# eg2: 获取键u2所有属性的值
hvals u2
获取⼀个属性的值 或 多个属性的值
hget key field
hmget key field1 field2 ... # eg: 获取键u2属性'name'的值
hget u2 'name'
# eg: 获取键u2属性'name'、'age的值
hmget u2 name age
获取键中所有属性和值
hgetall key
获取域的个数
hlen key # eg: 获取键u2属性个数
hlen u2
【删除】
删除属性,属性对应的值会被⼀起删除
hdel key field1 field2 ... # eg: 删除键'u2'的属性'age'
hdel u2 age
4. list类型
列表的元素类型为string; 按照插⼊顺序排序
【增加】
插⼊数据
# 在列表左侧/右侧插入数据
lpush key value1 value2 ...
rpush key value1 value2 ... # eg1:从键为'a1'的列表左侧加⼊数据a b c
lpush a1 a b c
# eg2:从键为'a1'的列表右侧加⼊数据0 1
rpush a1 0 1
在指定元素的前或后插⼊新元素
linsert key before或after 现有元素 新元素 # eg: 在键为'a1'的列表中元素'b'前加⼊'3'
linsert a1 before b 3
【查询】
返回列表⾥指定范围内的元素
start、stop为元素的下标索引
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
lrange key start stop # eg: 获取键为'a1'的列表所有元素
lrange a1 0 -1
返回列表⾥指定索引值的元素
lindex key value # eg: 获取列表num中索引为1的元素
lindex num 1
返回列表成员长度
llen key # eg: 获取列表num中元素个数
llen num
【修改】
设置指定索引位置的元素值
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素
lset key index value # eg: 修改键为'a1'的列表中下标为1的元素值为'z'
lset a 1 z
【删除】
删除指定元素
将列表中前count次出现的值为value的元素移除
count > 0: 从头往尾移除
count < 0: 从尾往头移除
count = 0: 移除所有
lrem key count value # eg1:向列表'a2'中加⼊元素'a'、'b'、'a'、'b'、'a'、'b'
lpush a2 a b a b a b # eg2:从'a2'列表右侧开始删除2个'b'
lrem a2 -2 b # eg3:查看列表'py12'的所有元素
lrange a2 0 -1
移除并获取列表的第一个成员或最后一个成员
# 删除列表第一个成员, 并获取移除的元素
lpop key
# 删除列表最后一个成员, 并获取移除的元素
rpop key
5. set类型
set 无序集合,元素为string类型;元素具有唯⼀性,不重复
说明:对于集合没有修改操作
【增加】
添加元素
sadd key member1 member2 ... # eg: 向键'a3'的集合中添加元素'zhangsan'、'lisi'、'wangwu'
sadd a3 zhangsan sili wangwu
【查询】
获取所有的元素
smembers key # eg: 获取键'a3'的集合中所有元素
smembers a3
随机获取多个元素
# count>0,随机获取count个元素,不可重复
# count<0,随机获取count个元素,可重复
SRANDMEMBER key [count]
获取元素个数
scard 键
【删除】
随机删除count个元素
spop 键 [count]
删除指定元素
srem key value1 value2 value3 ... # eg: 删除键'a3'的集合中元素'wangwu'和 'zs'
srem a3 wangwu zs
【判断】
判断元素是否存在
sismember 键 元素值
【交集、差集和并集】
# 交集、比较多个集合中共同存在的成员
sinter key1 key2 key3 ...
# 差集、比较多个集合中不同的成员
sdiff key1 key2 key3 ...
# 并集、合并所有集合的成员,并去重
sunion key1 key2 key3 ...
# eg: 计算set1 set2 set3 set4的交并差集
sadd set1 1 2 3 4
sadd set2 1 3 4 5
sadd set3 1 3 5 6
sadd set4 2 3 4
sinter set1 set2
>> "1" "3" "4"
sinter set1 set2 set3 set4
>> "3"
sdiff set1 set2
>> "2"
sdiff set2 set1
>> "5"
sunion set1 set2 set3 set4
>> "1" "2" "3" "4" "5" "6"
6. zset类型
zet 有序集合(sorted set) 元素为string类型; 元素具有唯⼀性,不重复. 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从小到大排序
说明:没有修改操作
【增加】
添加元素
zadd key score1 member1 score2 member2 ... # 向键'a4'的集合中添加元素'lisi'、'wangwu'、'zhaoliu'、'zhangsan',权重分别为4、5、6、3
zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
【查询】
返回指定范围内的元素, 按score排序
start、stop为元素的下标索引
索引从左侧开始,第⼀个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素
zrange key start stop [withscores]
zrevrange key start stop [withscores] # eg1: 获取键'a4'的集合中所有元素,按score从低到高排序
zrange a4 0 -1
# eg2: 获取键'a4'的集合中所有元素,按score从低到高排序,并输出score
zrange a4 0 -1 withscores
# eg3: 获取键'a4'的集合中所有元素,按score从高到低排序
zrevrange a4 0 -1
返回score值在min和max之间的成员
# LIMIT中offset代表跳过多少个元素,count是返回几个
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count] # eg1: 获取键'a4'的集合中权限值在5和6之间的成员,按score从低到高排序
zrangebyscore a4 5 6
# eg2: 获取键'a4'的集合中权限值在5和6之间的成员,按score从高到低排序
zrevrangebyscore a4 6 5
# eg3: 获取键'a4'的集合中权限值在3和60之间的成员,按score从低到高排序;跳过第一个元素获取两个元素
zrangebyscore a4 3 60 limit 1 2
返回成员member的score值
zscore key member # 获取键'a4'的集合中元素'zhangsan'的权重
zscore a4 zhangsan
获取指定分数范围的元素个数
zcount key min max # 获取键'a4'的集合中的元素权重为 3-5 的元素个数
zcount a4 3 5
按score对指定成员在集合中的排名(排名从0开始计算)
# score从小到大的排名
zrank key member
# score从大到小的排名
zrevrank key member # 集合a4中元素zhaoliu的排名
zrank a4 zhaoliu
【修改】
修改指定元素的score
zincrby key 增加值 member # 将 键'a4'的元素zhaoliu的score增加10
zincrby a4 10 zhaoliu
【删除】
删除指定元素
zrem key member1 member2 ... # eg: 删除集合'a4'中元素'zhangsan'
zrem a4 zhangsan
删除权重在指定范围的元素
zremrangebyscore key min max # eg: 删除集合'a4'中权限在5、6之间的元素
zremrangebyscore a4 5 6
删除指定数量的成员
# 删除指定数量的成员,从最低score开始删除, count默认为1
zpopmin key [count]
# 删除指定数量的成员,从最高score开始删除, count默认为1
zpopmax key [count] # eg: 删除集合'a4'中score最小的元素
zpopmin a4
7. 比特流操作
# 按从左到右的偏移量设置一个bit数据的值
setbit key offset value
# 获取一个bit数据的值
getbit
# 统计字符串被设置为1的bit数.
bitcount
# 返回字符串里面第一个被设置为1或者0的bit位。
bitpos
# eg:
setbit mykey 7 1
>> "\x01"
六、分布订阅
订阅 subscribe
# 订阅法语
subscribe channel1 channel2 channel3... # eg: 订阅一个名为 info 的 channel
subscribe info >>>
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "info"
3) (integer) 1
发布 public
# 发布法语
publish channel message # eg: 给 info 频道发布消息 "python"
publish info python # 返回订阅的人数
>>>
publish info "python"
(integer) 2
运行结果
# 订阅方终端显示内容
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "info"
3) (integer) 1
1) "message"
2) "info"
3) "python"
redis与python交互
发布订阅消费者
import redis my_redis = redis.Redis(host="127.0.0.1", port=7777) # 创建订阅者对象
subscribe = my_redis.pubsub()
subscribe.subscribe("room_01") # 忽略 订阅本身的响应
subscribe.parse_response() while True:
print("waitting...")
listen_msg = subscribe.parse_response()
print(listen_msg)发布订阅生产者
import redis
import time my_redis = redis.Redis(host="127.0.0.1", port=7777) for item in "hello":
time.sleep(1)
my_redis.publish("room_01", item)
Redis数据库安装与使用总结的更多相关文章
- redis数据库安装 redis持久化及主从复制
----------------------------------------安装redis-5.0.4---------------------------------------- wget h ...
- Linux服务器运行环境搭建(二)——Redis数据库安装
官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux 2. 解压缩包:tar zxv ...
- Redis数据库安装与配置调试
主要培养自我对Redis数据库安装能力, 并且进行个性化的数据库配置.掌握本实验的重点,即在于数据库的安装与启动参数的配置.同时,理解NOSQL数据库的体系结构. ①下载Redis安装包进行数据库平台 ...
- Redis数据库安装简介
方法一:Redis手动cmd启动服务 端客户端的方法-------Redis 服务端测试使用1. 下载Redis(https://github.com/mythz/redis-windows)2. 解 ...
- redis数据库安装
一. 简单介绍: REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用A ...
- 数据库之redis篇(1)—— redis数据库安装,简单使用
简介 reids,由Salvatore Sanfilippo写的一个高性能的key-value数据库,并且它是非关系型数据库,也就是没有像mysql那样多表链接操作,并且它是是完全开源免费的,遵守BS ...
- redis 数据库安装和基本使用
Redis 介绍: Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值可以包 ...
- redis数据库安装及简单的增删改查
redis下载地址:https://github.com/MSOpenTech/redis/releases. 解压之后,运行 redis-server.exe redis.windows.conf ...
- Linux安装redis数据库
这几天在搞redis数据库,花了好大功夫,才成功安装在Linux上,这里将自己的安装步骤分享出来,同时也做个记录,备忘. 新人一枚,不对之处,请多指教! 首先登陆Linux服务器 Linux里,我习惯 ...
- sqlite数据库安装配置
一.SQLite简介 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中, ...
随机推荐
- webgl 系列
webgl 背景 工作所需... 目录 初识 WebGL 绘制一个点 三角形 变换矩阵和动画 渐变三角形 绘制猫 着色器语言
- 【Unity3D】角色控制器(CharacterController)
1 简介 控制角色移动的组件主要有:Transform 组件.Rigidbody 组件.CharacterController 组件.Transform 组件通过控制角色位置实现移动,Rogidb ...
- ORA-24247问题解决
错误信息: scott@ORCL> select utl_http.request('www.baidu.com') from dual; select utl_http.request('ww ...
- mysql-5.7.16-winx64配置文件
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.7/en/server-co ...
- 如何在 libevent 中读取超过 4096 字节的数据
如何在 libevent 中读取超过 4096 字节的数据 bufferevent 是 libevent 中相对高层的封装,较 event 使用起来方便很多. 之前有一个需求,需要从服务端读取数据进行 ...
- Hdf5开发笔记(一):hdf5介绍,在windows上编译msvc2015x64版本
前言 matlab的matio库需要使用到hdf5,编译hdf5的msvc2015x64版本. HDF5介绍 HDF(Hierarchical Data Format)是一种设计用于存储和组织 ...
- django1.11和django2.2中namespace的用法
django1.11中namespace用法 urlpatterns = [ url(r'^user/', include('user.urls', namespace='user')) ] djan ...
- CGI, FastCGI, WSGI, uWSGI, uwsgi一文搞懂
中间件 1.服务器中间件:nginx,apache 2.数据库中间件:介于应用程序和数据库之前的,MyCat 3.消息队列中间件:kafka,rabbitmq,Rocketmq CGI 1.CGI是一 ...
- 【LeetCode二叉树#19】有序数组转换为二叉搜索树(构造二叉树)
将有序数组转换为二叉搜索树 力扣题目链接(opens new window) 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个 ...
- 在矩池云安装使用PaddleHub 和 PaddlePaddle
之前在安装 PaddleHub 导入的时候遇到各种错误,不是这个包没这个模块,就是哪个包没这个属性 ...很头痛,网上也没有 PaddleHub 和 PaddlePaddle 对应的版本,只能自己慢慢 ...