redis笔记之八大数据结构

本文介绍了 Redis 这种非关系型数据库,强调其高性能和丰富数据类型。文章详细阐述了 Redis 的安装部署,接着演示了 String、List、Set、Hash、Zset、Geospatial、Hyperloglog 和 Bitmaps 八种数据结构的使用,并提供了具体的应用场景,如 Bitmaps 统计用户状态,Hyperloglog 计算网站UV,以及 Set 实现社交功能等。
摘要由CSDN通过智能技术生成

一、redis是什么

在说redis之前,我们需要理解一下nosql,非关系型数据库,在以往,我们主要是以关系型数据库为主的mysql就是一种关系型数据库,那么什么是关系型数据库呢?简单点说就是以行和列的形式存储数据,以便于用户理解,行和列汇总起来形成表,一组表汇总起来就形成了数据库。

那么什么是非关系型数据库呢?它代表着不仅仅是sql,没有申明查询语言,主要是以键值对进行查询,也有列存储,文档存储、图形数据库等等,并且非常好扩展,因为数据与数据之间没有关系,同时支持大数量的情况下的高性能(就redis来说,一秒钟可以写8万次,可以读11万次),另外呢,还支持各种各样的数据类型,光是这一点,就是关系型数据库无法比拟的,因为如果采用关系型数据库,那么就需要提前设计数据库,如果涉及的数据量极大的话,就无法进行设计了。

那么作为非关系型数据库里面最优秀的redis,开一篇文章讲解它就显得很有必要了。
redis=》remote dictionary server,叫做远程字典服务。

特性为:

  • 性能极高,Redis能支持超过100K+每秒的读写频率;
  • 丰富的数据类型,Redis支持二进制案例的StringsListsHashesSetsOrdered Sets数据类型操作;(下面会一一讲解)
  • 原子,Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行;
  • 丰富的特性 – Redis还支持publish/subscribe, 通知, key过期等等特性。

二、redis使用步骤

1.liunx上安装部署

#使用linux wget命令下载
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
#解压源码
tar -zxvf redis-5.0.8.tar.gz
#进入解压后的目录进行编译
cd redis-5.0.8/
#基本的环境安装
yum install -y gcc-c++
#编译安装
make
make install

在这里插入图片描述

在linux环境下,redis的默认安装路径为/usr/local/bin

#/usr/local/bin目录下
mkdir myconfig
cp /opt/redis-5.0.8/redis.conf myconfig/
vim redis.conf

在这里插入图片描述

##启动redis服务
redis-server /usr/local/bin/myconfig/redis.conf 
#客户端连接redis
redis-cli -p 6379

至此,redis的环境已经搭建好了,接下来就是演示如何操作redis了。

首先,我们来一个并发测试吧!
在这里插入图片描述

//100个并发连接100000个请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000

2.8种数据结构类型演示

  1. String
//设置值,取值
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379>
//追加字符串,如果不存在就默认相当于set
127.0.0.1:6379> append key1 海辉最棒
(integer) 18
127.0.0.1:6379> get key1
"value1\xe6\xb5\xb7\xe8\xbe\x89\xe6\x9c\x80\xe6\xa3\x92"
127.0.0.1:6379> append key2 value2
(integer) 6
//自增1,只接受integer类型,如果不是会报错。
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> incr num
(integer) 4
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> incr name
(error) ERR value is not an integer or out of range
//一个道理,自减1,只接受integer类型,如果不是会报错。
127.0.0.1:6379> decr num
(integer) 3
127.0.0.1:6379> decr num
(integer) 2
127.0.0.1:6379> decr name
(error) ERR value is not an integer or out of range
127.0.0.1:6379> 
//按照指定步长增加和减少
127.0.0.1:6379> incr num 20
(error) ERR wrong number of arguments for 'incr' command
127.0.0.1:6379> incrby num 20
(integer) 22
127.0.0.1:6379> incrby num 5
(integer) 27
127.0.0.1:6379> decrby num 5
(integer) 22
127.0.0.1:6379> decrby num 19
(integer) 3
127.0.0.1:6379> 
//截取字符串获取,0 -1 表示截取全部。
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379> getrange name 1 3
"han"
127.0.0.1:6379> getrange name 0 -1
"zhangsan"
127.0.0.1:6379> 
//还可以指定截取哪一部分,并用什么代替。
127.0.0.1:6379> set name lishi
OK
127.0.0.1:6379> setrange name 0 abc
(integer) 5
127.0.0.1:6379> get name
"abchi"
127.0.0.1:6379> 
//设置过期时间,多少秒过期,ttl实时获取还有多少秒过期
127.0.0.1:6379> setex age 20 18
OK
127.0.0.1:6379> ttl age
(integer) 17
127.0.0.1:6379> ttl age
(integer) 15
127.0.0.1:6379> ttl age
(integer) 14
127.0.0.1:6379> ttl age
(integer) 13
127.0.0.1:6379> ttl age
(integer) 10
127.0.0.1:6379> 
//sexnx如果不存在就创建,如果有就创建失败,返回0
127.0.0.1:6379> set name1 luhaihui
OK
127.0.0.1:6379> setnx name1 liushoaxiong
(integer) 0
127.0.0.1:6379> keys *
 1) "num"
 2) "key:__rand_int__"
 3) "mylist"
 4) "counter:__rand_int__"
 5) "myhash"
 6) "name"
 7) "name1"
 8) "key1"
 9) "key2"
10) "sex"
127.0.0.1:6379> setnx name2 liushaoxiong
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> mset name3 zhangzan age3 18 name4 zhaoliu age4 20
OK
127.0.0.1:6379> mget name3 age3 name4 age4
1) "zhangzan"
2) "18"
3) "zhaoliu"
4) "20"
127.0.0.1:6379> 
//批量设置,批量获取,msetnx批量设置,不存在再设置,存在的话,设置失败
127.0.0.1:6379> mset name3 zhangzan age3 18 name4 zhaoliu age4 20
OK
127.0.0.1:6379> mget name3 age3 name4 age4
1) "zhangzan"
2) "18"
3) "zhaoliu"
4) "20"
127.0.0.1:6379> msetnx name3 lishi age3 100 name4 age4 500
(error) ERR wrong number of arguments for MSET
127.0.0.1:6379> msetnx name3 lishi age3 100 name4 wangwu  age4 500
(integer) 0
127.0.0.1:6379> 
//获取原来的值,并设置新的值,如果原来的值不存在,那么就返回null
127.0.0.1:6379> getset db mysql
(nil)
127.0.0.1:6379> getset db oracle
"mysql"
127.0.0.1:6379> 
  1. list
//list的基本操作,lpush,rpush,lrange,lpop,rpop,lindex
127.0.0.1:6379> lpush list1 one
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值