redis简介

  • Redis 是一个开源的,基于内存的NoSql数据库。 它支持多种数据结构 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets), bitmaps, hyperloglogs 和 地理空间(geospatial)。 Redis 内置了 复制,LUA脚本和磁盘持久化, 并通过 Redis哨兵(Sentinel)和集群(Cluster)保证了高可用。
  • 特点:快!读写性能可达到10万/秒,这得益于所有数据都是存在内存中,而且采用单线程架构避免了线程之间切换和竞争带来的问题,并且采用了epoll来实现IO多路复用。

使用场景简单总结

redis的安装使用

  1. 安装步骤:

第一步:redis的源码包上传到linux,或者直接下载 wget http://download.redis.io/releases/redis-3.0.7.tar.gz,具体版本列表查看http://download.redis.io/releases
第二步:tar xzf redis-3.0.7.tar.gz
第三步:ln -s redis-3.0.7.tar.gz redis 建立了一个软链接,不把redis目录固定在指定版本上,有利于未来升级。非必要
第四步:cd redis
第五步:make
第六步:make install 默认安装到/usr/local/bin,可以在任意目录下执行redis命令,也可以指定安装配置make install PREFIX=/usr/local/redis。一般软件安装到/usr目录下

另外docker安装更加方便docker run -p 6379:6379 --name redis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

  1. 远程连接其他主机的redis远程连接其他主机的redis
    vim redis.conf
    注释以下绑定的主机地址#bind 127.0.0.1 或者bind 0.0.0.0
    修改protected-mode no 或者config set requirepass 123 ->123是密码
    防火墙通过6379端口 iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

  2. 后台启动
    vim redis.conf
    daemon yes
    ./redis-server …/redis.conf (可以特殊指定redis.conf)

  3. 连接redis
    ./redis-cli -h 192.168.0.1 -p 6379

  4. 注册为windows服务

    redis-server --service-install redis.windows.conf卸载服务命令:redis-server --service-uninstall开启服务redis-server –service-start停止服务redis-server –service-stop

常用redis命令

  1. keys命令

    dbsize返回当前数据库的key数量。时间复杂度是O(1),不用担心阻塞问题
    keys 返回当前数据库指定正则匹配的key,因可能会阻塞较长时间生产环境禁用,推荐scan
    scan 它们每次执行都只会返回部分元素(默认10个),不会出现像 KEYS 或者 SMEMBERS 命令带来的可能会阻塞服务器的问题。对应集合遍历内部元素的有hcan、sscan、zscan。

    exists
    rename 重命名。如果newkey已经存在,则值将被覆盖.可使用renamenx
    randomkey 随机返回一个键
    del 批量删除key 。 如某些key不存在,则直接忽略

    expire 设置key的过期时间 。过期时间为负值会立即被删除。返回 -1没有设置过期时间,-2键不存在。list,hash不支持集合内部元素的过期功能
    persist 将key设置为永久的
    ttl 返回key的剩余过期时间

    type 存储的数据结构类型,即string,hash, list, set和zset的类型
    object encoding返回内部的实际编码格式,如string结构类型其实内部对应着int embstr raw 三种编码格式

    迁移键可以使用move,dump+restore, migrate。推荐使用migrate,原子性操作,支持多个键,只需要在源redis上操作即可,简单方便。

  2. string类型

常用命令 描述 备注
set 设置key value
如果已存在key 会覆盖(包括过期时间)
EX – 设置键key的过期时间,单位秒
PX – 设置键key的过期时间,单位毫秒
NX – 只有键key不存在的时才会设置key的值
XX – 只有键key存在的时才会设置key的值
SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX
setrange 从指定的offset处开始,覆盖value的一部分 和getrange对应
setex SETEX key seconds value
设置过期时间
可以被set代替; psetex是以毫秒为单位
setnx SET if Not eXists的简写
当key不存在时才设置
可以被set代替
mset 批量设置key value msetnx批量设置,是原子的,如果有一个key存在全部失败
getset 设置key value并返回原来key对应的value 和INCR一起使用可实现重置的计数功能
append 追加value值
get 返回string类型的value
mget 批量返回key的值
getrange 返回value中指定的子串
strlen 返回key的string类型value的长度
incr 将整数型的value值加1 incrby 指定增加的值,可为负数
decr 将整数型的value值减1 decrby 指定减少的值,可为负数

