redis学习
1.配置
解压安装后make 或者
ubuntu可以直接sudo apt install redis-server安装
redis-server redis.conf启动
redis-cli -h 127.0.0.1 -p 6379运行
redis-cli --raw–raw避免中文乱码
sudo wget http://download.redis.io/redis-stable/redis.conf
配置redis.conf文件
或者在命令行配置:
config set 配置项名设置
config get 配置项名查看
#获取redis.conf配置文件
#注释掉bind (允许远程)
#修改protect-mode为no
#修改appendonly为yes(持久化)
#修改requirepass 123456(设置密码)
#如果daemonize为yes的话,就会和docker的后台冲突,导致redis启动不起来
| 名称 | 解释 | 建议 | 默认 |
|---|---|---|---|
| port | 端口 | 6379 | 6379 |
| bind | 绑定主机 | 注释掉或0.0.0.0 | 127.0.0.1 |
| protect-mode | 保护模式,其他主机连不了 | no | yes |
| appendonly | 每次更新都写入日志记录 | yes | no |
| save | 多长时间多少次更新操作再同步 | 不动 | 三个900-1,300-10,60-10000 |
| database | 数据库数量 | 16 | 16,可以select 0-15选择 |
| daemonize | 后台运行 | 非docker都yes | no |
| requirepass | 密码设置 | 12346 | foobared,启动redis-cli需要auth 密码 |
help command帮助
1 key
| 命令 | 意思 | 案例1 | 案例2 |
|---|---|---|---|
| del | 删除key | del name | del name1 name2 name2 删除多个 |
| set | 创建key | set name a1 | |
| setex | 设置expire | setex name value 10086 | |
| setnx | 不存在才设置 | setnx name value | |
| setrange | 设置大小,截断 | setrange name 6 value | 到6后面的才设置 |
| strlen | 获取大小 | strlen name | |
| mset | 设置多个 | mset name1 value1 name2 value2… | |
| msetnx | 只key不存在才设置成功 | msetnx | msetnx要不成功要么全部成功 |
| get | 获取 | get name | |
| psetex | 毫秒ttl设置值 | psetex name 1000 value | |
| mget | 获取多个值 | mget name1 name2 name3… | |
| getset | 获取,没这个key给值 | getset name value | |
| randomkey | 随机获取 | randomkey | |
| exists | 是否存在 | exists name | |
| expire | 生存时间 | expire name 30 | |
| ttl | 秒单位查看生存时间 | ttl name ,-1表示不删 | |
| pttl | 毫秒单位看生存时间 | pttl name | |
| expireat | 设置生存时间戳 | expireat cache timestamp时间戳 | |
| pexpireat | 毫秒设置 | pexpireat name 1555555555005 | |
| persist | 移除倒计时 | persist name | |
| keys | 模式匹配获取所有key | keys /o/t??/t[w] | |
| mset | 设置多个key | mset a1 a a2 b a3 c | |
| flushdb | 删除数据库所有数据 | flushdb | |
| rename | 重命名 | rename name name2 | |
| renamenx | 新key不存在才重命名 | renamenx name name2 | |
| migrate | 迁移到远程机器 | migrate 127.0.0.1 7777 key db 1000timeout [copy不删除replace删除] | |
| move | 本地不同库迁移 | move key db | move name 15 |
| dump | 序列化,反restore | dump keyname | |
| restore | 反序列化,值为dump后的 | restore name 0 “\xe4\xbd\xa0\xe5\xa5\xbd” | ttl为0表示没有ttl |
| sort | 排序 | sort name limit 0 5 desc最大前五个 | sort name alpha中文排序 |
| object | 查看 | object econding name看编码 refcount看存储值的次数 | object idletime name看冷落时间 |
| type | 查看类型 | type name | |
| scan | 扫描key | scan 0 | scan 游标 |

set
EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。(expire)
PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。(p)
NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。(nx)
XX :只在键已经存在时,才对键进行设置操作。(exists)
用EX和NX可以实现锁的机制
set name value NX EX 10000
1.sort
sort还有很多用法:
-
通过别的值排序
by
先排序u的value,再取uid
2. 别的值排序get
先排序uid再取u的value

-
get和by可以组合
uid根据u的value排序再取uname的值
3. 获取多个值排序=>多get

-
获取被排序的值
get #
4. 给一个不存在的by值,可跳过排序
5. 哈希排序用->指明排序字段

-
前2名
limit 0 2

