redis学习(一)-基础知识

redis简介

  • Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
  • 特点:高并发读写,高效的存储和访问,很容易的扩展(因为表结构不固定,是key-value)
  • 适用场合
    1.取最新的N个数据
    2.排行榜应用,取TOP N操作
    3.需要精确的设定过期时间
    4.计数器应用
    5.Uniq操作,即数据去除重复
    6.实时系统,反垃圾系统
    7.Pub/Sub构建实时消息系统
    8.构建队列系统
    9.缓存 (最常用了)
    简单总结

redis的安装使用

  1. 安装步骤:
    第一步:redis的源码包上传到linux系统。
    第二步:解压缩redis到 /usr/local
    第三步:编译。进入redis源码目录输入 make
    第四步:安装。make install PREFIX=/usr/local/redis
    PREFIX参数指定redis的安装目录。一般软件安装到/usr目录下

  2. 远程连接其他主机的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

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

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

  5. 注册为windows服务

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

常用redis命令

  1. 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 指定减少的值,可为负数
  1. 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类型的无序集合,可以对集合求交集,并集,差集,可应用于好友推荐,tag标签查询等场景。
  3. zset类型
  4. keys命令
常用命令 描述 备注
del 批量删除key 如某些key不存在,则直接忽略
exists 返回key是否存在
keys 返回当前数据库指定正则匹配的key
rename 将key重命名为newkey 如果newkey已经存在,则值将被覆盖.可使用renamenx
expire 设置key的过期时间 其实超时后并不会马上删除
persist 将keys设置为永久的
ttl 返回key的剩余过期时间
type 返回key所存储的value的数据结构类型 它可以返回string, list, set, zset 和 hash等不同的类型
sort 返回排序后的元素列表
scan 迭代返回 scan它们每次执行都只会返回少量元素,
而不会出现像 KEYS 或者 SMEMBERS 命令带来的可能会阻塞服务器的问题
move 将key移动到另一个数据库
migrate 将key迁移到另一个redis服务的指定数据库上
  1. 连接和服务器配置常用命令
常用命令 描述 备注
auth auth password 验证密码登录
ping 测试连接,成功返回pang
select 选择数据库
config get 读取redis服务器的配置文件参数 * 可读取所有支持的配置参数
也可参看单独某个参数,如config get requirepass查看密码 (感觉这样很不安全)
config set 设置redis服务器的配置文件参数 如:可以用来设置密码(立即生效)
config set requirepass 123456
服务器重启后修改会失效,若想长久保存可追加 “config rewrite”命令
flushdb 删除当前数据库里面的所有数据
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安全内容参考官方中文文档

2. redis的发布订阅

redis利用subscribe publish等命令可以构建一个简单的实时消息系统,但现在大多项目会集成消息中间件(如ActiveMq,RabbitMq等),但redis相较ActiveMq缺少持久化和可靠性的保证,因此使用并不多。
发布订阅

3. 管道命令

一次发送多个命令,节省往返时间

4. redis事务处理

redis事务介绍

  • 服务端在事务的执行过程中,不会被其他客户端发送来的命令请求所打断
  • multi开启事务,之后的命令会放到一个队列里,直到执行exec命令。discard清空事务队列, 并放弃执行事务。
  • 如果事务中的某些命令出现错误,事务中的其他命令仍然会继续执行,整个事务不会回滚;但如果是语法错误,在入队列时就会被发现。
  • redis乐观锁。被 WATCH 的键会被监视,并会发觉这些键是否被改动过了。 如果有至少一个被监视的键在 EXEC 执行之前被修改了, 那么整个事务都会被取消, EXEC 返回nil-reply来表示事务已经失败。
  • redis脚本和事务。从定义上来说, Redis 中的脚本本身就是一种事务, 所以任何在事务里可以完成的事, 在脚本里面也能完成。

附录

redis2.8-redis.conf

posted on 2020-01-11 11:19  spiritt  阅读(107)  评论(0编辑  收藏  举报