redis入门

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 技术参考文档

http://redisdoc.com/

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个不同的位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值