Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
文件 | 功能 |
---|---|
redis-server | Redis服务器 |
redis-cli | Redis命令行客户端 |
redis-benchmark | Redis性能测试 |
redis-check-aof | AOF文件修复工具 |
redis-check-dump | RDB文件检查工具 |
redis-sentinel | Sentinel服务器 |
redis-server 最简启动
redis-server --port 6380 动态参数启动
redis-server configPath 配置文件启动
netstat -antp | grep redis
or
reids-cli -h ip -p port ping
String 数据结构是简单的 key-value 类型,value其实不仅是String,也可以是数字,是包含很多种类型的特殊类型,并且是二进制安全的。
比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等等。
setnx key1 value1: (not exist) 如果key1不存在,则设值 并返回1。如果key1存在,则不设值并返回0;
setex key1 10 lx :(expired) 设置key1的值为lx,过期时间为10秒,10秒后key1清除(key也清除)
setrange string range value 替换字符串
Hash类型是String类型的field和value的映射表,或者说是一个 String集合 。
它特别适合 存储对象 ,相比较而言,将一个对象类型存储在Hash类型要存储在String类型里占用更少的内存空间,并方整个对象的存取。
List类型是一个链表结构的集合,其主要功能有push、pop、获取元素等。
更详细的说,List类型是一个双端链表的节后,我们可以通过相关的操作进行集合的头部或者尾部添加和删除元素,List的设计非常简单精巧,即可以作为栈,又可以作为队列,满足绝大多数的需求。
lpush key1 value1 value2…:从头部加入元素(栈,先进后出)
rpush key1 value1 value2 …:从尾部加入元素(队列,先进先出)
linsert key BEFORE|AFTER pivot value
该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面
lrange key start stop:获取指定索引内的所有元素,只可从左到右 0 -1代表所有
lset key index value:将key 集合中 index下表的元素替换掉
lrem key count value
lrem命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同:
当count>0时, LREM会从列表左边开始删除。
当count<0时, LREM会从列表后边开始删除。
当count=0时, LREM删除所有值为value的元素。
ltrim key start stop:保留指定key的值范围内的数据, 其他数据会删掉, 和 lrange 一样的参数范围
lpop key:从list的头部删除元素,并返回删除元素。
rpop key:从list的尾部删除元素,并返回删除元素
rpoplpush list1 list2:从list1尾部删除元素,并将被移除的元素添加到list2的头部,返回被移除的元素,可以实现MQ
llen key:返回元素个数
lindex key index:返回名称为key的list中index位置的元素
set集合是string类型的无序集合,set是通过hashtable实现的,对集合我们可以取交集、并集、差集
有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的 分数 。redis正是通过分数来为集合中的成员进行 从小到大 的排序。
有序集合的成员是唯一的,但分数(score)却 可以重复 。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。
keys * : 返回满足的所有键 ,可以模糊匹配 比如 keys abc* 代表 abc 开头的 key
exists key :是否存在指定的key,存在返回1,不存在返回0
expire key second:设置某个key的过期时间 时间为秒
del key:删除某个key
ttl key:查看剩余时间,当key不存在时,返回 -2;存在但没有设置剩余生存时间时,返回 -1,否则,以秒为单位,返回 key 的剩余生存时间。
persist key:取消过去时间
PEXPIRE key milliseconds 修改key 的过期时间为毫秒
select : 选择数据库 数据库为0-15(默认一共16个数据库)
ps.设计成多个数据库实际上是为了数据库安全和备份
move key dbindex : 将当前数据中的key转移到其他数据库
randomkey:随机返回一个key
rename key key2:重命名key
echo:打印命令
dbsize:查看数据库的key数量
info:查看数据库信息
config get * 实时传储收到的请求,返回相关的配置
flushdb :清空当前数据库
flushall :清空所有数据库
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
事务是一个单独的隔离操作:
事务中的所有命令都会序列化、按顺序地执行。
事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:
事务中的命令要么全部被执行,要么全部都不执行
一个事务从开始到执行会经历以下三个阶段:
Redis SAVE 命令用于创建当前数据库的备份。
如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。
因为redis速度相当快,所以一台比较好的服务器下,一个外部用户在一秒内可以进行15W次密码尝试,这意味着你需要设定非常强大的密码来防止暴力破解
可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全
vim /usr/local/redis/conf/redis.conf
编辑配置文件
修改:#reqirepass foobared
为: reqirepass redis(你的密码)
pkill redis-server 关闭redis-server
./bin/redis-server ./conf/redis.conf 启动redis
./bin/redis-cli 打开客户端