Redis入门
1.Linux 安装 redis
1.下载redis安装包 https://redis.io/download/
2.解压缩 tar -zvxf redis-7.2-rc2.tar.gz
3.进入解压缩之后的目录执行 make
4.执行make过程中如果遇到
,原因是Linux中缺少gcc
执行 yum -y install gcc automake autoconf libtool make
5.重新执行make。如果遇到
,则需要在make时指定分配器为libc
执行 make MALLOC=libc
6.安装 make install PREFIX=/usr/local/redis
安装成功之后结果如下:
2.Redis操作
1.启动
进入bin目录
./redis-server [../redis-config] & ../redis-config 配置文件
注意:如果要在本地连接服务器上的redis需要修改配置文件,在bind 后面添加服务器IP地址,关闭保护模式。如下图:
2.连接工具
在本地通过redis-cli 命令即可连接
redis-cli -h [IP地址] -p [端口号]
常见错误
1.Error: 在驱动器 %1 上插入软盘。
重新连接redis服务器即可
2.显示错误信息,如下图
通过设置config文件,关闭保护模式,或者设置密码等方式解决
3. redis设置了密码,需要进行身份校验
auth 密码
2.停止
通过 redis-cli 连接redis服务之后,执行 shutdown命令
3.全局命令
1.keys ***** 查看所有的key
2.dbsize 查看redis中有多少个key
3.EXISTS key name 查看指定key是否存在
4.del key name 删除指定key
5.SET key value 设置键值对。
SET key value NX 设置键值对。当键不存在才会插入成功
SET key value XX 设置键值对。当键存在才会插入成功
设置之后过期失效
**** mset k v k v k v... 批量设置g
mget k k k... 批量获取
6.EXPIRE key name 时间/s 设置指定键的有效时间
PEXPIRE key name 时间/ms 以毫秒来设置有效时间
**EXPIREAT key name 时间戳 **
7.ttl key name 查看指定键的有效时间
返回正数,显示的是有效时间
返回-1,表示不过期
返回-2,表示失效
8.rename old_name new_name 重命名
renamenx old_name new_name 重命名
注意:如果redis中有和 new_name 同名的键,那么会先删除同名的键。所以在重命名时建议使用renamenx。 使用renamenx时,当存在同名键时,返回0,表示修改失败
9.type key name 查看指定键的数据类型
10.incr key name 自增
incrby key name num 自增num 用于整数
incrbyfloat key name num 自增num 用于浮点数
11.decr key name 自减
key 命名规范 -> 业务名_对象名_属性名
3.Redis基本数据类型 String, Hash, list, set, zset
1.String:Redis没有直接使用C语言的String类型,而是自己去实现了
append key str 将str追加到key值后面
strlen key 返回key对应value的长度
getset key value 返回old_value
getrange key start_index end_index 截取key对应value
2.Hash:类似于HashMap
hmset key k v k v 设置Hash类型 / hset key k v
hget key k 查询Hash类型
hdel key k 删除Hash类型指定的key中的k
hlen key 获取Hash类型指定key键值对的长度
hmget key k k k 批量获取Hash类型中指定key的指定键的value
hexists key k 查看Hash类型中指定key中是否存在k
hkeys key 获取Hash类型中指定key中的所有k
hvals key 获取Hash类型中指定key中的所有value
hgetall key 获取Hash类型中指定key中的所有k v k v...
hincrby key k num Hash类型自增
3.List:允许重复,链表实现。可存储232-1的数据。可以利用下表获取数据
rpush key e e e... 在右边插入list类型数据
lpush key e e e... 在左边插入list类型数据
lrange key start_index end_index 获取list类型指定key中从start_index到end_index的value
当不知道list长度时,end_index可以设置为-1
lpop key [count] 从左往右弹出[ count****个]list中的value,不写count 默认为1
rpop key [count] 从右往左弹出[ count****个]list中的value,不写count 默认为1
lrem key count element 删除key中count个**element******
count为负数时,表示从右往左删除
ltrim key start_index end_index 截取元素,从start_index到****end_index
lset key index element 将list中指定index的元素改为****element
lindex key index 获取key对应list中下标为index的元素
llen key 获取key对应list的长度
blpop key timeout
4.Set:不允许重复,无序
sadd key e e e... 添加
smembers key 查询
srem key e e e... 删除
scard key 获取元素个数
sismember key e 判断某个元素是否存在
srandmember key 随机获取一个元素
sinter key1 key2 获取key1key2的交集
sinterstore new_key key1 key2 获取key1key2的交集,并将结果保存到new_key中
sunion key1 key2 获取key1key2的并集
sdiff key1 key2 获取key1key2的差集,以key1为主
4.redis高级数据结构 Bitmaps HyperLogLog GEO
1.Bitmaps 底层用bit数组实现
setbit key offset value 设置Bitmaps类型数据 offset:偏移量 value: 0 / 1
getbit key offset
bitcount key start_off end_off
布隆过滤器:一种算法,用于判断一个元素是否在一个集合中,通过一个二进制数组和一个Hash算法组成
可以解决缓存穿透问题
2.HyperLogLog 本质是字符串类型,通过算法,数据结构等实现,用于解决统计问题 (UV:独立访客;PV:页面浏览量)
HyperLogLog提供不精确的去重计数方案,标准误差是0.81%。这样的精度已经可以满足UV统计需求了
pfadd key e e e... 添加HyperLogLog类型数据****
pfcount key 统计
pfmerge new_key key1 key2.. 将key1,key2做并集然后结果保存到new_key中
HyperLogLog原理解析HyperLogLog基于概率论中伯努利试验,并结合了极大似然估算方法,并做了分桶优化(16384个桶)
pfadd key e e e...
在redis底层会将e通过Hash算法转换成64位的二进制串,然后根据低14位的二进制数确定分桶(214 = 16384)。 然后剩余50位用于计算。计算位中从地位往高位方向,第一次出现1的位数保存在对应桶中。桶中只保存最大值,也就是说一个桶中最大保存50,对应二进制位 110010 6位,
由此可得: HyperLogLog中一个key对应的value = 16384 * 6 / 8 / 1024 = 12kb
3.GEO 业界比较通用的地理位置距离排序算法是GeoHash算法
redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信息
1.地图元素的位置数据使用二维的经纬度表示
2.经度范围(-180,180),纬度范围(-90,90)
3.纬度正负以赤道为界,北正南负
4.经度正负以本初子午线(英国格林尼治天文台)为界,东正西负
geoadd key longitude latitude member 设置key中member的经纬度
geopos key member 获取key中member对应的经纬度