网站首页技术博客
Redis笔记
Redis介绍安装应用
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries.
Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,如字符串,散列,列表,集合,具有范围查询的排序集,位图,超级日志和具有半径查询的地理空间索引。
Redis与memcache 区别
相同点:
同为高性能的KV(key-value)存储
不同:
1、 redis 可以做存储(store) 而memcache只是缓存(cache)
这是由于redis具有持久化的功能,数据不仅可以存在内存里还可以存在硬盘里进行持久化存储
2、 redis存储的数据有结构可以存字符串,链表,哈希等等而mamcache存储的数据类型只有一种-字符串
Redis官网 https://redis.io/
下载地址:http://download.redis.io/releases/redis-4.0.10.tar.gz
Linux 下载命令
cd usr/local/src
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
解压命令
tar -zxf redis-4.0.10.tar.gz
编译
make
安装
make PREFIX=usr/local/redis install
安装后的redis/bin目录
Redis-server 服务器
redis-cli客户端
Redis-benchmark 压力测试工具
Redis-check-rdb 数据记录日志
Redis-check-aof 语句记录日志
./bin/redis-server
这样运行redis独占窗口,关闭或取消之后redis就结束进程了
3、 已配置文件方式启动redis
辅助默认配置文件到安装目录
cp /usr/local/src/redis-4.0.10/redis.conf .
编辑redis.conf文件
vim redis.conf
修改daemonize 为 yes
启动
./bin/redis-server redis.conf
正常后台启动
可以看到redis默认端口6379
./bin/redis-cli
成功连接之后进行简单测试
Redis对key的通用操作
rename name xm
del xm
set name lily
set name lucy ex 15 设置15秒生命周期
get name
redis默认不止启动一个数据库,默认启动16个数据库,可以通过select 0-15进行选择,各个数据库之间数据不能共享,可以通过配置文件databases项进行修改,默认存储数据在0号数据库中
keys * 索引出所有的已存储键名,正式项目中需慎用
keys a* 索引出已a开头的所有键名
keys *a
keys *a*
scan cursor [MATCH pattern] [COUNT count]
SCAN命令是一个基于游标的迭代器。这意味着命令每次被调用都需要使用上一次这个调用返回的游标作为该次调用的游标参数,以此来延续之前的迭代过程
当SCAN命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束。
sscan myset 0 match f* count 5
randomkey
exists age
返回0/1 存在返回1 不存在返回0
type age
type name
expire key second
expire name 15
设置name 15秒自动过期
ttl name
返回值:
整数表示生命周期剩余时间,单位秒
-1表示永不过期
-2表示已过期或不存在
pexpire 以毫秒为单位设置声明周期
pttl 以毫秒为单位返回剩余生命周期
persist name 将name设为不自动失效
redis字符串类型的的操作
set key value [ex 秒数] / [px 毫秒数] [nx]/[xx]
ex 生命周期秒数
px 生命周期毫秒数
ex px 同时设置以后设置的为准
nx 不存在时执行即新增
xx 存在时才执行即修改
不加nx|xx参数 有则改无则增
如果该key不存在 set key value xx 执行结果为空
mset name value name value 一次性设置多个键值
mset name 黄圣依 age 34 address 上海
mget name age address
setrange key offset value 修改字符串指定字符
set str hello
setrange str 3 x
输出 helxo
offset 取0或正整数不支持负数倒推
getrange str 2 4
返回 lxo
注释:如果start 大于字符串长度返回空字符串
如果end大于字符串长度返回截止到字符串结尾
如果start大于end返回空字符串
append str !
在str末尾追加!,返回新字符串长度
指定的key值增加1 并返回加1后的值
注:
如果key 不存在,则把key当做0加1再返回
key值得范围为64位的有符号整数
值域为:-9223372036854775808 .. 9223372036854775807。
指定的key值减少1 并返回减少后的值
incrby/decrby key number 增加减少指定值
注:number 支持负数
即incrby age -3
为 age 减 3
相当于 decrby age 3
同理decrby age -5 等于 incrby age 5
incrbyfloat key floatnumber 浮点类型的增加指定值
floatnumber 同样支持负数
setbit key offset value 设置offset对应二进制位上的值
A的ASCII编码为65 即二进制的 0100 0001
小a的ASCII编码为97 即二进制的 0110 0001
从左到右修改偏移量为2的位上数据(即第三位)为1
返回该数据位之前的旧值
getbit key offset 获取指定偏移量的二进制位上的数据
bitop operation destkey key [key ...]
对多个key 按位 执行 AND, OR, XOR and NOT 操作
127.0.0.1:6379> get char
"q"
127.0.0.1:6379> get char2
"Q"
127.0.0.1:6379> del char3
(integer) 1
127.0.0.1:6379> bitop or char3 char char2
(integer) 1
127.0.0.1:6379> get char3
"q"
127.0.0.1:6379> bitop and char3 char char2
(integer) 1
127.0.0.1:6379> get char3
"Q"
Redis对list链表类型的操作
作用:把值插入到链表头部(左侧),如果链表不存在则创建之后再插入
支持一次插入多个
作用:链表存在时从左侧插入值,链表不存在则不插入
支持一次插入多个
作用:把值插入链表尾部(右侧)
支持一次插入多个
作用:链表存在时从右侧插入值,链表不存在则不插入
支持一次插入多个
作用:返回链表中从start 到stop的元素
注:start从0开始,末尾stop为-1
删除链表左侧元素,返回被删除的元素
删除链表右侧元素,返回被删除的元素
作用:删除链表中指定个数(count)的指定值(value)
如果count为负数则表示从右侧删除指定个数的value
返回删除元素的个数
作用:取出指定索引的值,索引从0开始
作用:获取链表长度
作用:编辑修改指定索引内容的值
作用:保留从start 到stop 之间的值,其他值全部删除,start 从0开始 stop 从-1开始
linsert key before|agter pivot value
在指定值前/后插入值,如果存在多个pivot 只在第一个pivot前|后插入值
返回值:插入成功返回新链表的长度
如果pivot不存在则插入失败返回-1
如果key 不存在则插入失败返回0
作用:弹出source尾部元素插入到destination头部
返回的是弹出的元素
把source和destination 设置相同可以吧一个链表的尾部元素移动到头部
Redis对于set集合的操作
集合具有唯一性(互异性)、确定性、无序性
增加集合元素,可一次设置多个
查看集合元素
删除集合中指定的值,返回成功删除的个数
删除集合中count个随机元素,随机提现了集合的无序性
随机取出集合中的count个元素
value 元素是否存在于 key 这个集合中
存在返回1 不存在返回0
key1 key2 两集合的交集
key1 key2 两集合的并集
key1 – key2 的差集
smove source destination member
将source 中的member 元素移动到 destination 中1表示正常移动,0表示source中并不包含参数成员。
sdiffstore destination key1 key2
将key1 key2 的差集存储到destination 中,返回差异成员数量
sinterstore destination key1 key2
将key1 key2 的交集存储到 destination 中,返回交集成员数量
sunionstore destination key1 key2
将key1 key2 的补集存储到 destination中,返回补集成员数量
Redis对于zset(Sorted-Sets) 有序集合的操作
Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted- Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管 Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。
在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为集合中成员数量的对数。由于Sorted-Sets中的成员在集 合中的位置是有序的,因此,即便是访问位于集合中部的成员也仍然是非常高效的。事实上,Redis所具有的这一特征在很多其它类型的数据库中是很难实现 的,换句话说,在该点上要想达到和Redis同样的高效,在其它数据库中进行建模是非常困难的。
zadd key [nx|xx] [ch] [incr] score member [score member …]
作用:
基本用法添加成员:zadd class 17 lucy 18 lily 19 hmm
成员不存在则添加,存在则修改分数
nx表示成员不存在执行,xx表示成员存在时执行
ch表示发生变化的成员数量,不带这个参数则表示增加的成员数量
修改成员分数时比较有用
incr 带这个参数后score表示的将是在原有基础上增加的分数与zincrby 指令作用相同
返回修改之后的分数
返回zset有序集合的成员数量
返回分数在min 和max 之间的成员数量
zrange key start top [withscores]
返回zset集合排名start到stop之前的成员 start从0开始,最后一个元素为-1
withscores 带上这个参数则返回结果中显示分数
返回 key 有序集合中member的排名从0开始,按分数从小到大排序
返回key中有序集合中member的排名从0开始,按分数从大到小排序
删除key集合中member元素支持多个
对key中member成员的分数增加increment
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
取出分数min 到 max之前的数据
默认情况下,区间的取值使用闭区间(小于等于或大于等于),你也可以通过给参数前增加(符号来使用可选的开区间(小于或大于)。
withscores 带上这个参数返回数据时带上参数
limit offset count 可以进行分页 类似mysql: limit 0 5
zremrangebyrank key start stop
移除有序集key中,指定排名(rank)区间内的所有成员。下标参数start和stop都以0为底,0处是分数最小的那个元素。这些索引也可是负数,表示位移从最高分处开始数。例如,-1是分数最高的元素,-2是分数第二高的,依次类推。
##返回值
integer-reply: 被移除成员的数量。
返回有序集key中,成员member的score值。
如果member元素不是有序集key的成员,或key不存在,返回nil。
上一篇:PHP面试宝典