Ubuntu下Redis安装和常用操作

以下安装操作是在Ubuntu16.04系统下完成,其他发行版本或者类Unix系统可能稍有不同。(Redis有编号0~15共16个数据库。)

一、Redis基础知识介绍

redis是Key Value nosql数据库,数据存储在内存中,单进程,自己实现了一套异步事件处理,虽然单进程但是数据库处理很快,异步持久化。

1. Redis有5种数据类型:
  • string,最基本的数据类型,也是其他四种数据类型的基础,能存储任何形式的字符创。适用:存储信息对象序列化JSON格式。get/set操作。
  • hash,哈希类型是一个字符串类型的字段和字段值的映射表,将一个对象存成hash类型占用更少的内存,并且可以更方便的存取整个对象。适用:经常被并发请求的小数据查询,如:最近五日的超高返商品数据,存储在Hash中,field=商品ID,value=商品信息(对象序列化JSON格式)。hmset/hgetall操作。
  • list,链表类型可以存储一个有序的字符串列表,用链表类型的LPUSH和LPOP或者RPUSH和RPOP实现栈的功能,用LPUSH和RPOP或者RPUSH和LPOP实现队列的功能。适用:作为信息队列使用,不断的Lpush数据到List中,rpop数据出来入库,或者处理。列表的最大长度为 232 - 1 个元素(4294967295,每个列表的元素超过四十亿)。lpush list_name list_element/ lrange list_name start_index end_index
  • set,集合类型。集合元素是唯一的,无序的。集合间可以进行交并差操作。sadd/smembers
  • zset,有序集合类型,在set的基础上多了一个有序。适用:搜索关键字排名。zadd/zrangebyscore
2. Redis的优点:
  • 异常快速 : Redis是非常快的,每秒可以执行大约110000设置操作,81000个/每秒的读取操作。
  • 支持丰富的数据类型 : Redis支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。这使得在应用中很容易解决的各种问题,因为我们知道哪些问题处理使用哪种数据类型更好解决。
  • 支持pub/sub消息订阅机制,可以用来进行消息订阅与通知。
  • 支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。 操作都是原子的 : 所有 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值)。
3. Redis的缺点:
  • Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒
  • Redis在string类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用。

二、Redis安装

1. 准备工作

  1. 更新系统的依赖环境
sudo apt-get update
sudo apt-get upgrade
  1. 安装Redis
sudo apt-get install redis-server
# 如果需要安装成服务的话执行
sudo systemctl enable redis-server.service
# 确认安装的版本
redis-server -v

2. 启动和停止

默认情况下直接在终端输入redis-server即可临时性启动Redis服务,再新开终端输入redis-cli启动客户端连接。

redis-server &       # 启动服务
redis-cli          # 启动客户端
redis-cli shutdown  # 关闭服务

如果出现以上命令无法关闭redis-server的情况下解决办法如下: * 使用以下命令启动重启和关闭

/etc/init.d/redis-server stop     # 停止
/etc/init.d/redis-server start    # 启动
/etc/init.d/redis-server restart  # 重启
  • 我的安装情况是默认安装后保护模式和后台启动模式均为开启状态,根据需要配置为关闭。

3. 查看进程状态以及强制停止

ps -aux | grep redis-server
sudo pkill <pid>

4. 连接测试

直接输入redis-cli通过默认客户端来测试连接,正常情况下返回ping的对应值PONG

$ redis-cli

$ 127.0.0.1:6379> ping
PONG
$ 127.0.0.1:6379>

5. 简单配置

通过编辑默认配置文件来初步简单配置,推荐copy并重命名配置文件。

sudo vim /etc/redis/redis.conf

打开远程连接并关闭保护模式,否则只允许本地连接:

# 把以下注释掉(前面加#)
bind 127.0.0.1 ::1
# 以下改为 yes → no
protected-mode no

# 如果需要,设置验证密码
requirepass <YOURPASSWORD>

以上设置也可以通过客户端设置:

redis 127.0.0.1:6379> CONFIG SET requirepass <YOURPASSWORD>
OK
redis 127.0.0.1:6379> AUTH <YOURPASSWORD>
Ok

设置密码后的连接方式:

redis-cli -h 127.0.0.1 -p 6379 -a <YOURPASSWORD>  # 其他参数如未改动则可省略

保存后重启服务:

sudo service redis-server restart

6. 常用命令 ☞ 通用key-value操作

  1. keys pattern
    查询相应的key,pattern表示查询条件,可以实现模糊查询,* 通配任意多个字符,keys * 表示返回当前redis数据库中所有的key;? 通配任意一个字符,比如已经有两个key,分别是aba或abb,如果要查询以ab开头的后面只有一个字符的key,就可以使用keys ab?命令查询。 [], 通配[]内的某一个字符,比如说,我们只知道key是以ab开头,但是后面一位是什么记不清了,只知道可能是a,b,e,d中的一个,那么就可以通过命令keys ab[abed]进行查询。
127.0.0.1:6379> keys ab[abcd]
1) "abb"
2) "aba"
127.0.0.1:6379>
  1. del key1 key2 ... keyn
    删除一个或多个key,如果这个key不存在会忽略掉,返回值是删掉的key的数量。
  2. rename key newkey
    重命名key,需要注意的是,如果newkey已经存在,那么newkey会覆盖掉已有的key。 因此在执行这个名字之前,最好先执行以下exists key看到newkey是否已经存在。
  3. exists key
    判断key是否存在,0不存在,1存在。
  4. renamenx key newkey
    这个命令的意思是,当newkey不存在的时候,则改名,返回1,否则不改名,返回0。
  5. type key
    查看key的类型,可能的类型有string、link、set、order set、hash。
  6. randomkey
    这个命令可以在当前Redis数据库的所有key中,随机返回1个。
  7. ttl key
    查询key的生命周期,如果key不存在返回-2(好像2.8以前返回-1),如果key永久有效返回-1,否则返回这个key的有效期秒数。
  8. expire key 秒数
    设置一个key的有效期,比如expire aba 10,那么10秒钟之后,这个key将消失。
  9. persist key
    如果aba这个key还未消失之前,想将其设置回永久有效,则可使用这个命令。
  10. select dbIndex
    默认16个数据库:0-15,进入redis后默认是0库。不建议使用多个数据库
  11. flushdb / flushall
    用于清除数据库,flushdb只清除当前数据库,flushall清除所有数据库。
  12. 更多命令请参考:https://segmentfault.com/a/1190000010999677

相关链接:
https://www.jianshu.com/p/0ae66fc9da56
https://blog.csdn.net/Architect_CSDN/article/details/80898589
https://segmentfault.com/a/1190000010999677
https://lyonyang.github.io/blogs/06-Cache/01-Redis/

上一篇:为Django的manage.py添加自定义命令

下一篇:Django项目中使用Celery