Redis学习
文章目录
1. install redis
- window install
1. redis-cli.exe -h 127.0.0.1 -p 6379从github上下载,然后解压
2. 启动服务器端:进入解压后的目录--->cmd--->redis-server.exe redis.windows.con
3. 启动客户端:进入解压后的目录--->cmd--->redis-cli.exe -h 127.0.0.1 -p 6379
- linux
a. 解压缩方式
wget http://download.redis.io/releases/redis-6.0.8.tar.gz tar xzf redis-6.0.8.tar.gz cd redis-6.0.8 make
执行完
make
命令之后,在redis-6.0.8/src目录下会出现redis-server 以及 redis-cli
启动redis-server
启动redis-cli
b. docker方式
# install redis docker push redis # 查看images docker images
因为需要redis的配置文件,这里最好还是去redis的官方去下载一个redis使用里面的配置文件即可
# 修改 redis.conf bind 127.0.0.1 #注释掉这部分,使redis可以外部访问 daemonize no#用守护线程的方式启动 requirepass 你的密码#给redis设置密码 appendonly yes#redis持久化 默认是no tcp-keepalive 300 #防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300 # 创建本地与docker映射目录,即本地存放位置 # 可以自定义,因为我的docker的一些配置文件都是存放在/data目录下面的,所以我依然在/data目录下创建一个redis目录,这样是为了方便后期管理 mkdir /data/redis mkdir /data/redis/data # 把配置好的文件拷贝到新建目录下 cp -p redis.conf /data/redis/ # 启动 docker run -p 6379:6379 --name redis -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
-p 6379:6379:把容器内的6379端口映射到宿主机6379端口
-v /data/redis/redis.conf:/etc/redis/redis.conf:把宿主机配置好的redis.conf放到容器内的这个位置中
-v /data/redis/data:/data:把redis持久化的数据在宿主机内显示,做数据备份
redis-server /etc/redis/redis.conf:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动
–appendonly yes:redis启动后数据持久化# 查看是否启动成功 docker ps # 查看日志 docker logs redis
2. Redis优势
性能高,V读=110000次/s ,V写=110000次/s
所有操作都是原子操作、支持事务
3. Redis数据类型
- String(字符串) [set|get]
- Hash(哈希)
- List (列表)
- Set (集合)
4. Redis 命令
- 4.1. 连接 Redis
redis-cli -h host -p port -a password 连接 host机器端口为 port且密码为password的redis服务
5. Key 命令
DEL key``````del hemiao
该命令用于key存在时删除key,成功返回1,失败0EXISTS key
判断是否存在可以,若存在返回1,不存在返回0RANDOMKEY
从当前数据库中随机返回一个keyRENAME key newKey
修改key的名称RENAMENX key newKey
仅当newKey不存在时,将key更改为newKeyTYPE KEY
返回key所存储的值的类型
6. String 命令
set key value
设置指定key的值get key
获取指定key的值getrange key start end
返回key对应的value的start到end的子字符串getset key value
将key对应的值设为value,并且返回key对应的旧值(old value)mget key1[key2,....]
获取给定key的值mget luoyanchao hemiao
setnx key value
只有在key不存在时设置key的值。
7. Hash命令 特别适合用于存储对象
Redis hash 是一个键值(key=>value)对集合
R
edis hash 是一个String类型的field和value的映射表,hash特别适合用于存储对象
个人理解:Hash存储的是对象,如luoyanchao(sex:female,age:27,…)
HMSET key field1 field1_Value field2 field2_value``````HMSET luoyanchao sex female age 27
存储对象luoyanchao(sex:female,age:27)hmget key field1...fieldn
获取对象key的field1到fieldn属性的属性值hset key field1 value1
修改对象key的field1属性值为value1,key.fieldSet(this.field1=value1)hset luoyanchao age 28
修改对象luoyanchao的年龄为28岁,luoyanchao.setAge(this.age=28)hget key field1``````hget luoyanchao age
得到luoyanchao对象的age,luoyanchao.getAge(age)HDEL key field1
删除对象的某个属性hexists key field
查看hash表key对象的field属性是否存在hgetall key
获取key对象的所有属性和属性值hkeys key
获取key对象的所有属性hlen key
获取对象key的有多少属性hvals key
获取对象key的所有属性对应的属性值
8. List命令
Redis 列表是简单的字符串列表,按照插入顺序排序,可以添加在列表的头部(左边)或者尾部(右边)
个人理解:luoyanchao[123,[123,456]]
-
lpush key value[value,...]
将一个或多个值插入列表头部,左插入lpush luoyanchao 123 lpush luoyanchao [123,456]
-
rpush key value[value,...]
将一个或多个值插入列表尾部,右插入
rpush luoyanchao 123
rpush luoyanchao [123,456]
lpop key
移出key集合第一个元素,返回值为第一个元素值rpop key
移出key集合最后一个元素,返回值为最后一个元素值blpop key1 timeout
移出并获取列表第一个元素
blpop luoyanchao 4
if luoyanchao 为空:
return (nil)
(4s)
if luoyanchao集合不空,则返回 集合第一个元素的属性和属性值
return "luoyanchao"
"[123,456]"
brpop key1 timeout
移除并获取列表最后一个元素
brpop luoyanchao 4
if luoyanchao 为空:
return (nil)
(4s)
if luoyanchao集合不空,则返回 集合第一个元素的属性和属性值
return "luoyanchao"
"123"
lindex key index
插入key生成的index就是索引,获取key列表index对应的值,也就是list的下标对应的值,key(index)|key[index]linsert key before|after pos value
插入value在key集合pos值之前或之后llen key
key集合的长度lrem key count value
移除列表元素,移除count次数key集合中值为valuelset key index value
根据index设置key集合的值,key(index)=value|key[index]=value
9. Set 集合
Redis 的Set是string类型的无序集合。
集合是通过哈希表实现的,Ocrud = O(1)
- sadd 命令
sadd key member
添加一个String元素到key对应的Set集合中,成功返回1,如果元素已经在集合中返回0
sadd luoyanchao xi'an sadd luoyanchao dangdang sadd luoyanchao T1
scard key
返回集合中元素的数量scard luoyanchao // (integer) 3
sismember key value
返回value是否在key集合中,如果存在返回1,否则返回0sismember luoyanchao salary // (integer)0
smembers key
返回key集合的所有成员spop key
移除并返回集合中的一个随机元素【set集合是无序的】srandmember key count
随机返回count个key集合中的元素,count=1时,可不写
- zset命令 (sorted set: 有序集合)
zadd key score member
Redis zset和set一样也是String类型元素的集合,且不允许重复的成员
zset每个元素都会关联一个double类型的分数。zset通过分数为集合中的成员进行升序排序
zset的成员是唯一的,但分数可以重复
zcard key
获取有序集合key的成员数zcount key min max
计算有序集合key的分数在min到max区间的成员数zrem key member
移除有序集合key中的member元素(可移除多个)
10. HyperLogLog 基数计算
hyperLogLog用来统计基数的算法
基数?比如数据集{1,3,5,7,5,7,8},那么数据集的基数集{1,3,5,7,8},基数(不重复元素的个数)5
pfadd key value
添加value到key的HyperLogLog中pfcount key
pfadd luoyanchao spark // (integer)1 添加成功
pfadd luoyanchao redis // (integer)1 添加成功
pfadd luoyanchao linux // (integer)1 添加成功
pfcount luoyanchao // (integer)3
11. 事务
单个Redis命令的执行是原子性的,但是Redis事务的执行并不是原子性的
Redis事务,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做
multi // 事务的开始
set luoyanchao "xi'andangdang"
get luoyanchao
sadd hemiao 27 zhaoshang
smembers hemiao
exec // 事务的执行
// 输出
1) OK
2) "xi'andnagdnag"
3) (integer)2
4) 1) 27
2) zhaoshang
discard
事务取消,放弃执行事务块内的所有命令exec
执行事务块内的命令