In the previous article, we talked about the usage scenarios of the five basic data types of redis. In addition to string, hash, list, set and Zset, redis also provides some other data structures (of course, it is not a data structure in the strict sense). Let’s see what else redis can do?
One bitmaps
In the computer, binary is used as the basic unit of information, that is, any input information will eventually be transferred to a string of binary numbers at the bottom of the computer. In redis, bitmaps are provided for bit operations. We can think of bitmaps as an array in bits, and the subscript of the array is called offset. The advantage of using bitmaps is that it takes less space.
If we want to record whether an employee has logged in to the company’s official website today, we can use the date as the key and the employee ID as the offset (where the employee ID is self incremented in the database). If the ID starts from 1000, in order to save space, we will generally subtract this initial value from the employee ID as the offset. The offset is generally from 10000
Start. Do you want to access the official website0
and1
To show.
In this case, the ID is3
The employee visited the official website and wrote his value as1
#The employee with ID 3 visited the official website
setbit user:2020-11-04 3 1
#The employee with ID 18 visited the official website
setbit user:2020-11-04 18 1
Check whether an employee has visited the official website
getbit user:2020-11-04 1
Query the number with a value of 1 in the specified range (bytes). For example, I want to see how many employees with IDs from 1 to 30 have accessed the official website
bitcount user:2020-11-04 0 3
II. Hyperlog
HyperLogLog
Data statistics can be completed by using a very small memory space. A single piece of data cannot be obtained. It can only be used for statistics, and there will be a certain error rate.
If I want to count the IP addresses accessing the official website
Add the IP list accessed by the official website today
#IP accessed on November 4, 2020
pfadd 2020-11-04:ip "ip1" "ip2" "ip3"
#IP accessed on November 5, 2020
pfadd 2020-11-05:ip "ip3" "ip4" "ip5"
Calculate the number of IP addresses accessed on the official website today
pfcount 2020-11-04:ip
The returned result is 3
Check how many independent IPS have visited the website in 2020-11-04 and 2020-11-05
First, merge the data of two days and copy it to a value
pfmerge 2020-11:ip 2020-11-04:ip 2020-11-05:ip
Then use the pfcount command to query, and the value obtained is 5
pfcount 2020-11:ip
III. Geo
stayRedis3.2
Geo (geographic location) function is added in the version, which can be used to get people nearby.
The add command is as follows, which can be added in batch
geoadd city longitud latitude member
We add the location information of several cities to obtain the cities near a city
geoadd city 116.28 39.55 beijing 117.12 39.08 tianjin
The command to obtain the longitude and latitude of Beijing is as follows
geopos city beijing
View the distance between Beijing and Tianjin
geodist city beijing tianjin km
The last km indicates the distance, and the unit is km. The following units are supported:
- m. Meters
- Km, KM
- Mi, miles
- FT, ruler
There are two commands to get the location nearby,georadius
Obtained according to longitude and latitude,georadiusbymember
Get by member
Georadius key longitude latitude [unit]
Geordiusbymember key member [unit]
Non mandatory parameters can also be followed. The parameters are as follows:
- Withcoord: longitude and latitude are included in the returned result
- Withlist: the return result contains the distance from the center
- Withhash: the returned result contains geohash (that is, convert longitude and latitude into hash value)
- Count: Specifies the number of returned results
- Asc|desc: the returned results are sorted by the distance from the center
- Store key: saves the geographic location information of the returned result to the specified key
- Storedest key: saves the distance from the returned result to the center to the specified key
IV. publish subscribe mode messages
In the previous article, it was mentioned that you can use list and Zset to implement message queue, but the message queue implemented above is a point-to-point mode, that is, a message can only be consumed by one consumer. In addition, redis also supports the publish subscribe mode, that is, a message is consumed by all subscribers, such as broadcasts, announcements, etc. after publishing an announcement, all users who pay attention to me can receive the announcement.
- Release news
Publish to channel: message a message, the message content ishi
pulish channel:message hi
- Subscription channel
Subscribers can subscribe to one or more channels, such as channel: message
subscribe channel:message
- Unsubscribe
unsubscribe channel:message
- View active channels
pubsub channels
- View subscriptions
View the number of channel: Message subscriptions
pubsub numsub channel:message
The publish subscribe mode of redis is slightly rough compared with the professional message middleware, but it is very simple to implement and the learning cost is low.
V bloom filter
Bloom filter isredis4
A new feature in version. Its implementation principle is similar to that of bitmaps. It also uses a single digit group to pass your value throughMultipleHash function, get the position of the corresponding bit group, and set these values to 1. Bloom filters are often not used to prevent cache penetration.
If an element does not exist, it must not exist. If an element exists, it may not exist. This is because if there are three elementsa
,b
,c
To put it in the same array, supposea
After three hashes, you can get three positions 1, 5 and 7, and then these three positions will be modified to1
,b
After three hashes, three positions 2, 4 and 6 are obtained, and these three positions are modified to1
。c
After three hashes, the positions 2, 5 and 7 are obtained, but after the first two element hashes, these three positions have been modified to1
Okay, so what can we sayc
Does it have to exist? Obviously not!
Focus and don’t get lost
If you think the article is good, welcomefollow、give the thumbs-up、Collection, your support is the driving force of my creation. Thank you.
If there is a problem with the writing of the article, please don’t save your writing. Welcome to leave a message and point out that I will check and modify it in time.
If you want to know more about me, you can search “on wechat”Java journey“Pay attention. Reply1024“You can get learning videos and exquisite e-books. Push technical articles on time at 7:30 every day, so that your way to work is not lonely, and there are book delivery activities every month to help you improve your hard power!