1. Redis简介
1.1 是什么
开源免费的;
c语言编写的;
单线程,高性能的(key/value)内存数据库;
基于内存运行并支持持久化的nosql数据库。
1.2 能干什么
可以用来做缓存,分布式锁,单点登录会话缓存,统计网站访问量等等。
1.3 下载
redis各个版本下载链接
http://download.redis.io/releases/
1.4 安装
1.解压
tar -zxvf redis-5.0.7.tar.gz
2.编译
make
3.安装
make PREFIX=/usr/local/redis install
PREFIX:指定安装目录,未指定时默认路径为/usr/local/bin。
1.5 技术参考文档
2. Redis简单配置以及启动,关闭
2.1 Redis简单配置
#允许通过本机任意ip连接redis
bind 192.168.212.152
port 6379
#允许以守护进程方式运行redis服务
daemonize yes
#指定pid文件
pidfile /soft/redis/redis.pid
#指定日志文件
logfile "/soft/redis/redis.log"
#配置登录密码,可不配
requirepass 123456
2.2 Redis启动
/soft/redis/bin/redis-server /soft/redis/redis.conf
2.3 Redis关闭
正常关闭
echo shutdown|/soft/redis/bin/redis-cli -h 192.168.212.152
非正常关闭
kill 进程
3 Redis基本数据类型以及API操作
3.1 key
#查看当前库的key列表
keys *
#判断某个key是否存在
exists key
#将key移动至指定库db
move key db
#为key设置过期时间
expire key
#查看key还有多长时间过期,-1:永不过期,-2:已经过期
ttl key
#查看key什么类型
type key
3.2 String
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
#设置key value
set key value
#查看当前key的值
get key
#删除key
del key
#如果key存在,则在指定的key末尾添加,如果key不存在则类似set
append key value
#返回此key的长度
strlen key
以下几个命令只有在key值为数字的时候才能正常操作
#为执定key的值加一
incr key
#为指定key的值减一
decr key
#为指定key的值增加数值num
incrby key num
#为指定key的值减数值num
decrby key num
特殊操作
# 获取指定区间范围内的值,类似between......and的关系 (0 -1)表示全部
getrange key startIndex endIndex
#设置(替换)指定区间范围内的值
setrange key startIndex 1(开始位置,从哪里开始设置) value
#设置带过期时间的key,动态设置
setex key seconds value
#只有在 key 不存在时设置 key 的值。
setnx key value
#同时设置一个或多个 key-value 对。
mset key1 value key2 value
#获取所有(一个或多个)给定 key 的值。
mget key1 key2
#同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
msetnx key1 value key2 value
#将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
getset key value
3.3 list
底层实际是个链表,元素可重复
#将一个或多个值加入到列表头部
lpush key value1 value2
# 将一个或多个值加入到列表底部
rpush key value1 value2
#获取列表指定范围的元素 (0 -1)表示全部
lrange key start end
#移出并获取列表第一个元素
lpop key
#移出并获取列表最后一个元素
rpop key
#通过索引获取列表中的元素
lindex key index
#获取列表长度
llen key
#表示删除全部给定的值。零个就是全部值 从left往right删除指定数量个值等于指定值的元素,返回的值为实际删除的数量
lrem key num value
#截取指定索引区间的元素,格式是ltrim list的key 起始索引 结束索引
ltrim key start end
3.4 set
Redis的Set是string类型的无序,不能重复的集合。
#向集合中添加一个或多个成员
sadd key value1 value2
#返回集合中所有成员
smembers key
#判断member元素是否是集合key的成员
sismembers key member
#获取集合里面的元素个数
scard key
#删除集合中指定元素
srem key value
#从set集合里面随机取出指定数值num个元素 如果超过最大数量就全部取出,
srandmember key num
#随机移出并返回集合中某个元素
spop key
#将key1中指定的值移除 加入到key2集合中
smove key1 key2 value(key1中某个值)
#在第一个set里面而不在后面任何一个set里面的项(差集)
sdiff key1 key2
#在第一个set和第二个set中都有的 (交集)
sinter key1 key2
#两个集合所有元素(并集)
sunion key1 key2
3.5 hash
一个键值对集合,
一个string类型的field和value的映射表,hash特别适合用于存储对象。
#向hash表中添加一个元素
hset key filed value
#向hash表中获取一个元素
hget key filed
#向集合中添加一个或多个元素
hmset key filed1 value1 filed2 value2 filed3 value3
#向集合中获取一个或多个元素
hmget key filed1 filed2 filed3
#获取在hash列表中指定key的所有字段和值
hgetall key
#删除一个或多个hash字段
hdel key filed1 filed2
#获取hash表中字段数量
hlen key
#查看hash表中,指定key(字段)是否存在
hexits key filed
#获取指定hash表中所有key(字段)
hkeys key
#获取指定hash表中所有value(值)
hvals key
#数量(整数) 执定hash表中某个字段加 数量 ,和incr一个意思
hincrdy key filed
#数量(浮点数,小数) 执定hash表中某个字段加 数量 ,和incr一个意思
hincrdyfloat key filed
#与hset作用一样,区别是不存在赋值,存在了无效。
hsetnx key filed1 value1
3.6 zset
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
#向集合中添加一个或多个成员
zadd key score value1 score value2
#返回指定集合中所有value,
zrange key 0 -1
#返回指定集合中所有value和score
zrange key 0 -1 withscores
# 返回指定score间的值
zrangebyscore key startScore endScore
#某个对应值(value),可以是多个值 删除元素
zrem key score
#获取集合中元素个数
zcard key
#获取分数区间内元素个数
zcount key startScore endScore
#获取value在zset中的下标位置(根据score排序)
zrank key vlaue
#按照值获得对应的分数
zscore key value
4 Redis扩展
1.Pipeline
注意:使用Pipeline的操作是非原子操作
2.GEO
GEOADD locations 116.419217 39.921133 beijin
GEOPOS locations beijin
GEODIST locations tianjin beijin km 计算距离
GEORADIUSBYMEMBER locations beijin 150 km 通过距离计算城市
注意:没有删除命令 它的本质是zset (type locations)
所以可以使用zrem key member 删除元素
zrange key 0 -1 表示所有 返回指定集合中所有value
3.hyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 结构。
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
PFADD 2017_03_06:taibai ‘yes’ ‘yes’ ‘yes’ ‘yes’ ‘no’
PFCOUNT 2017_03_06:taibai 统计有多少不同的值
1.PFADD 2017_09_08:taibai uuid9 uuid10 uu11
2.PFMERGE 2016_03_06:taibai 2017_09_08:taibai 合并
注意:本质还是字符串 ,有容错率,官方数据是0.81%
4.bitmaps
setbit taibai 500000 0
getbit taibai 500000
bitcount taibai
Bitmap本质是string,是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset)。
string(Bitmap)最大长度是512 MB,所以它们可以表示2 ^ 32=4294967296个不同的位。