2.scan
- scan 参数
scan 游标 count 总数 match 正则 type 类型
2. scan和其他数据类型
scan结果是数据库键scan 0
sscan结果是集合成员sscan myset 0
hscan结果是键值对hscan myhash 0
zscan结果是有序集合元素zscan mysortset 0
2 String二进制
| 命令 | 意思 | 案例1 | 案例2 |
|---|---|---|---|
| append | 对不存在的key set | append name ‘value’ | |
| getrange | 截断字符串 | getrange name 0 2 | getrange name start end |
| bitcount | 获取字节 | bitcount name | |
| setbit | 设置字节值 | setbit name 12 1 | bitcount和setbit可以用来签到 |
| bitop | 字节进行与或非运算 | bitop and/or/xor/not bits key1 key2… | |
| getbit | 获取字节位值 | getbit bits 3 | |
| decr | 减一 | decr name | |
| decyby | 减制定数 | decrby name 20 | |
| getrange/substr | 截断字符串 | getrange name 0 10 |
g
incr|加一|incr name|incr和expire可以达到生存时间计时
incyby |加制定值|incrby name 30
incrbyfloat|加制定小数值|incrbyfloat name 0.1|incrby name 314e-2
3 Hash集合map
| 命令 | 意思 | 案例1 | 案例2 |
|---|---|---|---|
| hset | 设置map | key n v n1 v1… | |
| hsetnx | 不存在才操作有效 | hsetnx key n v… | |
| hmset | 设置多个name | hmset key name1 value1 name2 value2 | |
| hgetall | 获取所有 | hgetall key | |
| hget | 根据name获取 | hget key name | |
| hmget | 获取多个name | hmget key name1 name2… | |
| hdel | 删除一个name | hdel key name | hdel key name1 name2删除多个 |
| del | 删除所有 | del key | |
| hexists | 是否存在name | hexists key name | |
| hincrby | name的value加n | hincrby key name 200 | |
| hincrbyfloat | name的value加字符 | hincrbyfloat key name 0.1 | |
| hkeys | 所有name | hkeys key | |
| hlen | 获取name的数量 | hlen key | |
| hvals | 获取所有value | hvals key |
4 List双向链表
| 命令 | 意思 | 案例1 | 案例2 |
|---|---|---|---|
| blpop | 移出并获取列表的第一个元素 | blpop key1 key2… timeout秒数 | blpop key1 key2… 5(按照给定key的顺序依次进行) |
| brpop | 移除并获取最后一个元素 | brpop key timeout | timeout为0表示无限长 |
| del 删除列表 | del key1 key2 key3… | ||
| lpush | 左添加 | lpush key value1 value2… | |
| rpush | 右添加 | rpush key v1 v2… | |
| rpushx | 存在key才添加 | rpushx key v1 v2 | |
| llen | 大小 | llen key | |
| brpoplpush | source右边的添加到destination左边,找不到阻塞等 | 最后一个放到第一个 | brpoplpush a a 0 |
| rpoplpush | source右边的添加到destination左边,找不到nil | ||
| lindex | 查看索引位置上的值 | lindex b 2 | -1表最后 0表第一 |
| linsert | 插入到指定值之前 | linsert list before ‘a’ ‘new_a’ | 不存在a就失败,存在就在a前面插入new_a |
| lpop | 删掉第一个 | lpop b | |
| rpop | 删掉最后一个 | rpop b | |
| lrange | 查看列表元素 | lrange list 0 -1 | |
| lpushx | 插入但表不能为空 | lpushx list value | |
| lrem | 移除相同值 | lrem list 0 ‘a’ | 0表示所有相同的 >0表示尾到头count个 <0表示头到尾count个 |
| lset | 更改值 | lset list 1 ‘new_value’ | |
| ltrim | 大量删除 | ltrim list 1 4 | 只保留1-4的值,其他都删了 |
如果所有给定 key 都不存在或包含空列表,那么 BLPOP 命令将阻塞连接,直到等待超时,或有另一个客户端对给定 key 的任意一个执行 LPUSH 或 RPUSH 命令为止
超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely) 。
BLPOP 可以用于流水线(pipline,批量地发送多个命令并读入多个回复),但把它用在 MULTI / EXEC 块当中没有意义。因为这要求整个服务器被阻塞以保证块执行时的原子性,该行为阻止了其他客户端执行 LPUSH 或 RPUSH 命令。
因此,一个被包裹在 MULTI / EXEC 块内的 BLPOP 命令,行为表现得就像 LPOP 一样,对空列表返回 nil ,对非空列表弹出列表元素,不进行任何阻塞操作。
相同的 key 可以被多个客户端同时阻塞。
不同的客户端被放进一个队列中,按『先阻塞先服务』(first-BLPOP,first-served)的顺序为 key 执行 BLPOP 命令。
1.rpoplpush
rpoplpush list1 list1 当两个key相同时,可以向客户端一个接一个的发送,而不像lrange 0 -1一样将所有元素发送
rpoplush或他的阻塞版本brpoplpush比单纯的lpush+rpop或brpop更加的安全
5 Set哈希表不重复
| 命令 | 意思 | 案例1 | 案例2 |
|---|---|---|---|
| sadd | 添加元素,结果不重复 | sadd key v1 v2 | |
| scard | 查看数量 | scard key | |
| del | 删除 | del key | |
| sdiff | 求多个key的差集 | sdiff k1 k2 k3… | 注意顺序-前减后 |
| sdiffstore | 将sdiff保存起来 | sdiffstore result b a | |
| sinter | 多个key的交集 | sinter a b | |
| sinterstore | sinter结果保存 | sinterstore result a b | |
| sismember | 是否存在 | sismember key ‘hello’ | 存在为1 不存在为0 |
| smembers | 返回所有成员 | smembers key | |
| smove | source的value移到destination | smove a b ‘hello’ | 没成功0成功1 |
| spop | 移除随机元素 | spop key | 没有元素能移除nil |
| srandmember | 随机返回n个元素 | srandmember key count | 没有count返回一个 负数返回绝对值个 |
| srem | 移除元素 | srem key v1 v2… | |
| sunion | 求并集 | sunion k1 k2 k3… | |
| sunoinstore | sunion的结果保存 | sunionstore result a b | |
| sscan | 获取元素 | sscan result 0 | match是parttern count数量 |

