1 安装gcc
redis使用c语言开发,因为涉及编译的过程,所以需要确定安装了gcc
yum install gcc
2 安装redis,并配置服务开机自启动(fg,bg)
sudo apt install redis-server
启动redis
redis-server
查看redis是否启动
redis-cli
1 下载并解压安装包
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar -zxf redis-5.0.3.tar.gz
2 将cd切换到redis解压目录下,执行编译
cd redis-5.0.3
make install PREFIX=/usr/local/redis
3 设置开机启动
vi /etc/systemd/system/redis.service
复制下面内容的上文件
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server
PrivateTmp=true
[Install]
WantedBy=multi-user.target
4 开机启动
systemctl daemon-reload
systemctl start redis.service
systemctl enable redis.service #开机启动
#停止开机自启动 systemctl disable redis.service
5 使用redis命令创建软链接
ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis
3 Redis支持的数据类型及操作
-
redis的引用场景
- 缓存(数据查询、短连接、新闻内容、商品内容等等)
- 聊天室的在线好友列表
- 任务队列。(秒杀、抢购、12306等等)
- 应用排行榜
- 网站访问统计
- 数据过期处理(可以精确到毫秒)
- 分布式集群架构中的session分离
-
String(字符串)
1. 是redis的最基本的类型,一个key对应一个value
2. string类型是二进制安全的。意思是redis的String可以包含任意数据。如jpg图片或者序列对象
3. String类型是redis的基本数据类型,string类型的最大值能存储512MB.
添加值 set key value
获取值 get key
删除 del key
操作如下:
- Hash(字典)
- Redis hash 是一个建值(key -> value) 对集合
- hash特别适合用于存储对象
- 每一个Hash可以存储(40多亿键值对)
添加值: hmset 名字 key value
获取值: hget 名字 key
hgetall key:获取所有的field 和value
hdel key field
-
Set(集合)
- Redis 的Set是 String 类型的无序集合
- 集合是通过哈希表来实现的,所以添加,删除,查找的复杂度都是O(1)
添加 :sadd命令,执行成功返回0,执行失败返回1 sadd key value
删除集合:srem key value 删除set集合中的某一个元素
遍历集合 smembers key
sadd set_test hello
-
List(列表)
- Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
添加到左边 lpush key value
添加到右边 rpush key value
遍历 lrange key start end 如 0 10
删除左边 lpop key
删除右边 rpop key
-
zset(sorted set :有序集合) 使用调表实现
- Redis zset和set 一样也是String类型元素,而不让有重复的成员
- redis是通过分数来为集合中的成员进行从小到大的排序
- zset的成员是唯一的,但分数(score)却可以重复。
添加命令
zadd key score member
zrange key start end [withscores]
zrem key value
- HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 结构。
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
数据类型总结
类型 | 简介 | 特性 | 场景 |
---|---|---|---|
String(字符串) | 二进制安全 | 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M | |
Hash(字典) | 键值对集合,即编程语言中的Map类型 | 适合存储对象,并且可以像数据库中update 一个属性一样只修改某一项属性值(Mamcached中需要取出整个字符串反序列化成对象修改再序列化回去) | 存储、读取、修改用户属性 |
List(列表) | 链表(双向链表) | 增删快,提供了某一段元素的API | 1 最新消息排行等功能(比如朋友圈的时间线)2 消息队列 |
Set(集合) | 哈希表实现,元素不能重复 | 1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作 | 1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐 |
Sorted Set(有序集合) | 将Set中的元素增加一个权重参数score,元素按score有序排列 | 数据插入集合时,已经进行天然排序 | 1、排行榜 2、带权重的消息队列 |
4 持久化
- redis 是一个内存数据库,当redis服务器重启,或者电脑重启时候,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘文件当中。
- redis持久化机制:
1. RDB:默认方式,不需要经行配置,在一定时间中,检测key的变化情况,然后持久化数据
2 AOF: 日志记录的方式,可以记录每一条命令的操作,可以每一次命令操作后,持久化数据
5 java 使用Redis
Jedis jedis = new Jedis("localhost",6379);
jedis.close();
使用连接池:JedisPool
1 创建连接池
2 调用getResource()方法获取Jedis连接
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
//1 创建Jedis连接池对象
JedisPool jedisPool =new JedisPool(config,"localhost",6379);
jedis jedis= jedisPool.getResource();