redis

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,失败0
  • EXISTS key判断是否存在可以,若存在返回1,不存在返回0
  • RANDOMKEY从当前数据库中随机返回一个key
  • RENAME key newKey修改key的名称
  • RENAMENX key newKey仅当newKey不存在时,将key更改为newKey
  • TYPE 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 keykey集合的长度
  • lrem key count value移除列表元素,移除count次数key集合中值为value
  • lset 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,否则返回0 sismember 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执行事务块内的命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tiki_taka_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值