6 sorted set有权重来排序(去重)
| 命令 | 意思 | 案例1 | 案例2 |
|---|---|---|---|
| zdd | 添加元素 | zass key 10 value 权重 value | 必须加权重哦 |
| zrange | 查看元素 | zrange key 0 -1 | zrange key 0 -1 |
| zcard | 返回数量 | zcard key | |
| zcount | 返回score在min和max之间的数量 | zcount key 0 -1 withscores | |
| zincrby | 添加多少 | zincrby key 权重 value | zincrby salary 2000 tom(tom加薪) |
| zrangebyscore | zrange可用inf版 | zrangebyscore key -inf +inf | zrange用不了inf,但能用0 -1 |
| zrank | 显示value的排名 | zrank key tom | |
| zrem | 移除成员 | zrem key tom | zrem key v1 v2 v3… |
| zremrangebyrank | 移除排名内的成员 | zremrangebyrank key 0 1 | 0表第一个 -1表倒数第一个 |
| zremrangebyscore | 移除score值在min和max之间的 | zremrangebyscore key 100 200 | |
| zrevrange | zrange的递减排序版 | zrevrange a 0 -1 | |
| zrevrangebyscore | 递减排序score之间的 | zrevrangebyscore key 100 200 | |
| zrevrank | 递减排序成员所在排名 | zrevrank key tom | |
| zscore | 返回成员权重 | zscore key tom | |
| zunionstore | 多个key的并集并保存 | zunionstore result count key1 key2… | 必须有count,指明有几个key需要合并 |
| zinterstore | duogekey求交集并保存 | zinterstore result count a b | |
| zscan | 查看元素 | zscan key 0 |
1.zunionstore
ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3 aggregate max
有programmer和mannger两个set,将他们连接起来存到salary里面,其中manager的权重都乘以3,合并用最大值
2.zrange
zrange key min max withstores:
withstores显示权重
min max设置权重最大最小
显示key的权重最大max最小min的成员 并显示权重
7.事务
| 命令 | 意思 | 案例1 | 案例2 |
|---|---|---|---|
| multi | 标记一个事务块的开始 | multi | |
| exec | 事务执行 | exec | 在multi到exec会全部一起运行 |
| discard | 取消事务 | discard | |
| watch | 监视key | watch key1 key2… | 配合multi使用 |
| unwatch | 取消对所有key监视 | unwatch | 如果exec或discard被执行了,unwatch就没必要了 |
发布订阅
| 命令 | 意思 | 案例1 | 案例2 |
|---|---|---|---|
| psubscribe | 订阅 | psubscribe new.* tweet.* | 和subscribe的区别是可以模式匹配,在redis有大量频道时性能会有影响,因为要匹配 |
| subscribe | 订阅 | subscribe news.it news.sport | 没有模式匹配 |
| publish | 发送到制定频道 | publish new.test ‘hello world’ | 返回几就是有几个订阅者接收到数据 |
| pubsub | 查看 | pubsub channels 所有 | pubsub channels news.* |
| punsubscribe | 退订 |
1.pubsub
pubsub channels pattern
channels查看所有频道的,没有pattern是所有
pubsub numsub news.it
numsub看频道订阅者数量,subscribe的
pubsub numpat channel1 channel2…
numpat看频道数量
pubsub numpat
numpat看频道订阅者数量,psubscribe的
本文详细介绍了Redis的安装配置,包括设置端口、允许远程访问、持久化选项和密码保护。此外,还列举了多种关键命令,如数据类型的操作、事务处理、发布订阅功能,以及各种命令的使用场景和示例。
970

被折叠的 条评论
为什么被折叠?



