Redis学习笔记

简介:

Redis 远程字段服务,是由C语言编写的中间件。redis是基于内存设计的K-V数据库且单线程执行命令。

安装:

1、下载,在官网下载redis-4.tar.gz即可,或者linux中在线下载 wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2、复制到 opt 文件中解压,tar -zxvf redis-4.0.tar.gz
3、先安装gcc, yum install gcc-c++
4、cd redis-4.0 进入redis文件 make编译,然后执行make install

若make install时,提示server.c:2985:15: error: ‘struct redisServer’ has no member named ‘aof_state’;

则需要升级gcc,
1、yum -y install centos-release-scl
2、yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
3、scl enable devtoolset-9 bash


5、安装好了,默认安装到usr/local/bin中
6、复制配置文件redis.conf到新的文件夹,修改配置daemonize no 改成 yes
7、启动服务redis-server  redis.conf   指定配置文件启动
8、启动客户端 redis-cli  -p 6380 指定端口连接
9、连通测试 ping命令,pong回应
10、退出 redis-cli 用 exit
11,关闭redis-server
在redis-cli命令输入:shutdown  或 直接在服务器 kill   pid

12、重启 ,没有直接重启,只能关闭再启动

ps:题外话,在vim文件时,快速定位要找的字符串,只需:/内容 回车即可自动匹配。n键向下翻找


基础知识:

1 密码设置:

1.修改redis.conf中,requirepass xxxxx 密码,重新启动加载即可。
2.或者config set requirepass xxxx 即可。
3.再次执行命令时,提示没有权限,则需登录
4.密码验证:auth xxxx
5.查询密码,config get requirepass ,需要登录才可以查询密码。

2 指定IP访问

设置redis.conf中的bind 【 注意: bind 指定是Redis所在服务器网卡的ip,不是指定某些IP可以访问本机Redis实例

bind 127.0.0.1  #仅能本机访问

#bind 127.0.0.1    #所有IP都可以访问

bind 127.0.0.1   172.16.2.106(服务器的另一个网卡IP,不是访问的IP)  #支持指定多个IP访问

3 数据类型

String、Hash、Set、List、Zset、Hyperloglog、Geo、Streams

前五种是常用数据类型。

特殊类型

Hyperloglog:基数统计,常用于每日UV、每日PV等千万级统计,只占用12K内存即可实现,大幅度节省空间。

Bitmap:位存储,合理利用byte,实现每日打卡、签到等功能,节省存储空间。

Geo:经纬度,常用于经纬度位置存储,距离计算等。

Streams:消息队列,比List功能更完善的消息队列。

1、String支持的存储类型 int整数、float单精度浮点数、String字符串

数据结构:

int,存储8个字节的长整型(long,2^63-1)

embstr,代表embstr格式的SDS,存储小于44个字节的字符串。

raw,存储大于44个字节的字符串

String数据类型的redis底层结构:

 

 2、Hash,存储多个无序键值对

数据结构:ziplist 压缩链表、hashtable 哈希表。

ziplist是连续的内存,时间换空间的概念。不存储上个节点的指针,而是存储上个节点的长度。

hashtable的存储结构是数组+链表。

使用ziplist的条件,若不满足则使用hashtable:

1、哈希对象保存的键值对数量小于512个;

2、所有键值对的值和键的字符串长度都小于64byte

redis.conf配置:

hash-max-ziplist-entries 512 

hash-max-ziplist-value 62

 

3、List ,存储有序的字符串,元素可以重复

数据结构:

quicklist:是数组+链表。它存储了一个双向链表,每个节点都是ziplist。

4、Set,无序不可重复存储

数据结构:

元素全是数字用inset,有字符或者数量大于512个则用hashtable,可配置。

set-max-inset-entries 521  数量大于512个用hashtable

5、Zset

数据结构:默认ziplist,数量大于等于128个或任一元素大于64字节则使用skiplist+dict存储,可配置。

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

 
4 简单命令

redis的单个命令都具有原子性。

keys * 查看所有key值
keys "wang*" 查看匹配前缀的keys
flushdb 清空当前库
flushall 清空所有库
dbsize 查看库中key的数量
select 库角标 切换数据库
exsits key 判断key是否存在
expire key 秒钟 为key设置过期时间
type key 查看key数据类型
rename wang wang01 重命名键

type wang 获取key的数据类型
object encoding wang 获取key的数据编码


String:

set k1 v1 存k-v
get k1 获取value
del k1 删除k-v
append k1 zf 追加内容
strlen k1 获取value长度
incr k1 value加1
decr k1 value减1
incrby|decrby k1 3 value加/减3
mset/mget 设置|获取多个
setnx k1 v1 若k1不存在,则存k-v  。是原子性操作
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]  原子操作

Hash  hash不能设置单个键的过期时间

hset wang k1 v1
hget wang k1
hkeys wang 获取所有key
hvals wang 获取所有value
hmset wang k1 v1 k2 v2 设置多个k-v
hmget wang k1 k2
hgetall 获取全部k-v
hincrby wang k1 -1 数值减一
hdel wang k1 删除键
hlen wang 获取键的数量

List: 列表

lpush k1 java 从左边插入
rpush k1 c++ 从右边插入
lrange k1 0 -1 查看key中区间元素
lpop|rpop 从左|右取出
lindex 根据索引查出元素
llen 获取数据长度

blpop 阻塞获取,如果暂时没有值,则等到超时或弹出值为止
brpop 阻塞获取,如果暂时没有值,则等到超时或弹出值为止

Set:无序集合

sadd myset a b c 添加一个或多个元素
smembers myset 获取所有元素
scard myset 统计元素个数
srandmember myset 随机获取一个元素,并不会减少元素
spop myset 随机弹出一个元素
srem myset a b 移除一个或多个元素
sismember myset a 判断元素是否存在


sdiff set1 set2 获取差集
sinter set1 set2  获取交集
sunion set1 set2 获取并集

Zset:  有序集合

zadd myzset 10 java 5 php 30 ruby 40 python  添加元素
zrange myzset 0 -1 withscores  获取全部元素
zrevrange myzset 0 -1 withscores 倒序获取全部元素
zrangebyscore myzset 20 30  根据分值区间获取元素
zrem myzset python   移除元素
zremrangebyrank myzset 1 2 根据排名范围删除元素
recard myzset  统计元素个数
zincrby myzset 5 ruby 增加分值
zcount myzset 20 50  根据分值统计元素个数
zrank myzset java  获取元素的排名
zscore myzset python   获取元素分值

踩坑:

Response received : -ERR max number of clients reached   异常提示连接池满了

排查原因

1,通过命令 lsof -p pid |wc -l 查看Redis的连接数。#pid为redis-server的pid值

2,检查项目中使用JedisPool后有没有执行 JedisPool.clos();

3,检查jedisPool有没有配置 destroy-method="close" ;  好像有的版本是destroy-method="destroy" 。

      作用:关闭重启web项目的时候,会调用连接池的destroy,释放redis的连接

<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="close">
    <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
    <constructor-arg name="host" value="${redis.host}"/>
    <constructor-arg name="port" value="${redis.port}"/>
    <constructor-arg name="password" value="${redis.password}"/>
    <constructor-arg name="timeout" value="3000"/>
</bean>

4, 修改redis.conf文件的maxclient ,修改到20000,然后重启

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值