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 hemiaosetnx 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 keykey集合的长度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) 3sismember key value返回value是否在key集合中,如果存在返回1,否则返回0sismember luoyanchao salary // (integer)0smembers 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执行事务块内的命令
21万+

被折叠的 条评论
为什么被折叠?