缓存,降低数据库压力:
存储如共享session,JWTtoken等;校验用户获取验证码次数或者一天内登陆失败次数等等,利用注解+AOP来拦截实现
3. hash类型

将key值进行分类管理,并且大多情况下占用内存更少

常用命令 描述 备注
hset hset myhash:001 name xiaoming
hmset 批量设置指定key哈希集中指定的字段
hsetnx 只在 key 指定的哈希集中不存在指定的字段时,设置字段的值
hdel 从 key 指定的哈希集中移除指定的域
hexists 返回hash里面field是否存在
hget
hmget 批量返回指定key哈希集中指定的字段
hgetall 返回指定key哈希集中所有的字段和值 hkeys 返回所有字段;hvals返回所有字段对应的值
hlens 返回 key 指定的哈希集包含的字段的数量
hincrby
  1. list列表

  2. set集合
    是string类型的无序集合,可以对集合求交集sinter,并集sunion,差集sdiff,可应用于好友推荐,tag标签查询等场景。

    标签的简单示例:
    给用户添加标签sadd user:1:tags tag1 tag2 tag3 , sadd user:2:tags tag1 tag2 tag3
    给标签添加用户sadd tag1:users user:1 user:2, sadd tag2:users user:1 user:2
    注意上面要放在一个事务中执行,可利用lua脚本
    获取两个用户共有的标签 sinter user:1:tags user:2:tags

  3. zset有序集合
    排行榜系统

  4. 连接和服务器配置常用命令

常用命令 描述 备注
auth auth password 验证密码登录
ping 测试连接,成功返回pang
select 选择数据库
config get 读取redis服务器的配置文件参数 * 可读取所有支持的配置参数
也可参看单独某个参数,如config get requirepass查看密码 (感觉这样很不安全)
config set 设置redis服务器的配置文件参数 如:可以用来设置密码(立即生效)
config set requirepass 123456
服务器重启后修改会失效,若想长久保存可追加 “config rewrite”命令
flushdb 清除当前数据库 危险命令,建议rename-command来规避
flushall 删除所有数据库
slaveof SLAVEOF host port 变为指定服务器的从服务器 利用SLAVEOF NO ONE可以切换为主服务器
shutdown 关闭redis服务
  1. 调试常用命令
常用命令 描述 备注
info 以一种易于理解和阅读的格式,
返回关于Redis服务器的各种信息和统计数值。
monitor 用于调试,开启后显示服务器当前执行的命令 ctrl+c结束
object 查看key的编码方式,被引用的次数,空闲时间
dbsize 返回当前数据里面keys的数量
role 返回主从角色
client list 返回连接的客户端列表
client kill 关闭指定客户端连接

redis基本特性

1. redis的安全性

  • 在redis.conf配置文件里可以通过requirepass password 来设定密码;也可以在客户端通过config set requirepass password来设定密码(立即生效,但服务器重启后修改会失效,若想长久保存可追加 “config rewrite”命令)。然后连接redis(注意连接成功后但其实并未被授权),可通过auth password输入密码通过验证。注意:因为redis的查询服务特别快,因此密码要设置的足够长,防止暴力破解。

  • 高版本的redis安装完默认只能本地连接 (bind 127.0.0.1),且开启了保护模式(protected-mode yes ),可以通过修改这两项来让其他客户端连接redis服务。

  • 生产环境上对一些危险的命令(如flushdb,flushall,keys,config set,config get等)要禁用或重命名。具体做法是,修改服务器的配置文件redis.conf,在SECURITY这一项中,我们新增以下命令:

rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC81TbdkSmLAzRPmcarcR
rename-command FLUSHDB  qf69aZbLAX3cf3ednHM3SOlbpH71yEXLAX3cf3e
rename-command CONFIG   FRaqbC8wSA1XvpFVjCRGryWtIIZS2TRvpFVjCRG
rename-command KEYS     eIiGXix4A2DreBBsQwY6YHkidcDjoYA2DreBBsQ
#如果要禁用则:
rename-command FLUSHALL ""
rename-command FLUSHDB  ""
rename-command CONFIG   ""
rename-command KEYS     ""

更多redis安全内容参考官方中文文档

附录

redis2.8-redis.conf

