搜索框架搭建3: redis安装及使用 命令行/python/java数据读写
搜索框架搭建1:elasticsearch安装和可视化工具kibana、分词插件jieba安装 https://blog.youkuaiyun.com/tingkr/article/details/84029738
搜索框架搭建2: tomcat安装及使用 https://blog.youkuaiyun.com/tingkr/article/details/84560539
在搜索框架中,需要数据库服务器存储数据和响应数据请求,redis由于其开源,被广泛用作数据库服务。redis是基于key-value形式的数据库,有几个突出的优点:(1) 支持数据的持久化,可以将内存中的数据保存在磁盘中;(2) 支持多种类型结构的value的存储,如string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型);(3) 支持数据备份。
1 redis安装
下载地址:https://redis.io/download
安装环境:linux
从官网下载最新稳定版本后,解压到不需要sudo权限操作的某个路径下。若解压路径需要sudo权限操作,将在后续通过python或者java对redis进行数据读写增删等操作时,带来很多因为sudo权限的问题。
解压后进入redis路径,执行make进行编译
cd /home/appuser/tools/redis #/home/appuser/tools/redis为redis的解压目录
make
编译完成后,将产生对应的src、conf等文件夹。编译成功后,进入src文件夹,执行make install进行redis安装。
为了其它机器可以连上redis所在服务器并进行数据读写,需修改redis目录下的配置文件redis.conf
将bind 127.0.0.1
注释
将protected-mode yes
改成protected-mode no
配置文件中各项参数具体含义,请参见http://www.runoob.com/redis/redis-conf.html
1.1 启动redis
启动redis需启动src目录下的redis-server,为了使配置文件redis.conf生效,在启动redis-sever时需加载redis.conf
./src/redis-server redis.conf
启动成功后会出现如下提示
2 redis数据读写操作
redis读写数据非常方便,可通过命令行进行操作,也可通过Python或java进行数据读取。不管通过哪种方式读写数据,首先要启动redis,否则将无法连接到redis从而无法进行数据读写操作。
redis是基于key-value的数据存储形式,value支持多种数据类型,string、list、set、zset和hash,不同类型的读写语句稍有差别。
对key的操作
查找key是否存在,方法为exists,参数为key。
删除key,方法均del,参数为key。
对value进行操作
string类型,写数据的方法为set,参数包括key和value两个,读数据的方法为get,参数为key。
list类型,一个list最多可以包含
2
32
−
1
{2^{32} - 1}
232−1 个元素。list有两个方向,左和右,写数据时,即可从左边往list里写,也可从右边往list里写,删除数据同理,均可从左右删除。
从左往list里写数据的方法为lpush, 参数包括key和当前要写入的值v1,从右往list里写数据的方法为rpush,参数同lpush。
从左删除list里list头数据的方法为lpop,参数为key,从右删除list里list尾数据的方法为rpop,参数为key。
读数据的方法为lrange,参数有三个,key, 起始位置和结束位置。
2.1 命令行读写数据
命令行读写数据,首先执行redis-cli
启动redis客户端,启动后界面如下。
命令行操作对大小写不敏感。
方法和参数之间用空格隔开,参数和参数之间用空格隔开。
查找key是否存在
exists test #以key为test为例
若key值存在,返回值为1;不存在,返回值为0.
批量查找key
通过通配符查找
keys 'test*' #查找以test开头的所有key
删除key
del test #以key为test为例
若key值存在,删除成功,返回值为1;key值不存在,返回值为0.
批量删除key
批量删除key一般通过对key值用通配符进行查找,再借助linux的管道进行删除,这个操作不需要启动客户端
redis-cli keys "test*"|xargs redis-cli del
value类型为string
set test 1 #写入key为test, value为值为1的数据,写入成功返回OK
get test #读取key为test的数据,若test的值存在,则返回对应的value,若不存在,返回nil,即null。
value类型为list
lpush test 1 #从左往test里写入1,写入成功返回写入的值1
rpush test 1 #从右往test里写入1,写入成功返回写入的值1
lppo test #从左删除test里list头数据,删除成功返回删除的值
rpop test #从右删除test里list尾数据,删除成功返回删除的值
lrange test 0 -1 #读取key为test里list从第一个到最后一个的值,0表示第一个,-1表示最后一个,返回list值
2.2 python读写数据
python对redis里的数据进行操作,首先需要安装redis对应的包redis。在代码中需import redis
并进行连接操作。
import redis
# 连接到ip地址为10.99.266.122这台机器上的redis服务,端口号需要和reids配置文件redis.conf里的端口号保持一致,默认端口为6379
rs = redis.Redis(host = '10.99.266.122', port = 6379)
# 查询key
rs.keys('test*') #查找以test开头的所有key
# 删除key
rs.delete('test') #删除key为test的数据
# value为string数据写、删、查询
rs.set(key, v) #向redis里写入
rs.get(key) #读取redis里key值对应的value
# value为list数据写、删、查询
rs.lpush(key, v) #从左往key对应的list里写入v
rs.rpush(key, v) #从右往key对应的list里写入v
rs.lpop(key) #从左从key对应的list里删除v
rs.rpop(key) #从右从key对应的list里删除v
rs.lrange(key, 0, -1) #读取key对应的list所有元素, 第二和第三个参数表示起始位置和结束位置
2.3 java读写数据
java对redis里的数据进行操作,首先需要下载redis对应的包,放入项目中的lib目录,楼主下载的版本为jedis-3.0.0-m1.jar。在代码中需import redis.clients.jedis.Jedis
并进行连接操作。数据读写操作类似python
import redis.clients.jedis.Jedis;
// 连接到ip地址为10.99.266.122这台机器上的redis服务,端口号需要和reids配置文件redis.conf里的端口号保持一致,默认端口为6379
Jedis rs = new Jedis("10.99.266.122", 6379)
// value为string数据写、删、查询
rs.set(key, v) //向redis里写入
res = rs.get(key) //读取redis里key值对应的value
// value为list数据写、删、查询
rs.lpush(key, v) //从左往key对应的list里写入v
rs.rpush(key, v) //从右往key对应的list里写入v
rs.lpop(key) //从左从key对应的list里删除v
rs.rpop(key) //从右从key对应的list里删除v
rs.lrange(key, 0, -1) //读取key对应的list所有元素, 第二和第三个参数表示起始位置和结束位置