Redis基础

122 阅读6分钟

Redis入门

image.png

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_indexend_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对应的经纬度