redis - 基础相关推荐

  1. mysql主从复制、redis基础、持久化和主从复制

    一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...

  2. Redis基础数据结构内部实现简单介绍

    5种基础数据结构 Redis有5种基础数据结构,分别是:String(字符串),list(列表),hash(字典),set(集合),zset(有序集合),这五种是我们开发种经常用的到的,是Redis种 ...

  3. Redis基础-下载安装配置

    Nosql: NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充. 作用: 应对基于海量用户和海量数据前提下的数据处理问题. 特征: 可扩容,可伸缩 大数据量下 ...

  4. [.net 面向对象程序设计深入](36)Redis——基础

    [.net 面向对象程序设计深入](36)Redis--基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...

  5. 【redis】redis基础命令,分布式锁,缓存问题学习大集合

    写在前面 Redis是一个高速的内存数据库,它的应用十分广泛,可以说是服务端必学必精的东西.然而,学以致用,无用则无为.学了的东西必须反复的去用,去实践,方能有真知.这篇文章记录了我在redis学习过 ...

  6. 【Java从0到架构师】Redis 基础 - 数据类型

    Redis 原理与实战 Redis 基础 为什么 Redis 这么快? Redis 安装.启动 Redis 常用配置 Redis 数据类型 通用命令 String - value 可以是字符串.数值. ...

  7. redis 基础数据结构实现

    参考文献 redis数据结构分析 Skip List(跳跃表)原理详解 redis 源码分析之内存布局 Redis 基础数据结构与对象 Redis设计与实现-第7章-压缩列表 在redis中构建了自己 ...

  8. redis 基础数据类型及应用 1

    redis 基础数据类型及应用 1 redis简介 一. string 数据类型与结构(字符串) 1 string类型简介 2 常用命令 1.set 命令 2.get 命令 3.getset 命令 4 ...

  9. Redis基础篇(万丈高楼平地起):核心底层数据结构

    微信原文链接,排版更舒适. 大家好,我是小龙.近期有很多小伙伴私信我Redis怎么做持久化?集群方案怎么做?分布式锁怎么实现?可是我发现,每次简答完一个问题他还有其他类似问题,或则各个知识点不能串通形 ...

  10. Redis基础常用命令入门

    目录 Redis基础命令 一.字符串类型 ▪️ 赋值 SET : ▪️ 获取 GET: ▪️ 递增(减) 1 INC.DECR: ▪️ 递增(减)指定整数 INCRBY .DECRBY: ▪️ 递增( ...

最新文章

  1. 吴恩达推荐笔记:22 张图总结深度学习全部知识
  2. 基于Android的红外测温设计,基于Android的红外三维重构移动APP设计与实现
  3. Halcon初学者知识【19】带paint_的系列算子
  4. [Python]元组与列表的区别及内建用法
  5. 揭秘:支付宝小程序 V8 Worker 技术演进
  6. Tomcat 之 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099;...
  7. 尽早查看针对Java 11的功能
  8. 哈密顿路径_检查图形是否为哈密顿量(哈密顿路径)
  9. 浪潮服务器 虚拟光驱,使用IPMI功能远程安装Windows Server 2003操作系统步骤
  10. SpringCloud+Redis
  11. 如何接受上级指令_与上级沟通的技巧
  12. 并发模式之Future模式
  13. WinSCP无法连接linux,而secureCRT却可以
  14. KeyShot实例教程教你怎么模拟水面效果
  15. centos 安装jenkins
  16. mysql replication(主从复制)(二)MSS模式
  17. java求100以内的素数
  18. “刀片嗓”“水泥鼻”“咳出肺”可以这样缓解!
  19. Uncaught initialization exception thrown by servlet
  20. 安霸Ambarella三款CV系列芯片对比--CV2S、CV22S、CV25S

热门文章

  1. idea调整主题和代码风格
  2. 数据结构与算法(一):链表
  3. android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果
  4. Java SE有几个代码_JavaSE常用类及方法的介绍(附代码)
  5. linux进程调度周期,Linux进程组调度机制学习
  6. vue如何取消下拉框按回车自动下拉_Web自动化测试 | Select下拉框
  7. 重庆邮电大学java试题_Java程序设计
  8. 自动驾驶前沿综述:基于深度强化学习的自动驾驶算法
  9. 奖金+大赛入门,来参加我们的论文有奖复现!
  10. 大规模中文概念图谱CN-Probase正式发布