一篇文章搞定跨平台的非关系型数据库redis使用

228 阅读3分钟

此次我们实现的是在远程服务器上安装redis并在Java项目中简单的使用

简介

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

安装

  1. 首先在连接远程服务器,选择版本安装
 wget http://download.redis.io/releases/redis-5.0.7.tar.gz
  1. 解压:
 tar -zxvf redis-5.0.7.tar.gz
  1. 解压完成后出现文件夹:redis-5.0.7,进入到该目录中: cd redis-5.0.7

  2. 在 redis-5.0.7 目录下执行 make 命令进行编译

  3. 如果 make 完成后继续执行 make install 进行安装

OK,到这里就算安装成功了

配置redis.conf文件

  1. 将里面的 daemonize no 改成 yes,让服务在后台启动,如下:
daemonize yes

2.修改redis配置文件将 bind 127.0.0.1 注销,这个一定要注释掉或者改为0.0.0.0,不然它只能本地服务器才能连接成功

bind 0.0.0.0
或
#bind 127.0.0.1

  1. 修改protected-mode 改为 no,默认配置是yes
protected-mode no

检查服务器防火墙

检查服务器防火墙是否开放6379端口:

#执行下面代码 如果返回yes 就代表开启了 返回no 就代表没有
firewall-cmd --query-port=6379/tcp
 
 
#如果上面返回no 执行下面的这个代码,开通端口
#如果是yes,可以不用执行略过
firewall-cmd --zone=public --add-port=6379/tcp --permanent
 
 
#然后重启防火请
firewall-cmd --reload

后端

Python使用

下载:

pip install redis

实例

import redis   # 导入redis 模块

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.set('name', 'runoob')  # 设置 name 对应的值
print(r['name'])
print(r.get('name'))  # 取出键 name 对应的值
print(type(r.get('name')))  # 查看类型

结果:

runoob
runoob
<class 'str'>

String操作

set

#在Redis中设置值,默认不存在则创建,存在则修改
r.set('name', 'zhangsan')
'''参数:
     set(name, value, ex=None, px=None, nx=False, xx=False)
     ex,过期时间(秒)
     px,过期时间(毫秒)
     nx,如果设置为True,则只有name不存在时,当前set操作才执行,同setnx(name, value)
     xx,如果设置为True,则只有name存在时,当前set操作才执行
	 ```



setex(name, value, time)
#设置过期时间(秒)

psetex(name, time_ms, value)
#设置过期时间(豪秒)

#批量设置值
r.mset(name1='zhangsan', name2='lisi')
#或
r.mset({"name1":'zhangsan', "name2":'lisi'})


get

#取值
get(name)
## 批量获取
print(r.mget("name1","name2"))
#或
li=["name1","name2"]
print(r.mget(li))

exists(name)

判断是否存在key,返回值为0或1

print(r.exists('name'))

项目源码