启动后杂项基础知识
- 在
/usr/local/bin
下执行命令redis-benchmark
可以测试redis在机器运行的效能 - 默认端口是
6379
- 单进程
- 单进程模型来处理客户端的请求。对读写等事件的响应 是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率
- Epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本, 它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
- 默认16个数据库,类似数组下表从零开始,初始默认使用零号库,可在配置文件配置
select
命令切换数据库dbsize
查看当前数据库的key的数量flushdb
:清空当前库flushall
;通杀全部库- 统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上
- Redis索引都是从零开始
Redis的五大数据类型
keys关键字
keys *
:查看所有keyexists [key]
:判断某个key是否存在move key db
:移动到另一个库中,移动后当前库就没有了expire key 秒
:为给定的key设置过期时间ttl key
:查看还有多少秒过期- -1表示永不过期
- -2表示已过期
type key
查看你的key是什么类型
String
- string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
- string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
- string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
常用命令
- set/get/del/append/strlen
- Incr/decr/incrby/decrby,一定要是数字才能进行加减
- getrange/setrange
- setex(set with expire)键秒值 / setnx(set if not exist)
- mset/mget/msetnx
- getset(先get再set)

Hash(重要)
KV模式不变,但V是一个键值对
#添加一个/查询一个/添加多个/查询多个/删除一个或多个
hset/hget/hmset/hmget/hgetall/hdel key field value
hset user id 1
hmset user name birdy age 18
hmget user id #1
hmget user #1 birdy 18
hgetall user #id 1 name birdy age 18
#获取哈希表key的字段数量
hlen key
hlen user #3
#哈希表key是否存在field属性
hexists key field
#获取哈希表key的所有属性/值
hkeys/hvals key
#为哈希表key执行字段的整数值/浮点值增加increment
hincrby/hincrbyfloat key filed increment
#添加并判断是否已存在,若存在则添加失败
hsetnx key field value

List
可重复单值多value,list存储类似与栈
常用命令
#push:插入 l(left):栈顶,插入与读取顺序相反 r(right):栈尾,顺序相同 lrange:查
lpush/rpush/lrange
LPUSH list1 1 2 3 4 5
LRANGE list1 0 -1 #0和-1是索引值,0~-1表示查全部 结果为 5 4 3 2 1
LPUSH list2 1 2 3 4 5
LRANGE list2 0 -1 #1 2 3 4 5
#弹出,l:栈顶,后进先出 r:栈尾,先进先出
lpop/rpop
lpop list1 #4 3 2 1
rpop list1 #4 3 2
#按照索引下标获得元素(从上到下)
lindex
lindex list2 2 #3
#获取list长度
llen
llen list2 #5
# 删N个value
lrem key N value
rpush list3 1 1 2 2 2 2
lrem list3 3 2 #删除3个2 结果:1 1 2
#截取指定范围的值后再赋值给key
ltrim key start end
rpush list4 1 2 3 4 5
ltrim list4 0 2
lrange list4 0 -1 #1 2 3
#移除源列表的最后一个元素添加到目的列表
rpoplpush 源列表 目的列表
#通过索引改变列表值
lset key index value
#在目标值前/后插入value
linsert key before/after 目标值 value

Set
无重复单值多value
#添加/查询/是否存在
sadd/smembers/sismember key member
#获取集合里面的元素个数
scard key
#删除集合中元素
srem key value
#随机返回集合中1个或多个随机数
srandmember key [count]
#随机出栈
spop key
#将key1里的某个值赋给key2
smove key1 key2 在key1里某个值
#数学集合类
差集:sdiff 交集:sinter 并集:sunion
sadd set1 1 2 3 4 5
sadd set2 a b c 1 2
sdiff set1 set2 #3 4 5
sinter set1 set2 #1 2
sunion set1 set2 #1 2 3 4 5 a b c 真实情况下这些值是没有顺序的
Zset
在set基础上,加一个score值。 之前set是k1 v1 v2 v3, 现在zset是k1 score1 v1 score2 v2
#向有序集合中添加或更新成员/查询成员
zadd key score1 member/zrange key 索引start 索引end [withscores]
ZADD score 60 d 70 c 80 b 90 a
ZCARD score 0 -1 #d c b a 只有member
ZCARD score 0 -1 withscores #60 d 70 c 80 b 90 a
#返回满足分数区间的值
zrangebyscore key min max
ZRANGEBYSCORE score 60 80 #d c b
选项:
withscores 是否带分数返回
( 不包含
limit 开始索引 结束索引
#删除有序结合成员
zrem key 某分数对应下member
ZREM score d
ZRANGE score 0 -1 #c b a
#计算有序区间的成员数
zcard/zcount key min max
#获得索引值
zrank key member
zrank score a #2,a的索引为2
#获得成员对应分数
zscore key member
zscore score a #90
#逆序获得下标值
zrevrank key member
zrevrank score a #0
#逆序查询成员
zrevrange key start end
#查询区间成员并逆序显示
zrevrangebyscore key min max
